โครงการนี้มีวัตถุประสงค์เพื่อสั่งการปรับแต่งรุ่นฐานแบบหลายชั้นเพื่อให้ตระหนักถึง LORA + DEEPSPEED + การ์ดเดี่ยว/การปรับแต่งแบบหลายการ์ด โมเดลที่ผ่านการทดสอบในปัจจุบันจะแสดงในตารางด้านล่าง:
| ทดสอบแบบจำลอง | ภาษา | ตุ้มน้ำหนัก |
|---|---|---|
| จีน-แอลปากา | ชาวจีน | Chinese-Alpaca-plus-lora-13b |
| เปิดโล่ง | ภาษาอังกฤษ | open_llama_13b |
| open_llama_7b | ||
| เบลล์ | ชาวจีน | Belle-llama-ext-13b |
| Belle-llama-ext-7b | ||
| ผลิบาน | ภาษาอังกฤษ | Bloomz-1b7 |
| Bloomz-7b1 | ||
| chatglm-6b | ชาวจีน | chatglm-6b |
| chatglm2-6b | ||
| ชาวไชน่า | ชาวจีน | Baichuan-7b |
| ชาวจีน | Baichuan-13b-chat | |
| Tigerbot | ชาวจีน | Tigerbot-7b-sft |
| Tigerbot-7b-base | ||
| งูหลาม | ภาษาอังกฤษ | Pythia-1b-deduped |
| Pythia-12b-deduped |
สิ่งที่ต้องทำ:
ที่นี่เราใช้ CCKS2023-PROMPTCBLUE MEDICE MEDICE MEDICE BIG MODEL เพื่อประเมินชุดข้อมูลในการแข่งขันเกณฑ์มาตรฐานเป็นตัวอย่าง ชุดข้อมูลนี้เปลี่ยนชุดข้อมูล "การประมวลผลข้อมูลทางการแพทย์ของจีน CBLUE" การเปลี่ยนภารกิจทางการแพทย์ที่แตกต่างกันทั้ง 16 รายการ NLP เป็นงานสร้างภาษาที่ใช้ภาษาตามรวดเร็วซึ่งเป็นเกณฑ์การประเมิน LLM ครั้งแรกสำหรับสถานการณ์ทางการแพทย์ของจีน
พรอมต์ CBLUE ใช้เทมเพลตการปรับแต่ง 94 คำสั่งเพื่อทำงานต่าง ๆ ในเกณฑ์มาตรฐาน CBLUE หลังจากการแปลงชุดข้อมูล NLP ข้อความทางการแพทย์ทั้งหมดจะถูกแปลงเป็นรูปแบบต่อไปนี้ สตริงฟิลด์อินพุตคืออินพุตไปยังโมเดล LLM และฟิลด์เป้าหมายก็เป็นสตริงซึ่งเป็นลำดับข้อความที่โมเดล LLM จำเป็นต้องสร้าง
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} เพื่ออำนวยความสะดวกในการตรวจสอบอย่างรวดเร็วเราได้แยกส่วนย่อยของ CHIP-CTC รวมถึงชุดฝึกอบรม 6,000 ชุดชุดการตรวจสอบ 1100 ชุดและชุดทดสอบ 1,060 ชุด ดาวน์โหลดที่อยู่
รุ่นสามารถดาวน์โหลดได้ในท้องถิ่น ในระหว่างการฝึกอบรมพารามิเตอร์ model_name_or_path จะถูกส่งผ่านไปยังเส้นทางของโมเดลหรือคุณสามารถส่งผ่านชื่อของโมเดลบนใบหน้ากอดเช่น THUDM/chatglm-6b และรหัสจะดาวน์โหลดโมเดลโดยอัตโนมัติ
คลาส Llama บางรุ่นต้องการการแปลงแบบจำลองและแบบจำลองที่เกี่ยวข้อง ได้แก่ : Chinese-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 lora_alpha : lora_dropout : ความน่าจะเป็นแบบออกกลางคันของเลเยอร์ LORA;lora_target_modules : โมดูลใดที่ Lora แขวนอยู่;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 เช่น Chinese-Alpaca-Plus-Lora-13b, Open_llama_13b, Open_llama_7b, Belle-llama-ext-13b, Belle-llama-ext-7b, Tigerbot-7b-sft, Tigerbot-7b-baseglm : chatglm-6b และ chatglm2-6b สามารถเรียกได้bloom : รุ่น Bloom-type เช่น Bloomz-1B7, Bloomz-7b1 ฯลฯ สามารถเรียกได้pythia : คุณสามารถเรียก Python-1b-deduped, Pythia-12b-deduped และรุ่น 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 : บูลไม่ว่าจะเปิดใช้งานการฝึกอบรมdo_eval : บูลไม่ว่าจะตรวจสอบในชุดการตรวจสอบหาก evaluation_strategy ไม่เท่ากับ "ไม่" มันจะถูกตั้งค่าเป็น Truemodel_name_or_path : ชื่อของโมเดลบนใบหน้ากอดหรือเส้นทางที่มีอยู่แล้วmodel_type : ประเภทของโมเดลตัวเลือกเพิ่มเติม ได้แก่ llama , glm , bloom , pythia , baichuan , otheruse_lora : ใช้การปรับแต่ง Lora, ค่าเริ่มต้นเป็น 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 : ในระหว่างกระบวนการฝึกอบรมผลลัพธ์ระดับกลางจะถูกบันทึกตามจำนวนขั้นตอนหรือหมายเลข EPOCH ค่าเสริมคือ no steps และ epochsave_steps : บันทึกจุดตรวจสอบทุกขั้นตอนevaluation_strategy : เรียกใช้ชุดการตรวจสอบตามจำนวนขั้นตอนหรือหมายเลข EPOCH ค่าเสริมคือ 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), Chinese-Llama-Alpaca, Openllama, Bloom, Belle, Python, Gptneox, Baichuan
โครงการนี้ยังหมายถึงโครงการโอเพนซอร์สที่ยอดเยี่ยมต่อไปนี้:
พรอมต์
sentencepiece_chinese_bpe
chatglm_lora_multi-gpu
chatglm-efficient-tuning
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},
}