يهدف هذا المشروع إلى توجيه صقل النماذج الأساسية متعددة الطبقات لتحقيق Lora + Deepspeed + بطاقة واحدة/صقل متعدد البطاقات. يتم عرض النماذج التي تم اختبارها حاليًا في الجدول أدناه:
| اختبار النموذج | لغة | اختبار الأوزان |
|---|---|---|
| الصينية لاما الريباكا | الصينية | الصينية-ألباكا بلاد لورا -13 ب |
| المفتوح | إنجليزي | open_llama_13b |
| open_llama_7b | ||
| حسناء | الصينية | بيل لاما-أوليت -13 ب |
| بيل لاما-ميت-7 ب | ||
| يزدهر | إنجليزي | Bloomz-1B7 |
| بلوتز -7B1 | ||
| ChatGlm-6b | الصينية | ChatGlm-6b |
| ChatGlm2-6b | ||
| بايتشوان | الصينية | Baichuan-7b |
| الصينية | Baichuan-13B-Chat | |
| Tigerbot | الصينية | Tigerbot-7B-SFT |
| Tigerbot-7b-base | ||
| بيثون | إنجليزي | Pythia-1b-deduged |
| Pythia-12b-deduged |
تودو:
هنا نستخدم نموذج CCKS2023-promptcblue الصيني الطبي الكبير لتقييم مجموعة البيانات في المنافسة القياسية كمثال. تقوم مجموعة البيانات هذه بتحويل مجموعة بيانات "تحدي المعالجة الطبية الصينية CBLUE" ، مما يحول جميع المهام الطبية الستة عشر المختلفة NLP إلى مهام توليد اللغة القائمة على أساس ، وتشكيل أول معيار لتقييم LLM للسيناريوهات الطبية الصينية.
يستخدم QuortcBlue 94 قوالب صقل تعليمية لأداء مهام مختلفة في معيار CBLUE. بعد التحول ، سيتم تحويل جميع مجموعات بيانات النصوص الطبية NLP إلى التنسيق التالي. سلسلة حقل الإدخال هي الإدخال إلى نموذج LLM ، وحقل الهدف هو أيضًا سلسلة ، وهو تسلسل النص الذي يحتاجه نموذج LLM.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} من أجل تسهيل التحقق السريع ، قمنا باستخراج dataset CHIP-CTC ، بما في ذلك 6000 مجموعة تدريب و 1100 مجموعة التحقق و 1060 مجموعة اختبار. تنزيل عنوان
يمكن تنزيل النموذج محليًا. أثناء التدريب ، يتم تمرير معلمة model_name_or_path إلى مسار النموذج ، أو يمكنك فقط تمرير اسم النموذج على وجه المعانقة ، مثل THUDM/chatglm-6b ، وسيقوم الكود بتنزيل النموذج تلقائيًا.
تتطلب بعض نماذج فئة LLAMA تحويل النموذج ، وتشمل النماذج المعنية: الصينية-Alpaca-Plus-Lora-13B ، تشير إلى طريقة التحويل هنا.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt هناك ملفات تكوين LORA لنماذج مختلفة في ملف config.py ، والتي يمكن تخصيصها وتعديلها. محتويات ملف التكوين هي كما يلي:
' glm ' : {
" lora_r " : 8,
" lora_alpha " : 32,
" lora_dropout " : 0.05,
" lora_target_modules " : " query_key_value,dense,dense_h_to_4h,dense_4h_to_h " ,
" modules_to_save " : " null "
},وصف الميدان:
lora_r : رتبة لورا lora_alpha : lora_dropout : احتمال التسرب لطبقة لورا ؛lora_target_modules : الوحدات النمطية التي تعلقها لورا ؛modules_to_save : بالإضافة إلى طبقة Lora ، والتي يتم تعيين الوحدات النمطية على التدريب وسيتم حفظها في نقطة التفتيش الأخيرة. يتم استخدام تكوين Zero2 هنا:
{
" fp16 " : {
" enabled " : " auto " ,
" loss_scale " : 0,
" loss_scale_window " : 100,
" initial_scale_power " : 16,
" hysteresis " : 2,
" min_loss_scale " : 1e-10
},
" bf16 " : {
" enabled " : " auto "
},
" zero_optimization " : {
" stage " : 2,
" allgather_partitions " : true,
" allgather_bucket_size " : 5e8,
" overlap_comm " : true,
" reduce_scatter " : true,
" reduce_bucket_size " : 5e8,
" contiguous_gradients " : true
},
" gradient_accumulation_steps " : " auto " ,
" gradient_clipping " : " auto " ,
" steps_per_print " : 2000,
" train_batch_size " : " auto " ,
" train_micro_batch_size_per_gpu " : " auto " ,
" wall_clock_breakdown " : false
}للحصول على استراتيجيات للتدريب المتوازي متعدد البطاقات ، يرجى الرجوع إلى هنا.
يحتوي config.py على العديد من التكوينات الأخرى: MODEL_MAP و TOKENIZER_MAP و SPECIAL_IDS وتحديد Calss نموذج مختلف وفئة Tokenizer وفقًا لمعلمة model_type ، وحدد معرف الرمز المميز الخاص وفقًا لـ model_name_or_path . قيمة model_type والنموذج المقابل على النحو التالي:
llama : يمكنك استدعاء نماذج من نوع Llama مثل الصينية-Alpaca-Plus-Lora-13B ، Open_llama_13b ، open_llama_7b ، belle-llama-ext-13b ، belle-llama-ext-7b ، tigerbot-7b-sft ، tigerbot-7b-base ، etc.glm : يمكن استدعاء ChatGLM-6B و ChatGLM2-6B.bloom : يمكن استدعاء نماذج من نوع Bloom مثل Bloomz-1B7 و Bloomz-7B1 وما إلى ذلك.pythia : يمكنك استدعاء Python-1B-Deduged و Pythia-12b-Deduged وغيرها من نماذج Python. تشغيل scripts/train.sh . محتويات الملف كما يلي:
LR=2e-4
model_name_or_path= " ../models/pythia-12b-deduped " # LLM底座模型路径,或者是huggingface hub上的模型名称
model_type= ' pythia '
your_data_path= " ./datasets/PromptCBLUE " # 填入数据集所在的文件夹路径
your_checkpopint_path= " ./experiments/outputs " # 填入用来存储模型的路径
max_steps=100
max_source_length=256
max_target_length=16
peft_path= " " # 如果之前训练过,且存储了peft权重,则设置为peft权重的文件夹路径
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 train.py
--deepspeed configs/ds_zero2_no_offload.json
--do_train
--do_eval
--model_name_or_path $model_name_or_path
--model_type $model_type
--use_lora True
--fp16
--train_file $your_data_path /train_CHIP-CTC.json
--validation_file $your_data_path /dev_CHIP-CTC.json
--preprocessing_num_workers 8
--cache_dir $your_data_path
--prompt_column input
--response_column target
--output_dir $your_checkpopint_path /test-pythia-12b-deduped-lora- $LR
--overwrite_output_dir
--max_source_length $max_source_length
--max_target_length $max_target_length
--per_device_train_batch_size 4
--per_device_eval_batch_size 4
--gradient_accumulation_steps 16
--max_steps $max_steps
--logging_steps 10
--save_strategy steps
--save_steps 50
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 50
--learning_rate $LR المعلمات كما يلي:
deepspeed : مسار ملف التكوين من DeepSpeeddo_train : Bool ، سواء لتمكين التدريبdo_eval : BOOL ، سواء كان للتحقق من مجموعة التحقق ، إذا كان evaluation_strategy لا يساوي "لا" ، فسيتم ضبطه على Truemodel_name_or_path : اسم النموذج على وجه المعانقة ، أو المسار الموجود بالفعل محليًاmodel_type : نوع النموذج ، الخيارات الاختيارية تشمل llama ، glm ، bloom ، pythia ، baichuan ، otheruse_lora : استخدم صقل Lora Fine ، افتراضيًا True ، وإلا فهو صقل كامل كاملfp16 : ما إذا كان يجب استخدام الدقة FP16 (مختلطة) للتدريبtrain_file : ملف بيانات مجموعة التدريبvalidation_file : ملف بيانات التحققpreprocessing_num_workers : عدد العمال عند الدفعة بيانات المشاركةcache_dir : مسار ذاكرة التخزين المؤقت إلى نموذج HFprompt_column : تم إدخال اسم الحقل في العينةresponse_column : إخراج اسم الحقل في العينةoutput_dir : المسار لحفظ نتيجة التدريبoverwrite_output_dir : إذا تم تعيينه على True ، فقم بالكتابة فوق مجلد الإخراجmax_source_length : الحد الأقصى لطول نص الإدخالmax_target_length : الحد الأقصى لطول نص الإخراجpre_device_train_batch_size : حجم الدُفعة على كل بطاقة أثناء التدريبpre_device_eval_batch_size : حجم الدُفعة على كل بطاقة أثناء التحقق/الاختبارgradient_accumulation_steps : جولات تراكم التدرجmax_steps : عدد جولات التدريب ، جولة واحدة تحتوي على عدد العينات: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : كم عدد جولات طباعة السجلsave_strategy : أثناء عملية التدريب ، يتم حفظ النتائج الوسيطة وفقًا لعدد الخطوات أو أرقام الحقبة. القيم الاختيارية هي no ، steps ، epochsave_steps : احفظ نقطة التفتيش في كل خطوةevaluation_strategy : قم بتشغيل مجموعة التحقق وفقًا لعدد الخطوات أو أرقام الحقبة. القيم الاختيارية هي no ، steps ، epocheval_steps : التحقق من كل عدد من الخطواتlearning_rate : معدل التعلم إذا كان التدريب متعدد البطاقات ، فيرجى تعديل واحد المقابل في SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . على سبيل المثال ، يمكن تغيير التدريب المكون من 4 بطاقة إلى: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
يلاحظ:
model_name_or_path بشكل صحيح مع model_type .bos_id و eos_id و pad_id لبعض النماذج غير متسقة تمامًا. تحدد SPECIAL_IDS في config.py معرف الرمز المميز الخاص لكل طراز. بالإضافة إلى النماذج التي تم اختبارها ، يجب إضافتها يدويًا من قبل نفسك.قم بتشغيل البرنامج النصي للاستدلال:
CUDA_VISIBLE_DEVICES=0 python inference.py
--model_name_or_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4
--ckpt_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4/checkpoint-9690
--model_type glm
--data_file ./datasets/PromptCBLUE/test.json
--cache_dir ./datasets/PromptCBLUE
--use_loraسجل المشكلة:
/work إذن ، أضف متغيرات البيئة: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh تحديث مستمر ...
بفضل المجتمع على نماذجه المفتوحة المصدر الممتازة: ChatGlm-6B (ChatGlm2) ، الصينية-ألاما ألباكا ، Openllama ، Bloom ، Belle ، Python ، Gptneox ، Baichuan.
يشير هذا المشروع أيضًا إلى مشاريع مفتوحة المصدر الممتازة التالية:
QuortCblue
SentencePiece_Chinese_BPE
chatglm_lora_multi-gpu
تشات GRING-الكفاءة
Zero_nlp
هذا المشروع مخصص للدراسة والبحث فقط . تتأثر نتائج تدريب النموذج بعوامل مثل بنية النموذج الخاصة ، والعشوائية ، ومعلمات التدريب ، ومجموعات البيانات ، وما إلى ذلك. هذا المشروع ليس مسؤولاً عن نتائج التدريب النموذجي ، كما أنه ليس مسؤولاً عن محتوى توليد النماذج ، كما أنه ليس مسؤولاً عن أي خسائر ناتجة عن استخدام هذا المشروع. تم تطوير هذا المشروع وصيانته من قبل الأفراد في أوقات فراغهم. نظرًا لمحدود الوقت ومستوى المؤلف المحدود ، لا يمكن ضمان توقيت الرد على الأسئلة ذات الصلة. ومع ذلك ، سيتم إنشاء مجموعة اتصال في المستقبل. الجميع مرحب بهم للتعلم ومساعدة بعضهم البعض.
إذا كان هذا المشروع مفيدًا لك ، فيرجى الرجوع إليه بالتنسيق التالي:
@software{LLMs_train,
title = {{LLMs_train: A Set of Code to Fine-Tune Large Language Models}},
author = {Xudong Li},
year = {2023},
url = {https://www.github.com/5663015/LLMs_train},
}