このプロジェクトの目的は、LORA + Deepspeed +シングルカード/マルチカード微調整を実現するために、マルチクラスベースモデルの微調整を指示することを目的としています。現在テストされているモデルを以下の表に示します。
| モデルをテストします | 言語 | テストウェイト |
|---|---|---|
| 中国語 - ラマアルパカ | 中国語 | 中国アルパカプラスロラ-13b |
| オープンラマ | 英語 | open_llama_13b |
| open_llama_7b | ||
| ベル | 中国語 | Belle-llama-ext-13b |
| Belle-llama-ext-7b | ||
| 咲く | 英語 | Bloomz-1B7 |
| Bloomz-7B1 | ||
| chatglm-6b | 中国語 | chatglm-6b |
| chatglm2-6b | ||
| バイチュアン | 中国語 | Baichuan-7b |
| 中国語 | Baichuan-13b-chat | |
| Tigerbot | 中国語 | Tigerbot-7b-sft |
| TigerBot-7Bベース | ||
| Python | 英語 | pythia-1b-deduped |
| Pythia-12b-Deduped |
TODO:
ここでは、ccks2023-plomptcblue中国の医療ビッグモデルを使用して、ベンチマーク競争のデータセットを例として評価します。このデータセットは、「中国の医療情報処理チャレンジCBLUE」データセットを変換し、16の異なる医療シナリオNLPタスクをすべて迅速な言語生成タスクに変換し、中国の医療シナリオの最初のLLM評価ベンチマークを形成します。
PromptCBlueは、94の命令微調整テンプレートを使用して、CBLUEベンチマークでさまざまなタスクを実行します。変換後、すべての医療テキストNLPデータセットは次の形式に変換されます。入力フィールド文字列はLLMモデルへの入力であり、ターゲットフィールドも文字列であり、LLMモデルが生成する必要があるテキストシーケンスです。
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
}迅速な検証を容易にするために、6000のトレーニングセット、1100検証セット、1060テストセットを含むCHIP-CTCサブダタセットを抽出しました。アドレスをダウンロードしてください
モデルはローカルにダウンロードできます。トレーニング中、 model_name_or_pathパラメーターがモデルのパスに渡されるか、 THUDM/chatglm-6bなどの抱きしめる顔のモデルの名前のみを渡すことができ、コードはモデルを自動的にダウンロードします。
LLAMAクラスのモデルにはモデル変換が必要であり、関係するモデルには次のものが含まれます。
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txtconfig.pyファイルには、さまざまなモデルのLORA構成ファイルがあり、カスタマイズおよび変更できます。構成ファイルの内容は次のとおりです。
' 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 "
},フィールド説明:
lora_r :loraのランクlora_alpha : lora_dropout :ロラ層のドロップアウト確率。lora_target_modules :どのモジュールがロラに固執しているか。modules_to_save :モジュールがトレーニング可能に設定され、最後のチェックポイントに保存されるロラ層に加えて。 zero2構成はここで使用されます:
{
" 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
}マルチカード並列トレーニングの戦略については、こちらを参照してください。
config.pyには、 MODEL_MAP 、 TOKENIZER_MAP 、 SPECIAL_IDS 、 model_typeパラメーターに従って異なるモデルCalssおよびトークナイザークラスを選択し、 model_name_or_pathに従ってSpecial Token IDを選択します。 model_type値と対応するモデルは次のとおりです。
llama :中国語Alpaca-Plus-Lora-13B、Open_llama_13B、Open_llama_7B、Belle-llama-Ext-13b、Belle-llama-Ext-7b、Tigerbot-7B-SFT、Tigerbot-7Baseなどのラマ型モデルを呼び出すことができます。glm :ChatGlm-6BとChatGlm2-6Bを呼び出すことができます。bloom :Bloomz-1B7、Bloomz-7B1などのBloom-Typeモデルを呼び出すことができます。pythia :Python-1B-Deduped、Pythia-12B-Deduped、その他のPythonモデルを呼び出すことができます。scripts/train.shを実行します。ファイルの内容は次のとおりです。
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 パラメーターは次のとおりです。
deepspeed :DeepSpeedの構成ファイルパスdo_train :ブール、トレーニングを有効にするかどうかdo_eval :bool、検証セットで検証するかどうか、 evaluation_strategy 「いいえ」と等しくない場合、それはTrueに設定されますmodel_name_or_path :ハグする顔のモデルの名前、またはすでにローカルに存在するパスmodel_type :モデルのタイプ、オプションのオプションには、 llama 、 glm 、 bloom 、 pythia 、 baichuan 、 other含まれますuse_lora :lora微調整を使用してください、デフォルトはTrueです。fp16 :FP16(混合)精度を使用してトレーニングするかどうかtrain_file :データファイルを設定しますvalidation_file :検証データファイルを設定しますpreprocessing_num_workers :バッチ分詞データの場合の労働者の数cache_dir :HFモデルへのキャッシュパスprompt_column :サンプルに入力されたフィールド名response_column :サンプルのフィールド名出力output_dir :トレーニング結果を保存するパスoverwrite_output_dir : Trueに設定されている場合は、出力フォルダーを上書きしますmax_source_length :入力テキストの最大長max_target_length :出力テキストの最大長pre_device_train_batch_size :トレーニング中の各カードのバッチサイズpre_device_eval_batch_size :検証/テスト中に各カードのバッチサイズgradient_accumulation_steps :勾配蓄積ラウンドmax_steps :トレーニングラウンドの数、1ラウンドにサンプルの数が含まれています。GPUS GPU数量* pre_device_train_batch_size * gradient_accumulation_stepslogging_steps :ログ印刷のラウンド数save_strategy :トレーニングプロセス中に、中間結果はステップ数またはエポック数に従って保存されます。オプションの値はno 、 steps 、 epochですsave_steps :すべてのステップをチェックポイント保存しますevaluation_strategy :ステップ数またはエポック数に従って検証セットを実行します。オプションの値はno 、 steps 、 epochですeval_steps :すべてのステップごとに検証しますlearning_rate :学習率マルチカードトレーニングの場合は、SH: CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1対応するトレーニングを変更してください。たとえば、4カードトレーニングは、 CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4に変更できます。
知らせ:
model_name_or_path 、 model_typeに正しく対応する必要があります。bos_id 、 eos_id 、およびpad_idは完全に一貫していません。 config.pyのSPECIAL_IDS各モデルの特別なトークンIDを指定します。テストされたモデルに加えて、自分で手動で追加する必要があります。推論スクリプトを実行します:
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_lora問題記録:
/workディレクトリに許可がない場合は、環境変数を追加します: export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh 継続的な更新...
Chatglm-6b(chatglm2)、中国 - ラマアルパカ、オープンラマ、ブルーム、ベル、パイソン、gpteneox、baichuanの優れたオープンソースモデルのコミュニティに感謝します。
このプロジェクトは、以下の優れたオープンソースプロジェクトも言及しています。
PROMPTCBLUE
centepiece_chinese_bpe
chatglm_lora_multi-gpu
chatglm効率の高い調整
zero_nlp
このプロジェクトは、研究と研究のみです。モデルのトレーニング結果は、モデル独自の構造、ランダム性、トレーニングパラメーター、データセットなどの要因の影響を受けます。このプロジェクトは、モデルトレーニングの結果について責任を負いません。また、モデル生成の内容についても責任を負いません。このプロジェクトは、暇なときに個人によって開発および維持されています。時間が限られており、著者レベルが限られているため、関連する質問に返信する適時性を保証することはできません。ただし、将来的にはコミュニケーショングループが確立されます。誰もがお互いを学び、助けてくれることを歓迎します。
このプロジェクトが役立つ場合は、次の形式で参照してください。
@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},
}