
Ce projet est basé sur le chinois-llama-alpaca v3.1 pour les instructions. Chinese-Llama-Alpaca a été le pionnier de l'expansion et de l'amélioration chinoises basées sur Llama. Sur la base du lama d'origine, il a élargi la liste de vocabulaire chinois et a utilisé des données chinoises pour la pré-formation secondaire, améliorant davantage la capacité de compréhension sémantique de base du chinois.
Composition du projet : <verces>
.
├── README.md # 使用说明文件
├── SHA256.md # LLaMA模型SHA值对比文件
├── notebooks
│ ├── convert_and_quantize_chinese_alpaca_plus.ipynb
│ └── convert_and_quantize_chinese_llama.ipynb
├── requirements.txt # 依赖文件
└── scripts
├── chinese_sp.model # 中文词表文件
├── crawl_prompt.py # 1. 通过OpenAI的大模型(如ChatGPT、GPT4等)生成可用于微调的数据
├── inference_hf.py # 5. 对微调训练产生的LoRA模型和原始LLaMA模型做推理
├── merge_llama_with_chinese_lora.py # 4. 合并模型权重
├── merge_tokenizers.py # 2. 词表扩充
└── run_clm_pt_with_peft.py # 3. 对模型进行训练或者微调Que vous souhaitiez pré-entraîner ou affiner, vous devez préparer des données. Il existe deux façons de préparer des données:
scripts/crawl_prompt.py pour générer les données correspondantes. L'idée de base est d'utiliser ChatGpt ou d'autres modèles efficaces OpenAI pour la génération de données. # tokenizer
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer . model - O . / tokenizer . model
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer_checklist . chk - O . / tokenizer_checklist . chk
# 7B
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / consolidated . 00. pth - O . / 7 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / params . json - O . / 7 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / checklist . chk - O . / 7 B / checklist . chk
# 13B
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 00. pth - O . / 13 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 01. pth - O . / 13 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / params . json - O . / 13 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / checklist . chk - O . / 13 B / checklist . chk
# 30B
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 00. pth - O . / 30 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 01. pth - O . / 30 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 02. pth - O . / 30 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 03. pth - O . / 30 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / params . json - O . / 30 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / checklist . chk - O . / 30 B / checklist . chk
# 65B
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 00. pth - O . / 65 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 01. pth - O . / 65 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 02. pth - O . / 65 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 03. pth - O . / 65 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 04. pth - O . / 65 B / consolidated . 04. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 05. pth - O . / 65 B / consolidated . 05. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 06. pth - O . / 65 B / consolidated . 06. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 07. pth - O . / 65 B / consolidated . 07. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / params . json - O . / 65 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / checklist . chk - O . / 65 B / checklist . chkVous devez télécharger les poids des modèles lama de différents paramètres de taille. Plus les paramètres sont grands, plus le poids est grand, plus le poids est grand, plus la précision est grande et plus le temps de réglage et de formation est également relativement long. D'une manière générale, le modèle 7B ou 13B sera le choix de la plupart des gens.
Assurez-vous de confirmer l'intégrité du modèle de base LLAMA et vérifiez si elle est cohérente avec la valeur indiquée dans sha256.md, sinon l'opération de fusion ne peut pas être effectuée.
# 安装依赖库
pip install git + https : // github . com / huggingface / transformers
# 转化HF权重
python - m transformers . models . llama . convert_llama_weights_to_hf
- - input_dir llama - weights
- - model_size 7 B
- - output_dir llama - hf - weights
> python - m transformers . models . llama . convert_llama_weights_to_hf - - input_dir . / - - model_size 7 B - - output_dir . / output / 7 B - hf Si vous ne voulez pas vous convertir manuellement, vous pouvez également utiliser le modèle LLAMA-HF que d'autres ont converti. PinkManlove a le poids du Llama-HF converti à HuggingFace. S'il échoue, vous pouvez rechercher d'autres personnes pour bien se convertir dans HuggingFace-Models .
L'ensemble du processus de formation et de réglage fin comprend trois étapes:
python scripts / merge_tokenizers . py
- - llama_tokenizer_dir llama_tokenizer_dir
- - chinese_sp_model_file chinese_sp_model_file
> python scripts / merge_tokenizers . py - - llama_tokenizer_dir output / 7 B - hf - - chinese_sp_model_file scripts / chinese_sp . modelDescription du paramètre:
llama_tokenizer_dir : Poignez le répertoire où le tokenizer original est stocké;chinese_sp_model_file : pointez le fichier de vocabulaire chinois (chinois_sp.model) formé avec la phrase;Note
Il existe deux méthodes principales pour étendre la liste de vocabulaire: (1) fusionner et développer la liste de vocabulaire; (2) Trouvez une grande liste de vocabulaire et supprimez les mots inutiles pour obtenir une liste de vocabulaire;
Au cours de la phase de pré-formation, le corpus chinois général est utilisé pour prévoir davantage sur la base des poids de lama d'origine. Le processus est divisé en deux étapes:
Le modèle converge lentement dans la première étape de la pré-formation. S'il n'y a pas de temps et de ressources informatiques particulièrement abondants, il est recommandé de sauter cette étape. La deuxième étape de la formation pré-formation est la suivante (carte unique en solo):
########参数设置########
lr = 2e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / dir
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / pt / data / dir
data_cache = temp_data_cache_dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_pt_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - data_cache_dir ${ data_cache }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.05
- - weight_decay 0.01
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - block_size 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - gradient_checkpointing
- - ddp_find_unused_parameters FalseDescription du paramètre:
--model_name_or_path : le répertoire où se trouve le modèle HF Format HF;--tokenizer_name_or_path : Le répertoire où se trouve le tokenizer chinois-llama (résultat de Merge_Tokenizers.py Synthesis);--dataset_dir : un répertoire de données pré-formées, qui peuvent contenir plusieurs fichiers de texte brut se terminant par txt;--data_cache_dir : spécifiez un répertoire où les fichiers de cache de données sont stockés;Plusieurs machines et plusieurs cartes:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_pt_with_peft . py
...Le modèle de Llama chinois a élargi la liste de vocabulaire chinois sur la base de la version originale et a utilisé des données de texte brut chinois en chinois pour la pré-formation secondaire. Ici, l'auteur fournit deux façons de télécharger ces poids pré-formation sans nous obliger à dépenser des ressources pour nous entraîner:
| Nom du modèle | Données de formation | Refactoriser le modèle | taille | Téléchargement de Lora |
|---|---|---|---|---|
| Chinois-llama-7b | Général 20G | LLAMA-7B ORIGINAL | 770m | [Baidu Netdisk] [Google Drive] |
| Chinese-Llama-plus-7b ️ | Objectif général 120g | LLAMA-7B ORIGINAL | 790m | [Baidu Netdisk] [Google Drive] |
| Chinois-llama-13b | Général 20G | LLAMA-13B ORIGINAL | 1g | [Baidu Netdisk] [Google Drive] |
| Chinese-Llama-plus-13b ️ | Objectif général 120g | LLAMA-13B ORIGINAL | 1g | [Baidu Netdisk] [Google Drive] |
.from_pretrained() .| Nom du modèle | Nom de l'appel modèle | Lien |
|---|---|---|
| Chinois-llama-7b | ziqingyang / chinois-llama-lora-7b | Modèle de lien de hub |
| Chinese-Llama-plus-7b | ziqingyang / chinois-llama-plus lora-7b | Modèle de lien de hub |
| Chinois-llama-13b | ziqingyang / chinois-llama-lora-13b | Modèle de lien de hub |
| Chinois-Llama-plus-13b | ziqingyang / chinois-llama-plus-lora-13b | Modèle de lien de hub |
Le schéma de formation utilise également LORA pour un ajustement fin efficace et augmente encore le nombre de paramètres formables.
Carte unique solo:
########参数部分########
lr = 1e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / or / merged / llama / dir / or / model_id
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / sft / data / dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
peft_model = path / to / peft / model / dir
validation_file = validation_file_name
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_sft_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - do_eval
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.03
- - weight_decay 0
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - evaluation_strategy steps
- - eval_steps 250
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - max_seq_length 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - validation_file ${ validation_file }
- - peft_path ${ peft_model }
- - gradient_checkpointing
- - ddp_find_unused_parameters FalseDescription du paramètre:
--tokenizer_name_or_path : Le répertoire où se trouve le tokenizer chinois-alpaca (résultat de Merge_Tokenizers.py Synthesis);--dataset_dir : un répertoire pour les données de réglage des instructions, contenant un ou plusieurs fichiers de données affinés d'instructions au format alpaca de Stanford se terminant par JSON;--validation_file : un fichier de réglage fin des instructions utilisé comme ensemble de validation, se terminant par JSON, suit également le format Alpaca Stanford;Le soi-disant format Alpaca Stanford est:
[
{ "instruction" : ...,
"input" : ...,
"output" : ... },
...
]Les données ici peuvent également être générées à l'aide de la méthode chinois-llama-alpaca-usage / # Génération des données de préparation.
Instructions de configuration:
Si vous souhaitez continuer à entraîner les poids Lora du modèle Chinese-Alpaca:
--model_name_or_path : le modèle HF Format Llama (si vous continuez à former des modèles alpaca non plus) ou fusionnez le chinois-llama-plus-lora (si vous continuez à former des modèles plus);--peft_path : Répertoire de poids Lora de Chinese-Alpaca; Pas besoin de spécifier --lora_rank , --lora_alpha , --lora_dropout , --trainable et --modules_to_save .
Si vous souhaitez affiner les poids Lora basés sur la formation chinoise-llama:
--model_name_or_path : fusionnez le modèle chinois-llama hf après chinois-llama-lora (qu'il s'agisse d'un modèle plus ou non);--peft_path : ne fournissez pas ce paramètre et supprimez --peft_path du script; --lora_rank , --lora_alpha , --lora_dropout , --trainable et --modules_to_save doivent être spécifiés.
Plusieurs machines et plusieurs cartes:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_sft_with_peft . py
...Convient pour chinois-llama, chinois-llama-plus, chinois-alpaca
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir Description du paramètre:
--base_model : Le répertoire où les poids et les fichiers de configuration du modèle LLAMA sont stockés au format HF;--lora_model : Le répertoire où le fichier est décompressé dans le Lama / Alpaca Lora chinois, vous pouvez également utiliser le nom de l'appel du modèle du Hub;--output_type : spécifie le format de sortie, qui peut être pth ou huggingface . S'il n'est pas spécifié, la valeur par défaut est pth ;--output_dir : spécifie le répertoire qui enregistre les poids du modèle complet, la valeur par défaut est ./ ;--offload_dir : Pour les utilisateurs de faible mémoire, vous devez spécifier un chemin de cache de décharge; Explication supplémentaire sur output_type :
.pth Les fichiers peuvent être utilisés pour la quantification et le déploiement des outils: llama.cpp;.bin Les fichiers peuvent être utilisés pour: Transformers pour le raisonnement; Génération de texte-webui pour la construction d'interfaces;Une seule fusion de poids LORA est effectuée en ligne et la quantifie simultanément:
La fusion de Chinese-Alpaca-plus nécessite deux poids de Lora, à savoir le chinois-llama-plus-lora et le chinois-alpaca-plus-lora.
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_plus_lora , path_to_chinese_alpaca_plus_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir La fusion de poids multi-lora est effectuée en ligne et la quantifie simultanément:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - with_prompt
- - interactive Si le script merge_llama_with_chinese_lora_to_hf.py a été exécuté auparavant pour fusionner les poids Lora, il n'est pas nécessaire de spécifier --lora_model et que la méthode de démarrage est plus simple:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_merged_llama_or_alpaca_hf_dir
- - with_prompt
- - interactive Si CUDA_VISIBLE_DEVICES=0 est supprimé, c'est le mode de raisonnement CPU. Bien sûr, vous pouvez également l'exécuter et le déployer dans WebUI. <sources>
Les modèles de ce projet soutiennent principalement les méthodes de quantification, de raisonnement et de déploiement suivantes.
| Méthodes de raisonnement et de déploiement | Caractéristiques | plate-forme | Processeur | GPU | Chargement quantitatif | Interface graphique | Tutoriel |
|---|---|---|---|---|---|---|---|
| lama.cpp | Riches options quantitatives et raisonnement local efficace | Général | ✅ | ✅ | ✅ | Lien | |
| ? Transformers | Interface d'inférence des transformateurs natifs | Général | ✅ | ✅ | ✅ | ✅ | Lien |
| Génération de texte-webui | Comment déployer l'interface Interface Web frontale | Général | ✅ | ✅ | ✅ | ✅ | Lien |
| Llamachat | Interface d'interaction graphique sous macOS (doit être appariée avec le modèle llama.cpp) | Macos | ✅ | ✅ | ✅ | Lien |