
Altcted & Easy LLM Finetuning باستخدام الأساليب الأكثر تقدماً (Qlora ، Deepspeed ، GPTQ ، Flash Hound 2 ، FSDP ، إلخ)
تم تطويره بواسطة بوريس زوبارف | السيرة الذاتية | LinkedIn | [email protected]
هل تستخدم نماذج لغة كبيرة (LLMS) لعملك وتريد تدريبها بشكل أكثر كفاءة مع الأساليب المتقدمة؟ هل ترغب في التركيز على البيانات والتحسينات بدلاً من الترميز المتكرر والمستهلك للوقت لتدريب LLM؟
X - LLM هو الحل الخاص بك. إنها مكتبة سهلة الاستخدام تعمل على تبسيط تحسين التدريب ، بحيث يمكنك التركيز على تعزيز النماذج والبيانات الخاصة بك . مزود بتقنيات التدريب المتطورة ، تم تصميم X-LLM من أجل الكفاءة من قبل المهندسين الذين يفهمون احتياجاتك.
X - LLM مثالية سواء كنت تستعد للإنتاج أو تحتاج إلى أداة نماذج أولية سريعة .
W&BYi-34B و Mistal AI و Llama 2 و Zephyr و OpenChat و Falcon و Phi و Qwen و MPT وغيرها الكثير يتم اختبار X—LLM على Python 3.8+ و Pytorch 2.0.1+ و CUDA 11.8.
pip install xllm الإصدار الذي يشمل deepspeed و flash-attn و auto-gptq :
pip install " xllm[train] " إصدار xllm الافتراضي الموصى به للتطوير المحلي ، موصى به xllm[train] للتدريب.
إصدار CUDA: 11.8 Docker: huggingface/transformers-pytorch-gpu:latest
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . experiments import Experiment
# Init Config which controls the internal logic of xllm
# QLoRA example
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
)
# Prepare the data
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
# Build Experiment from Config: init tokenizer and model, apply LoRA and so on
experiment = Experiment ( config = config , train_dataset = train_dataset )
experiment . build ()
# Run Experiment (training)
experiment . run ()
# # [Optional] Fuse LoRA layers
# experiment.fuse_lora()
# [Optional] Or push LoRA weights to HuggingFace Hub
experiment . push_to_hub ( repo_id = "YOUR_NAME/MODEL_NAME" )Config xllmالمزيد عن التكوين
config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
) config = Config (
model_name_or_path = "openchat/openchat_3.5" ,
apply_lora = True ,
lora_rank = 8 ,
lora_alpha = 32 ,
lora_dropout = 0.05 ,
raw_lora_target_modules = "all" ,
# Names of modules to apply LoRA. A comma-separated string, for example: "k,q,v" or "all".
) لتدريب نموذج QLoRA ، نحتاج إلى تحميل نموذج العمود الفقري باستخدام مكتبة bitsandbytes وأوزان INT4 (أو int8).
config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
) config = Config (
model_name_or_path = "01-ai/Yi-34B" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
llm_int8_threshold = 6.0 ,
llm_int8_has_fp16_weight = True ,
bnb_4bit_use_double_quant = True ,
bnb_4bit_quant_type = "nf4" ,
) قبل ذلك ، يجب عليك تسجيل الدخول إلى Huggingface Hub أو إضافة API Token إلى متغيرات البيئة.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
push_to_hub = True ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/AntModel-7B-XLLM-Demo-LoRA" ,
save_steps = 25 ,
)save_stepsLoRA ، فسيتم حفظ أوزان LoRA فقط قبل ذلك ، يجب عليك تسجيل الدخول إلى W&B أو إضافة API Token إلى متغيرات البيئة.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
report_to_wandb = True ,
logging_steps = 5 ,
wandb_project = "xllm-demo" ,
) سيساعد هذا في استخدام less GPU memory أثناء التدريب ، أي أنك ستتمكن من معرفة أكثر من هذه التقنية. إن عيوب هذه التقنية هي إبطاء الخطوة الأمامية ، أي slowing down training .
سوف تقوم بتدريب نماذج أكبر (على سبيل المثال 7 ب في كولاب) ، ولكن على حساب سرعة التدريب.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
use_gradient_checkpointing = True ,
) هذا يسرع التدريب واستهلاك ذاكرة GPU ، لكنه لا يعمل مع جميع النماذج ووحدات معالجة الرسومات. تحتاج أيضًا إلى تثبيت flash-attn لهذا الغرض. يمكن القيام بذلك باستخدام:
pip install "xllm[train]"
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
use_flash_attention_2 = True ,
)apply_lora ). يسمح بتقليل هائل في تكاليف التدريب ، علاوة على ذلك ، يساعد على مكافحة النسيان الكارثي بشكل فعال.load_in_4bit و prepare_model_for_kbit_training معًا. هذا أيضا يقلل بشكل كبير من استهلاك الذاكرة.use_gradient_checkpointing . هذه الطريقة تقلل بشكل كبير من استهلاك الذاكرة ، ولكن على حساب إبطاء التدريب.push_to_hub و hub_private_repo ، أيضًا تحديد اسم النموذج في hub_model_id و save_steps . مثال: "Bobazooba/Supadupallama-7B-Lora". أثناء التدريب ، سيتم حفظ كل نقطة تفتيش في النموذج الخاص بك في مركز Huggingface. إذا قمت بتحديد apply_lora ، فسيتم حفظ أوزان Lora فقط ، والتي يمكنك لاحقًا دمجها بسهولة مع النموذج الرئيسي ، على سبيل المثال ، باستخدام xllm .use_flash_attention_2report_to_wandb ، أيضًا تحديد wandb_project (اسم المشروع في W & B) و wandb_entity (اسم المستخدم أو المؤسسة في W & B).push_to_hub ، تحتاج إلى تسجيل الدخول إلى Huggingface Hub مسبقًا أو تحديد الرمز المميز ( HUGGING_FACE_HUB_TOKEN ) في ملف .env. وبالمثل ، عند استخدام report_to_wandb ، ستحتاج إلى تسجيل الدخول إلى W & B. يمكنك إما تحديد الرمز المميز ( WANDB_API_KEY ) في ملف .env أو سيُطلب منك إدخال الرمز المميز على سطر الأوامر. qlora
التدرج checkpointing
فلاش الانتباه 2
استقرار التدريب
ادفع نقاط التفتيش إلى Huggingface Hub
تقرير W&B
config = Config (
model_name_or_path = "meta-llama/Llama-2-7b-hf" ,
tokenizer_padding_side = "right" , # good for llama2
warmup_steps = 1000 ,
max_steps = 10000 ,
logging_steps = 1 ,
save_steps = 1000 ,
per_device_train_batch_size = 2 ,
gradient_accumulation_steps = 2 ,
max_length = 2048 ,
stabilize = True ,
use_flash_attention_2 = True ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
use_gradient_checkpointing = True ,
push_to_hub = False ,
hub_private_repo = True ,
hub_model_id = "BobaZooba/SupaDupaLlama-7B-LoRA" ,
report_to_wandb = False ,
wandb_project = "xllm-demo" ,
wandb_entity = "bobazooba" ,
)هذه العملية مخصصة فقط للنماذج ذات محول Lora.
يمكنك تحديد بشكل صريح لتدمير النموذج بعد التدريب.
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
fuse_after_training = True ,
)حتى عندما تستخدم qlora
config = Config (
model_name_or_path = "HuggingFaceH4/zephyr-7b-beta" ,
apply_lora = True ,
load_in_4bit = True ,
prepare_model_for_kbit_training = True ,
fuse_after_training = True ,
)أو يمكنك دمج النموذج بنفسك بعد التدريب.
experiment . fuse_lora () هناك حاجة إلى DeepSpeed لنماذج التدريب على multiple GPUs . يتيح لك DeepSpeed efficiently manage the resources of several GPUs during training . على سبيل المثال ، يمكنك distribute the gradients and the state of the optimizer to several GPUs ، بدلاً من تخزين مجموعة كاملة من التدرجات وحالة المحسن على كل وحدة معالجة الرسومات. يمكن أن يحدث بدء التدريب باستخدام DeepSpeed فقط من command line .
train.py
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset ) قم بتشغيل القطار (في معلمة num_gpus ، حدد العديد من وحدات معالجة الرسومات التي لديك)
deepspeed --num_gpus=8 train.py --deepspeed_stage 2يمكنك أيضًا تمرير معلمات أخرى
deepspeed --num_gpus=8 train.py
--deepspeed_stage 2
--apply_lora True
--stabilize True
--use_gradient_checkpointing True| اسم | تعليق | وصلة |
|---|---|---|
| X - النماذج الأولية | في هذا الكمبيوتر الدفتري سوف تتعلم أساسيات المكتبة | |
| llama2 & mistral ai صقل فعال | تدريب طراز 7 ب في كولاب باستخدام Qlora و BNB Int4 و Rachdient Checkpoining و X - Llm |
لا يمكّن X—LLM من النماذج الأولية فحسب ، بل يسهل أيضًا تطوير حلول جاهزة للإنتاج من خلال القدرات المدمجة والتخصيص.
يعد استخدام X—LLM لتدريب النموذج أمرًا سهلاً ويتضمن هذه الخطوات القليلة:
Prepare - الحصول على البيانات والنموذج جاهزًا عن طريق تنزيلها وإعدادها. يحفظ البيانات محليًا إلى config.train_local_path_to_data و config.eval_local_path_to_data إذا كنت تستخدم مجموعة بيانات evalTrain - استخدم البيانات التي تم إعدادها في الخطوة السابقة لتدريب النموذجFuse - إذا استخدمت لورا أثناء التدريب ، فوز لوراQuantize - قم بتحسين استخدام ذاكرة النموذج الخاص بك عن طريق تحديد كميته تذكر أن هذه المهام في X—LLM تبدأ من سطر الأوامر. لذلك ، عندما تكون مستعدًا جميعًا ، سيبدو إطلاق مشروعك الكامل شيئًا مثل هذا:
python3 MY_PROJECT/cli/prepare.py
--dataset_key MY_DATASET
--model_name_or_path mistralai/Mistral-7B-v0.1
--path_to_env_file ./.envdeepspeed --num_gpus=8 MY_PROJECT/cli/train.py
--use_gradient_checkpointing True
--deepspeed_stage 2
--stabilize True
--model_name_or_path mistralai/Mistral-7B-v0.1
--use_flash_attention_2 False
--load_in_4bit True
--apply_lora True
--raw_lora_target_modules all
--per_device_train_batch_size 8
--warmup_steps 1000
--save_total_limit 0
--push_to_hub True
--hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_private_repo True
--report_to_wandb True
--path_to_env_file ./.envpython3 MY_PROJECT/cli/fuse.py
--model_name_or_path mistralai/Mistral-7B-v0.1
--lora_hub_model_id MY_HF_HUB_NAME/LORA_MODEL_NAME
--hub_model_id MY_HF_HUB_NAME/MODEL_NAME
--hub_private_repo True
--force_fp16 True
--fused_model_local_path ./fused_model/
--path_to_env_file ./.envpython3 MY_PROJECT/cli/quantize.py
--model_name_or_path ./fused_model/
--apply_lora False
--stabilize False
--quantization_max_samples 128
--quantized_model_path ./quantized_model/
--prepare_model_for_kbit_training False
--quantized_hub_model_id MY_HF_HUB_NAME/MODEL_NAME_GPTQ
--quantized_hub_private_repo True
--path_to_env_file ./.env في الوقت الحالي ، تتيح لك مكتبة X—LLM استخدام مجموعة بيانات الصودا فقط. لقد قمت بإعدادها بهذه الطريقة لأغراض تجريبية ، لكننا نخطط لإضافة المزيد من مجموعات البيانات قريبًا. ستحتاج إلى معرفة كيفية تنزيل مجموعة البيانات والتعامل معه. ببساطة ، أنت تعتني ببياناتك ، و X—LLM تعالج الباقي. لقد فعلنا ذلك بهذه الطريقة عن قصد ، لنمنحك مساحة كبيرة للحصول على إبداع وتخصيص محتوى قلبك.
يمكنك تخصيص مجموعة البيانات الخاصة بك بالتفصيل ، وإضافة حقول إضافية. كل هذا سيمكنك من تنفيذ أي مهمة تقريبًا في مجالات Supervised Learning والتعلم Offline Reinforcement Learning .
في الوقت نفسه ، لديك دائمًا طريقة سهلة لإرسال بيانات لنمذجة اللغة.
from xllm import Config
from xllm . datasets import GeneralDataset
from xllm . cli import cli_run_train
if __name__ == '__main__' :
train_data = [ "Hello!" ] * 100
train_dataset = GeneralDataset . from_list ( data = train_data )
cli_run_train ( config_cls = Config , train_dataset = train_dataset ) لإعداد مشروعك الخاص باستخدام X—LLM ، تحتاج إلى القيام شيئين:
X—LLM في مشروعكبمجرد الانتهاء من ذلك ، سيكون مشروعك جيدًا للذهاب ، ويمكنك البدء في تشغيل الخطوات التي تحتاجها (مثل الاستعداد والتدريب وما إلى ذلك).
للحصول على مقبض لبناء مشروعك باستخدام X—LLM ، تحقق من المواد أدناه.
X—LLM وتناسبه في مشروعك الخاص تستخدم مكتبة X—LLM إعداد تكوين واحد لجميع الخطوات مثل التحضير والتدريب والخطوات الأخرى. تم تصميمه بطريقة تتيح لك فهم الميزات المتاحة بسهولة وما يمكنك ضبطه. يحتوي Config على التحكم تقريبًا على كل جزء من كل خطوة. بفضل التهيئة ، يمكنك اختيار مجموعة البيانات الخاصة بك ، وتعيين المجمع الخاص بك ، وإدارة نوع القياس الكمي أثناء التدريب ، وتحديد ما إذا كنت ترغب في استخدام Lora ، إذا كنت بحاجة إلى دفع نقطة تفتيش إلى HuggingFace Hub ، وأكثر من ذلك بكثير.
مسار التكوين: src.xllm.core.config.Config
أو
from xllm import Config لديك المرونة في تعديل العديد من جوانب تدريب النموذج الخاص بك: البيانات ، وكيفية معالجة البيانات ، والمدرب ، والتكوين ، وكيفية تحميل النموذج ، وماذا يحدث قبل التدريب وبعده ، وأكثر من ذلك بكثير.
لدينا مكونات جاهزة للاستخدام لكل جزء من خط أنابيب xllm . يمكنك تبديل بعض المكونات تمامًا مثل مجموعة البيانات والمجمعة والمدرب والتجربة. بالنسبة لبعض المكونات مثل التجربة والتكوين ، لديك خيار للبناء على ما يوجد بالفعل.
بناء شيء رائع مع X - LLM؟ يرجى التواصل معي على [email protected]. أحب أن أسمع منك.
اكتب إلينا حتى نتمكن من إضافة مشروعك.
فكر في إضافة شارة إلى بطاقة النموذج الخاصة بك.
لمشروع جيثب:
[ < img src = " https://github.com/BobaZooba/xllm/blob/main/static/images/xllm-badge.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)لعناق الوجه بطاقة محور بطاقة:
[ < img src = " https://cdn-uploads.huggingface.co/production/uploads/6074d5f1134c000d1ae10d42/JudU3rrPP5i87CfwINANO.png " alt = " Powered by X—LLM " width = " 175 " height = " 32 " / > ](https://github.com/BobaZooba/xllm)سيبدو هكذا:
![]()
في الوقت الحالي ، ليس لدينا اختبارات تكامل مستمرة تستخدم وحدة معالجة الرسومات. ومع ذلك ، قد نطور هذه الأنواع من الاختبارات في المستقبل. من المهم أن نلاحظ ، مع ذلك ، أن هذا سيتطلب وقت الاستثمار في تطويرهم ، وكذلك تمويل صيانة الماكينة.
Experiment