Dieses Projekt zielt darauf ab, die Feinabstimmung von Basismodellen mit mehreren Klassen zur Realisierung von Lora + DeepSpeed + Single Card/Multi-Card-Feinabstimmung zu realisieren. Die aktuell getesteten Modelle sind in der folgenden Tabelle angezeigt:
| Testen Sie das Modell | Sprache | Testgewichte |
|---|---|---|
| Chinesisch-Llama-Alpaka | chinesisch | Chinese-Alpaca-Plus-Lora-13b |
| Open-Llama | Englisch | open_llama_13b |
| open_llama_7b | ||
| Belle | chinesisch | Belle-Llama-text-13b |
| Belle-Llama-text-7b | ||
| BLÜHEN | Englisch | Bloomz-1b7 |
| Bloomz-7b1 | ||
| Chatglm-6b | chinesisch | Chatglm-6b |
| Chatglm2-6b | ||
| Baichuan | chinesisch | Baichuan-7b |
| chinesisch | Baichuan-13b-Chat | |
| Tigerbot | chinesisch | Tigerbot-7b-sft |
| Tigerbot-7b-Base | ||
| Python | Englisch | Pythia-1b-deduped |
| Pythia-12b-deduped |
Todo:
Hier verwenden wir CCKS2023-PromptcBlue Chinese Medical Big Model, um den Datensatz im Benchmark-Wettbewerb als Beispiel zu bewerten. Dieser Datensatz verwandelt den Datensatz "Chinesische medizinische Informationsverarbeitung CBLUE" und verwandelt alle 16 verschiedenen medizinischen Szenarien NLP-Aufgaben in Aufgaben zur Erzeugung von Sprachen und bildet den ersten LLM-Bewertungs-Benchmark für chinesische medizinische Szenarien.
Eingabeaufforderung verwendet 94 Befehlsfeineinstellungsvorlagen, um verschiedene Aufgaben im CBLUE-Benchmark auszuführen. Nach der Transformation werden alle medizinischen Text -NLP -Datensätze in das folgende Format umgewandelt. Die Eingangsfeldzeichenfolge ist die Eingabe in das LLM -Modell, und das Zielfeld ist auch eine Zeichenfolge, die die Textsequenz ist, die das LLM -Modell generieren muss.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} Um die schnelle Überprüfung zu erleichtern, haben wir den CHIP-CTC Subdataset extrahiert, einschließlich 6000 Trainingssätzen, 1100 Überprüfungssätzen und 1060 Testsätzen. Adresse herunterladen
Das Modell kann lokal heruntergeladen werden. Während des Trainings wird model_name_or_path an den Pfad des Modells übergeben, oder Sie können nur den Namen des Modells auf dem Umarmungsgesicht übergeben, z. B. THUDM/chatglm-6b , und der Code lädt das Modell automatisch herunter.
Einige Modelle der Lama-Klasse erfordern eine Modellkonvertierung, und die beteiligten Modelle umfassen: Chinese-Alpaca-Plus-Lora-13b, siehe die Conversion-Methode hier.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt In der Datei config.py gibt es LORA -Konfigurationsdateien für verschiedene Modelle, die angepasst und geändert werden können. Der Inhalt der Konfigurationsdatei ist wie folgt:
' 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 "
},Feldbeschreibung:
lora_r : der Rang von Lora lora_alpha : lora_dropout : Die Ausfallwahrscheinlichkeit der Lora -Schicht;lora_target_modules : Welche Module hängen an;modules_to_save : Zusätzlich zur Lora -Schicht, die Module auf trainierbar eingestellt und im letzten Kontrollpunkt gespeichert werden. Hier wird keine Konfiguration von Zero2 verwendet:
{
" 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
}Für Strategien für eine parallele Multi-Karten-Schulung finden Sie hier hier.
config.py verfügt über mehrere andere Konfigurationen: MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , wählen Sie unterschiedliche Modell -CALSS- und Tokenizer -Klasse gemäß model_type und wählen Sie eine spezielle Token -ID gemäß model_name_or_path . model_type -Wert und das entsprechende Modell sind wie folgt:
llama : Sie können Modelle vom Typ LLAMA wie chinesisch-alpaca-plus-lora-13b, open_llama_13b, open_llama_7b, Belle-Llama-text-13b, Belle-Llama-7b, Tigerbot-7b-SFT, Tigerbot-7b-Base usw. usw., usw., usw.glm : Chatglm-6b und Chatglm2-6b können aufgerufen werden.bloom : Bloom-Typ-Modelle wie Bloomz-1b7, Bloomz-7b1 usw. können aufgerufen werden.pythia : Sie können Python-1b-deduped, pythia-12b-deduped und andere Python-Modelle anrufen. scripts/train.sh . Der Inhalt der Datei lautet wie folgt:
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 Die Parameter sind wie folgt:
deepspeed : Der Konfigurationsdateipfad von Deepspeeddo_train : bool, ob das Training aktiviert werden solldo_eval : bool, ob die Überprüfung der Überprüfung verifiziert werden soll, wenn evaluation_strategy nicht gleich "Nein" ist, wird es auf True gesetztmodel_name_or_path : Der Name des Modells auf dem Umarmungsgesicht oder der Weg, der bereits lokal existiertmodel_type : Die Art des Modells, optionale Optionen umfassen llama , glm , bloom , pythia , baichuan , otheruse_lora : Verwenden Sie die Feinabstimmung von Lora, Standard ist True , ansonsten ist es volles Feinabstimmungfp16 : Ob Sie FP16 (gemischte) Präzision verwenden möchten, um zu trainierentrain_file : Trainingset Datendateivalidation_file : Überprüfungssatzdatendateipreprocessing_num_workers : Anzahl der Arbeitnehmer, wenn Batch -Partizip -Datencache_dir : Cache -Pfad zum HF -Modellprompt_column : Der in der Probe eingegebene Feldnameresponse_column : Der Feldname Ausgabe in der Stichprobeoutput_dir : Der Pfad zum Speichern des Trainingsergebnissesoverwrite_output_dir : Wenn auf True eingestellt wird, schreiben Sie den Ausgangsordner überschreibenmax_source_length : Die maximale Länge des Eingabetxtesmax_target_length : Maximale Länge des Ausgangstextespre_device_train_batch_size : Stapelgröße auf jeder Karte während des Trainingspre_device_eval_batch_size : Stapelgröße auf jeder Karte während der Überprüfung/dem Testgradient_accumulation_steps : Gradientenakkumulationsrundenmax_steps : Die Anzahl der Trainingsrunden, eine Runde enthält die Anzahl der Proben: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : Wie viele Runden des Protokolldruckssave_strategy : Während des Trainingsprozesses werden die Zwischenergebnisse gemäß der Anzahl der Schritte oder Epochennummern gespeichert. Die optionalen Werte sind no , steps und epochsave_steps : Sparen Sie den Checkpoint jeden Schrittevaluation_strategy : Führen Sie den Verifizierungssatz gemäß der Anzahl der Schritte oder Epochennummern aus. Die optionalen Werte sind no , steps und epocheval_steps : Überprüfen Sie jede Anzahl von Schrittenlearning_rate : Lernrate Wenn es sich um ein Multi-Card-Training handelt, ändern Sie bitte die entsprechende in SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . Zum Beispiel kann 4-Karten-Training geändert werden in: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
Beachten:
model_name_or_path muss model_type korrekt entsprechen.bos_id , eos_id und pad_id einiger Modelle sind nicht vollständig konsistent. SPECIAL_IDS in config.py gibt die spezielle Token -ID jedes Modells an. Zusätzlich zu den getesteten Modellen muss es selbst manuell hinzugefügt werden.Führen Sie das Inferenzskript aus:
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_loraProblemrekord:
/work keine Berechtigung hat, fügen Sie Umgebungsvariablen hinzu: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh Kontinuierliches Update ...
Dank der Community für ihre hervorragenden Open Source-Modelle: Chatglm-6b (Chatglm2), Chinese-Llama-Alpaca, Openllama, Bloom, Belle, Python, Gptneox, Baichuan.
Dieses Projekt bezieht sich auch auf die folgenden hervorragenden Open -Source -Projekte:
PromptCBlue
Satzpiece_Chinese_bpe
Chatglm_lora_multi-gpu
Chatglm-effizientes Abtuning
Zero_Nlp
Dieses Projekt dient nur für Studien und Forschung . Die Trainingsergebnisse des Modells werden von Faktoren wie der eigenen Struktur, der Zufälligkeit, der Trainingsparameter, der Datensätze usw. beeinflusst. Dieses Projekt ist weder für die Ergebnisse des Modelltrainings verantwortlich und ist auch nicht für den Inhalt der Modellgenerierung verantwortlich, noch für Verluste verantwortlich, die durch die Verwendung dieses Projekts verursacht werden. Dieses Projekt wird von Einzelpersonen in ihrer Freizeit entwickelt und gepflegt. Aufgrund der begrenzten Zeit und der begrenzten Autorenniveau kann die Aktualität, auf verwandte Fragen zu beantworten, nicht garantiert werden. In Zukunft wird jedoch eine Kommunikationsgruppe festgelegt. Jeder ist eingeladen zu lernen und sich gegenseitig zu helfen.
Wenn dieses Projekt für Sie hilfreich ist, lesen Sie es in der folgenden Form:
@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},
}