
このプロジェクトは、指示のために中国 - ラマ・アルパカv3.1に基づいています。中国 - ラマアルパカは、ラマに基づいて中国の拡大と改善を開拓しました。元のラマに基づいて、中国の語彙リストを拡張し、中国のデータを二次的なトレーニングに使用し、中国語の基本的な意味的理解能力をさらに改善しました。
プロジェクト構成:<Sources>
.
├── 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. 对模型进行训练或者微调トレイン前であろうと微調整する場合でも、データを準備する必要があります。データを準備するには2つの方法があります。
scripts/crawl_prompt.pyを使用して対応するデータを生成できます。基本的なアイデアは、データ生成にChatGPTまたはその他のOpenAI効率モデルを使用することです。 # 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 . chkさまざまなサイズのパラメーターのLlamaモデルの重みをダウンロードする必要があります。パラメーターが大きいほど、重量が大きくなり、重量が大きくなり、精度が向上し、微調整とトレーニング時間も比較的長くなります。一般的に言えば、7Bまたは13Bモデルはほとんどの人の選択になります。
ラマベースモデルの整合性を確認し、sha256.mdに示されている値と一致しているかどうかを確認してください。そうしないと、マージ操作を実行できません。
# 安装依赖库
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自分で手動で変換したくない場合は、他の人が変換したLlama-HFモデルを使用することもできます。 Pinkmanloveは、Huggingfaceで変換されたLlama-HFの重量を持っています。失敗した場合は、他の人を検索して、 HuggingFace-Modelsでよく変換できます。
トレーニングと微調整プロセス全体は、3つのステップで構成されています。
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 . modelパラメーター説明:
llama_tokenizer_dir :元のllamaトークナイザーが保存されているディレクトリを指します。chinese_sp_model_file :denterpieceで訓練された中国の語彙ファイル(中国語_sp.model)を指します。注記
語彙リストを拡張するための2つの主要な方法があります。(1)語彙リストをマージして拡張します。 (2)大きな語彙リストを見つけ、役に立たない単語を削除して語彙リストを取得します。
トレーニング前の段階では、一般的な中国のコーパスを使用して、元のラマの重量に基づいて事前訓練をさらに進めます。プロセスは2つの段階に分かれています。
モデルは、トレーニング前の最初の段階でゆっくりと収束します。時間とコンピューティングのリソースが特に豊富でない場合は、この段階をスキップすることをお勧めします。トレーニング前のトレーニングの第2段階は次のとおりです(シングルプレイヤーシングルカード):
########参数设置########
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 Falseパラメーター説明:
--model_name_or_path :元のHFフォーマットLLAMAモデルが配置されているディレクトリ。--tokenizer_name_or_path :中国語のトークネイザーが配置されているディレクトリ(Merge_Tokenizers.py合成の結果);--dataset_dir :事前に訓練されたデータのディレクトリ。これには、TXTで終了する複数のプレーンテキストファイルを含めることができます。--data_cache_dir :データキャッシュファイルが保存されるディレクトリを指定します。複数のマシンと複数のカード:
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
...中国のラマモデルは、元のバージョンに基づいて中国の語彙リストを拡張し、二次トレーニングに中国の一般的なプレーンテキストデータを使用しました。ここで、著者は、自分自身のトレーニングにリソースを費やすことを要求することなく、これらのトレーニング前の重量をダウンロードする2つの方法を提供します。
| モデル名 | トレーニングデータ | モデルのリファクタリング | サイズ | ロラダウンロード |
|---|---|---|---|---|
| 中国語 - ラマ-7b | 一般20g | オリジナルのllama-7b | 770m | [baidu netdisk] [Googleドライブ] |
| 中国語 - ラマ - プラス7b️ | 汎用120g | オリジナルのllama-7b | 790m | [baidu netdisk] [Googleドライブ] |
| 中国語-llama-13b | 一般20g | オリジナルのllama-13b | 1g | [baidu netdisk] [Googleドライブ] |
| 中国語-llama-plus-13b収 | 汎用120g | オリジナルのllama-13b | 1g | [baidu netdisk] [Googleドライブ] |
.from_pretrained()で指定されたモデル名を指します。| モデル名 | モデルコール名 | リンク |
|---|---|---|
| 中国語 - ラマ-7b | Ziqingyang/中国語 - ラマ - ロラ-7b | モデルハブリンク |
| 中国語 - ラマプラス7B | Ziqingyang/中国 - ラマ - プラス・ロラ-7b | モデルハブリンク |
| 中国語-llama-13b | Ziqingyang/中国語 - ラマ-lora-13b | モデルハブリンク |
| 中国語 - ラマ-Plus-13B | Ziqingyang/中国 - ラマ - プラス・ロラ-13b | モデルハブリンク |
また、トレーニングスキームはLORAを使用して効率的な微調整を行い、トレーニング可能なパラメーターの数をさらに増やします。
シングルプレイヤーシングルカード:
########参数部分########
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 Falseパラメーター説明:
--tokenizer_name_or_path :中国アルパカトークネイザーが配置されているディレクトリ(Merge_Tokenizers.py合成の結果);--dataset_dir :JSONで終了するスタンフォードアルパカ形式の1つ以上の命令微調整データファイルを含む微調整データのディレクトリ。--validation_file :JSONで終わる検証セットとして使用される単一の命令微調整ファイルも、スタンフォードアルパカ形式に従います。いわゆるスタンフォードアルパカ形式は次のとおりです。
[
{ "instruction" : ...,
"input" : ...,
"output" : ... },
...
]ここでのデータは、中国のラマ - アルパカ - 使用済み/#準備データ生成方法を使用して生成することもできます。
構成手順:
中国アルパカモデルのロラウェイトをトレーニングを続けたい場合:
--model_name_or_path :元のHF形式のllamaモデル(非プラスアルパカモデルのトレーニングを続ける場合)または中国語 - ラマプラスロラをマージする(プラスモデルをトレーニングし続ける場合)。--peft_path :中国アルパカのロラ重量ディレクトリ。 --lora_rank 、 --lora_alpha 、 --lora_dropout 、 --trainableおよび--modules_to_saveパラメーターを指定する必要はありません。
中国語のトレーニングに基づいてロラのウェイトを微調整したい場合:
--model_name_or_path :中国語ラマ - ロラの後にHF形式の中国語 - ラマモデルをマージします(プラスモデルかどうかに関係なく)。--peft_path :このパラメーターを提供しないで、スクリプトから--peft_pathを削除しないでください。 --lora_rank 、 --lora_alpha 、 --lora_dropout 、 --trainableおよび--modules_to_saveパラメーターを指定する必要があります。
複数のマシンと複数のカード:
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
...中国のラマ、中国語 - プラス、中国アルパカに適しています
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 パラメーター説明:
--base_model :llamaモデルの重みと構成ファイルがHF形式で保存されるディレクトリ。--lora_model :ファイルが中国のllama/alpaca loraで解凍されているディレクトリは、モデルハブモデルの呼び出し名も使用できます。--output_type : pthまたはhuggingfaceにすることができる出力形式を指定します。指定されていない場合、デフォルトはpthです。--output_dir :完全なモデルの重みを保存するディレクトリを指定します。デフォルトは./ ;--offload_dir :低メモリユーザーの場合、オフロードキャッシュパスを指定する必要があります。 output_typeのさらなる説明:
.pthファイルは、llama.cppツールの量子化と展開に使用できます。.binファイルは以下に使用できます。インターフェイスを構築するためのText-Generation-Webui。単一のロラ重量合併はオンラインで実行され、同時に定量化されます。
中国アルパカプラスのマージには、2つのロラ重量、すなわち中国 - ラマプラスロラと中国アルパカプラスロラが必要です。
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 マルチロラ重量合併はオンラインで実行され、同時に定量化されます。
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 merge_llama_with_chinese_lora_to_hf.pyスクリプトがロラの重みをマージするために以前に実行されていた場合、 --lora_modelを指定する必要はなく、スタートアップメソッドはより簡単です。
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_merged_llama_or_alpaca_hf_dir
- - with_prompt
- - interactive CUDA_VISIBLE_DEVICES=0が削除されている場合、CPU推論モードです。もちろん、WebUIで実行して展開することもできます。 <ソース>
このプロジェクトのモデルは、主に次の定量化、推論、展開方法をサポートしています。
| 推論と展開方法 | 特徴 | プラットフォーム | CPU | GPU | 定量的荷重 | グラフィックインターフェイス | チュートリアル |
|---|---|---|---|---|---|---|---|
| llama.cpp | 豊富な定量的オプションと効率的なローカル推論 | 一般的な | ✅ | ✅ | ✅ | リンク | |
| ?変圧器 | ネイティブトランス推論インターフェイス | 一般的な | ✅ | ✅ | ✅ | ✅ | リンク |
| Text-Generation-Webui | フロントエンドWeb UIインターフェイスを展開する方法 | 一般的な | ✅ | ✅ | ✅ | ✅ | リンク |
| ラマチャット | MacOSの下のグラフィックインタラクションインターフェイス(llama.cppモデルと一致する必要があります) | macos | ✅ | ✅ | ✅ | リンク |