Ce projet vise à instruire le réglage fin des modèles de base multi-classes pour réaliser LORA + Deeppeed + une seule carte / tun-tun multi-cartes. Les modèles actuellement testés sont présentés dans le tableau ci-dessous:
| Tester le modèle | langue | Poids de test |
|---|---|---|
| Chinois-llama-alpaca | Chinois | Chinois-alpaca-plus-lora-13b |
| Littoral | Anglais | open_llama_13b |
| open_llama_7b | ||
| BELLE | Chinois | Belle-Ellema-EXT-13B |
| Belle-Ellema-EXT-7B | ||
| FLORAISON | Anglais | Bloomz-1b7 |
| Bloomz-7b1 | ||
| Chatglm-6b | Chinois | Chatglm-6b |
| Chatglm2-6b | ||
| Baichuan | Chinois | baichuan-7b |
| Chinois | baichuan-13b-chat | |
| Tigrebot | Chinois | tigerbot-7b-sft |
| Tigerbot-7b-base | ||
| Python | Anglais | pythia-1b déduisé |
| pythia-12b en dédale |
FAIRE:
Ici, nous utilisons le modèle médical chinois de CCKS2023-PROMPTCBLUE pour évaluer l'ensemble de données dans le concours de référence à titre d'exemple. Cet ensemble de données transforme l'ensemble de données "Chine Medical Information Processing Cbblue", transformant les 16 scénarios médicaux différents tâches NLP en tâches de génération de langues basées sur une base, formant la première référence d'évaluation LLM pour les scénarios médicaux chinois.
PromptCBlue utilise 94 modèles de réglage d'instructions pour effectuer diverses tâches dans la référence CBLUE. Après la transformation, tous les ensembles de données NLP de texte médical seront convertis au format suivant. La chaîne de champ de saisie est l'entrée du modèle LLM, et le champ cible est également une chaîne, qui est la séquence de texte que le modèle LLM doit générer.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} Afin de faciliter une vérification rapide, nous avons extrait le sous-dataset CHIP-CTC , y compris 6000 ensembles de formation, 1100 ensembles de vérification et 1060 ensembles de tests. Adresse de téléchargement
Le modèle peut être téléchargé localement. Pendant la formation, model_name_or_path est transmis au chemin du modèle, ou vous ne pouvez passer que le nom du modèle sur la face étreinte, comme THUDM/chatglm-6b , et le code télécharge automatiquement le modèle.
Certains modèles de la classe lama nécessitent une conversion de modèle et les modèles impliqués comprennent: Chinese-Alpaca-plus-Lora-13b, se référer à la méthode de conversion ici.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt Il existe des fichiers de configuration LORA pour divers modèles dans le fichier config.py , qui peuvent être personnalisés et modifiés. Le contenu du fichier de configuration est le suivant:
' 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 "
},Description du champ:
lora_r : le rang de Lora lora_alpha : lora_dropout : La probabilité d'abandon de la couche Lora;lora_target_modules : quels modules font que Lora s'accroche;modules_to_save : En plus de la couche LORA, quels modules sont définis dans un formable et seront enregistrés dans le dernier point de contrôle. La configuration zéro2 est utilisée ici:
{
" 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
}Pour les stratégies de formation parallèle multi-cartes, veuillez vous référer à ici.
config.py a plusieurs autres configurations: MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , sélectionnez différents modèles CALSS et Tokenizer Class en fonction model_type , et sélectionnez ID de jeton spécial en fonction model_name_or_path . model_type et le modèle correspondant sont les suivants:
llama : Vous pouvez appeler des modèles de type lama tels que le chinois-alpaca-aplus-lora-13b, Open_LLAMA_13B, Open_LLAMA_7B, Belle-Ellema-EXT-13B, Belle-Ellema-EXT-7B, Tigerbot-7B-Sft, Tigerbot-7b-Base, etc.glm : chatGLM-6B et chatGLM2-6b peuvent être appelées.bloom : des modèles de type Bloom tels que Bloomz-1b7, Bloomz-7b1, etc. peuvent être appelés.pythia : vous pouvez appeler Python-1b-Dedud, Pythia-12b-Dedud et d'autres modèles Python. Exécutez scripts/train.sh . Le contenu du fichier est le suivant:
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 Les paramètres sont les suivants:
deepspeed : le chemin du fichier de configuration de Deeppeeddo_train : bool, s'il faut permettre la formationdo_eval : bool, s'il faut vérifier l'ensemble de vérification, si evaluation_strategy n'est pas égal à "non", il sera défini sur Truemodel_name_or_path : le nom du modèle sur la face étreinte, ou le chemin qui existe déjà localementmodel_type : Le type de modèle, les options facultatives incluent llama , glm , bloom , pythia , baichuan , otheruse_lora : utilisez Lora Fineding, la valeur par défaut est True , sinon il est completfp16 : s'il faut utiliser la précision FP16 (mixte) pour s'entraînertrain_file : Formation du fichier de données de la formationvalidation_file : fichier de données de définition de vérificationpreprocessing_num_workers : Nombre de travailleurs lorsque les données de participe par lotscache_dir : chemin de cache vers le modèle HFprompt_column : le nom de champ entré dans l'échantillonresponse_column : Le nom de champ sortit dans l'échantillonoutput_dir : le chemin pour enregistrer le résultat de la formationoverwrite_output_dir : Si vous êtes défini sur True , écrasez le dossier de sortiemax_source_length : la longueur maximale du texte d'entréemax_target_length : longueur maximale du texte de sortiepre_device_train_batch_size : taille du lot sur chaque carte pendant l'entraînementpre_device_eval_batch_size : taille du lot sur chaque carte pendant la vérification / testgradient_accumulation_steps : tournées d'accumulation de gradientmax_steps : Le nombre de tours de formation, un tour contient le nombre d'échantillons: GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps : combien de cycles d'impression en rondinssave_strategy : Pendant le processus de formation, les résultats intermédiaires sont enregistrés en fonction du nombre d'étapes ou de numéros d'époque. Les valeurs facultatives sont no , steps et epochsave_steps : Enregistrez le point de contrôle à chaque étapeevaluation_strategy : exécutez l'ensemble de vérification en fonction du nombre d'étapes ou de numéros d'époque. Les valeurs facultatives sont no , steps et epocheval_steps : Vérification Chaque nombre d'étapeslearning_rate : taux d'apprentissage S'il s'agit de formation multi-cartes, veuillez modifier celui correspondant dans SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 . Par exemple, la formation à 4 cartes peut être modifiée en: CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
Avis:
model_name_or_path doit correspondre correctement à model_type .bos_id , eos_id et pad_id de certains modèles ne sont pas complètement cohérents. SPECIAL_IDS dans config.py Spécifie l'ID de jeton spécial de chaque modèle. En plus des modèles qui ont été testés, il doit être ajouté manuellement par vous-même.Exécutez le script d'inférence:
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_loraEnregistrement du problème:
/work n'a pas l'autorisation, ajoutez des variables d'environnement: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh Mise à jour continue ...
Merci à la communauté pour ses excellents modèles open source: chatGLM-6B (chatglm2), Chinese-Llama-Alpaca, OpenLlama, Bloom, Belle, Python, Gptneox, Baichuan.
Ce projet fait également référence aux excellents projets open source suivants:
Invitecblue
phrasepiece_chinese_bpe
Chatglm_lora_multi-gpu
ChatGlm économe
zéro_nlp
Ce projet est pour l'étude et la recherche uniquement . Les résultats de la formation du modèle sont affectés par des facteurs tels que la structure propre du modèle, le hasard, les paramètres de formation, les ensembles de données, etc. Ce projet n'est pas responsable des résultats de la formation du modèle, et il n'est pas responsable du contenu de la génération de modèle, ni des pertes causées par l'utilisation de ce projet. Ce projet est développé et maintenu par des individus pendant leur temps libre. En raison du temps limité et du niveau d'auteur limité, la rapidité de la réponse aux questions connexes ne peut être garantie. Cependant, un groupe de communication sera établi à l'avenir. Tout le monde est le bienvenu pour apprendre et s'entraider.
Si ce projet vous est utile, veuillez y consulter dans le format suivant:
@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},
}