Proyek ini bertujuan untuk menginstruksikan penyempurnaan model dasar multi-kelas untuk mewujudkan lora + deep-deeped + single card/multi-card fine-tuning. Model yang saat ini diuji ditampilkan dalam tabel di bawah ini:
| Uji model | bahasa | Uji bobot |
|---|---|---|
| China-Llama-Alpaca | Cina | China-Alpaca-plus-Lora-13b |
| Open-llama | Bahasa inggris | open_llama_13b |
| open_llama_7b | ||
| Belle | Cina | Belle-llama-ext-13b |
| Belle-llama-ext-7b | ||
| BUNGA | Bahasa inggris | Bloomz-1B7 |
| Bloomz-7b1 | ||
| Chatglm-6b | Cina | Chatglm-6b |
| Chatglm2-6b | ||
| Baichuan | Cina | Baichuan-7b |
| Cina | Baichuan-13b-chat | |
| Tigerbot | Cina | Tigerbot-7b-Sft |
| Tigerbot-7b-base | ||
| Python | Bahasa inggris | Pythia-1B-Deduped |
| Pythia-12b-Deduped |
TODO:
Di sini kami menggunakan CCKS2023-PromptCBlue Model Besar Medis Medis untuk mengevaluasi data yang ditetapkan dalam kompetisi benchmark sebagai contoh. Dataset ini mengubah dataset "Tantangan Pemrosesan Informasi Medis Tiongkok", mengubah semua 16 skenario medis NLP tugas menjadi tugas pembuatan bahasa berbasis prompt, membentuk tolok ukur evaluasi LLM pertama untuk skenario medis Tiongkok.
PromptCBlue menggunakan 94 Templat Penyempurnaan Instruksi untuk melakukan berbagai tugas di Benchmark Cblue. Setelah transformasi, semua kumpulan data NLP teks medis akan dikonversi menjadi format berikut. String bidang input adalah input ke model LLM, dan bidang target juga merupakan string, yang merupakan urutan teks yang perlu dihasilkan oleh model LLM.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} Untuk memfasilitasi verifikasi cepat, kami mengekstraksi subdataSet CHIP-CTC , termasuk 6000 set pelatihan, 1100 set verifikasi, dan 1060 set tes. Alamat unduhan
Model dapat diunduh secara lokal. Selama pelatihan, parameter model_name_or_path diteruskan ke jalur model, atau Anda hanya dapat meneruskan nama model pada wajah pelukan, seperti THUDM/chatglm-6b , dan kode akan secara otomatis mengunduh model.
Beberapa model kelas Llama memerlukan konversi model, dan model yang terlibat meliputi: Cina-Alpaca-plus-Lora-13b, lihat metode konversi di sini.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt Ada file konfigurasi LORA untuk berbagai model dalam file config.py , yang dapat disesuaikan dan dimodifikasi. Isi file konfigurasi adalah sebagai berikut:
' 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 "
},Deskripsi Lapangan:
lora_r : pangkat lora lora_alpha : lora_dropout : Probabilitas dropout lapisan Lora;lora_target_modules : Modul mana yang digantung;modules_to_save : Selain lapisan Lora, modul mana yang dapat dilatih dan akan disimpan di pos pemeriksaan terakhir. Konfigurasi Zero2 digunakan di sini:
{
" 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
}Untuk strategi untuk pelatihan paralel multi-kartu, silakan merujuk di sini.
config.py memiliki beberapa konfigurasi lain: MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , pilih berbagai model CALSS dan Tokenizer sesuai dengan parameter model_type , dan pilih ID token khusus sesuai dengan model_name_or_path . Nilai model_type dan model yang sesuai adalah sebagai berikut:
llama : Anda dapat memanggil model tipe llama seperti Cina-Alpaca-plus-lora-13b, open_llama_13b, open_llama_7b, belle-llama-ext-13b, belle-llama-ext-7b, tigerbot-7b-sft, Tigerbot-7b-base, dll.glm : chatglm-6b dan chatglm2-6b dapat dipanggil.bloom : Model tipe Bloom seperti Bloomz-1B7, Bloomz-7B1, dll. Dapat dipanggil.pythia : Anda dapat menghubungi Python-1B-Deduped, Pythia-12b-Deduped dan model Python lainnya. Jalankan scripts/train.sh . Isi file adalah sebagai berikut:
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 Parameternya adalah sebagai berikut:
deepspeed : jalur file konfigurasi dari DeepSpeeddo_train : bool, apakah akan mengaktifkan pelatihando_eval : bool, apakah akan memverifikasi pada set verifikasi, jika evaluation_strategy tidak sama dengan "tidak", itu akan diatur ke Truemodel_name_or_path : Nama model pada wajah pelukan, atau jalan yang sudah ada secara lokalmodel_type : Jenis model, opsi opsional termasuk llama , glm , bloom , pythia , baichuan , otheruse_lora : Gunakan fine-tuning lora, default True , jika tidak, itu adalah penyesuaian penuhfp16 : Apakah akan menggunakan presisi FP16 (campuran) untuk berlatihtrain_file : File Data Setel Pelatihanvalidation_file : Verifikasi Menetapkan file datapreprocessing_num_workers : Jumlah pekerja saat batch participle datacache_dir : Jalur cache ke model HFprompt_column : Nama bidang yang dimasukkan dalam sampelresponse_column : output nama bidang dalam sampeloutput_dir : jalur untuk menyimpan hasil pelatihanoverwrite_output_dir : jika diatur ke True , timpa folder outputmax_source_length : Panjang maksimum teks inputmax_target_length : panjang maksimum teks outputpre_device_train_batch_size : Ukuran batch pada setiap kartu selama pelatihanpre_device_eval_batch_size : ukuran batch pada setiap kartu selama verifikasi/tesgradient_accumulation_steps : putaran akumulasi gradienmax_steps : Jumlah putaran pelatihan, satu putaran berisi jumlah sampel: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : Berapa banyak putaran pencetakan logsave_strategy : Selama proses pelatihan, hasil perantara disimpan sesuai dengan jumlah langkah atau angka zaman. Nilai opsionalnya no , steps , dan epochsave_steps : simpan pos pemeriksaan setiap langkahevaluation_strategy : Jalankan set verifikasi sesuai dengan jumlah langkah atau nomor zaman. Nilai opsionalnya no , steps , dan epocheval_steps : verifikasi setiap jumlah langkahlearning_rate : Tingkat belajar Jika ini adalah pelatihan multi-kartu, harap modifikasi yang sesuai di SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . Misalnya, pelatihan 4-kartu dapat diubah menjadi: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
Melihat:
model_name_or_path harus sesuai dengan benar dengan model_type .bos_id , eos_id , dan pad_id dari beberapa model tidak sepenuhnya konsisten. SPECIAL_IDS di config.py menentukan ID token khusus dari setiap model. Selain model yang telah diuji, itu perlu ditambahkan secara manual sendiri.Jalankan skrip inferensi:
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_loraCatatan Masalah:
/work tidak memiliki izin, tambahkan variabel lingkungan: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh Pembaruan Berkelanjutan ...
Terima kasih kepada komunitas untuk model open source yang sangat baik: ChatGLM-6B (ChatGlM2), Chinese-Llama-Alpaca, Openllama, Bloom, Belle, Python, Gptneox, Baichuan.
Proyek ini juga mengacu pada proyek open source yang sangat baik berikut:
Promptcblue
kalimatpiece_chinese_bpe
Chatglm_lora_multi-gpu
Tuning yang efisien chatglm
zero_nlp
Proyek ini hanya untuk studi dan penelitian . Hasil pelatihan model dipengaruhi oleh faktor -faktor seperti struktur model, keacakan, parameter pelatihan, set data, dll. Proyek ini tidak bertanggung jawab atas hasil pelatihan model, juga tidak bertanggung jawab atas konten generasi model, juga tidak bertanggung jawab atas kerugian yang disebabkan oleh penggunaan proyek ini. Proyek ini dikembangkan dan dikelola oleh individu di waktu luang mereka. Karena waktu yang terbatas dan tingkat penulis yang terbatas, ketepatan waktu yang membalas pertanyaan terkait tidak dapat dijamin. Namun, kelompok komunikasi akan didirikan di masa depan. Setiap orang dipersilakan untuk belajar dan membantu satu sama lain.
Jika proyek ini bermanfaat bagi Anda, silakan merujuknya dalam format berikut:
@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},
}