ChatGLM-Med および HuaTuo に基づいた導入の微調整


ドメイン内の ChatGPT のようなモデルの Q&A 効果を向上させるために、ドメインの知識に基づいて ChatGPT のようなモデルを微調整する方法は?
以下に2つのモデルがありますが、微調整後の効果を見てみましょう。
ChatGLM-Med : 中国医学知識に基づく ChatGLM モデル微調整
HuaTuo : 中国医学知識に基づく LLaMA モデル微調整

ChatGLM-Med

使用モデル:
ChatGLM-6Bで使用した微調整データセット:GPT3.5 APIで構築された医療知識マップと中国語医療指導データセット。

環境準備:このプロジェクトはChatGLM-6Bモデルを使用しているため、環境もChatGLM-6Bモデルと一致していますが、以前に微調整したことがあるので、chatGLM-6bのconda環境をそのまま使用します。この記事を参照してください

ファイルの準備: プロジェクト ファイルとモデル ファイルをダウンロードします。

git clone https://github.com/SCIR-HI/Med-ChatGLM.git

モデル ファイルのダウンロード:
このプロジェクトではトレーニングと微調整されたモデル パラメーターが提供されており、Baidu クラウド ディスク リンクまたはGoogle クラウド ディスク リンクから直接ダウンロードできます。

ここでは、モデル ファイルを /data/sim_chatgpt/ChatGLM-Med/ にダウンロードします。

infer.py ファイル内のファイル読み込みパスを次のように変更します。

import torch
from transformers import AutoTokenizer, AutoModel
from modeling_chatglm import ChatGLMForConditionalGeneration
tokenizer = AutoTokenizer.from_pretrained(
    "/data/sim_chatgpt/ChatGLM-Med/", trust_remote_code=True)
model = ChatGLMForConditionalGeneration.from_pretrained(
    "/data/sim_chatgpt/ChatGLM-Med").half().cuda()
while True:
    a = input("请输入您的问题:(输入q以退出)")
    if a.strip() == 'q':
        exit()
    response, history = model.chat(tokenizer, "问题:" + a.strip() + '\n答案:', max_length=256, history=[])
    print("回答:", response)

実行エラー

推論プロセス

python infer.py

ここに画像の説明を挿入
解決策
modeling_chatglm.py ファイルの 831 行目と 975 行目を次のように変更します。MASK
、gMASK = 150000、150001

変更後は正常に実行されました
ここに画像の説明を挿入

微調整プロセス

評価パッケージをインストールする

pip install evaluate
pip install wandb

実行するファイルの model_name_or_path を /data/sim_chatgpt/chatglm-6b に次のように変更します。

vi scripts/sft_medchat.sh
wandb online
exp_tag="chatglm_tuning"

python run_clm.py \
    --model_name_or_path /data/sim_chatgpt/chatglm-6b \
    --per_device_train_batch_size 8 \
    --per_device_eval_batch_size 8 \
    --train_file ./data/train.txt \
    --max_seq_length 256 \
    --output_dir ./output/ \
    --do_train \
    --logging_steps 30 \
    --log_file ./log/$exp_tag \
    --gradient_accumulation_steps 2 \
    --learning_rate 5e-5 \
    --group_by_length False \
    --num_train_epochs 3 \
    --lr_scheduler_type linear \
    --warmup_ratio 0.1 \
    --logging_dir ./log \
    --logging_steps 10 \
    --save_strategy epoch \
    --seed 2023 \
    --remove_unused_columns False \
    --torch_dtype auto \
    --adam_epsilon 1e-3 \
    --report_to wandb \
    --run_name $exp_tag

注文の実行

sh scripts/sft_medchat.sh

ここに画像の説明を挿入
Batch_size を減らし、per_device_train_batch_size を 1 に変更して、もう一度試してみますが、まだメモリが足りないので、あきらめてください。

公式の微調整トレーニングは A100-SXM-80GB グラフィックス カードで実行されますが、経験によれば、トレーニング用ビデオ メモリには 32G 以上を選択することをお勧めします。

華佗

使用モデル:
LLaMA-7Bで使用した微調整データセット:医療ナレッジマップとGPT3.5 APIで構築された中国医療指導データセット

構成環境

新しい conda 環境 huatuo を作成し、必要なパッケージをインストールします

conda create -n huatuo python==3.9
pip install -r requirements.txt

モデルのダウンロード

LoRA ウェイトは、Baidu Netdisk または Huggingface を通じてダウンロードできます。

1. LLaMA のコマンド微調整用の LoRA 重みファイル
2. Alpaca のコマンド微調整用の LoRA 重みファイル。

ダウンロードしたファイルを /data/sim_chatgpt/huatuo に置きます。
ここに画像の説明を挿入

#1.对LLaMA进行指令微调的LoRA权重文件
#基于医学知识库
lora-llama-med/
  - adapter_config.json   # LoRA权重配置文件
  - adapter_model.bin   # LoRA权重文件

#基于医学文献
lora-llama-med-literature/
  - adapter_config.json   # LoRA权重配置文件
  - adapter_model.bin   # LoRA权重文件


#2. 对Alpaca进行指令微调的LoRA权重文件
#基于医学知识库
lora-alpaca-med-alpaca/
  - adapter_config.json   # LoRA权重配置文件
  - adapter_model.bin   # LoRA权重文件

#基于医学知识库和医学文献
lora-alpaca-med-alpaca-alldata/
  - adapter_config.json   # LoRA权重配置文件
  - adapter_model.bin   # LoRA权重文件
## 

推論プロセス

医療ナレッジ ベースを例として、./scripts/infer.sh 内のパスを次のように変更します。
ここに画像の説明を挿入
医療ナレッジ ベースに基づいてコマンドを実行します。

bash ./scripts/infer.sh

ここに画像の説明を挿入
他にも同様のものがいくつかあります。

#基于医学知识库
bash ./scripts/infer.sh

#基于医学文献
#单轮
bash ./scripts/infer-literature-single.sh

#多轮
bash ./scripts/infer-literature-multi.sh

微調整プロセス


ラマ モデル ファイル パス: /data/sim_chatgpt/llama-7b-hf/models–decapoda-research–llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348実行するファイル内のモデル ファイル パスを変更します。

vi scripts/finetune.sh
exp_tag="e1"
python finetune.py \
    --base_model '/data/sim_chatgpt/llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348' \
    --data_path './data/llama_data.json' \
    --output_dir './lora-llama-med-'$exp_tag \
    --prompt_template_name 'med_template' \
    --micro_batch_size 128 \
    --batch_size 128 \
    --wandb_run_name $exp_tag

ファイルを実行する

sh scripts/finetune.sh

エラー: ビデオ メモリが不足しています。
ここに画像の説明を挿入
公式トレーニングは A100-SXM-80GB グラフィックス カードで実施されました。トレーニング ラウンドの総数は 10 で、所要時間は約 2 時間 17 分でした。バッチサイズ=128の場合、メモリ使用量は約40Gとなります。3090/4090 (24GB ビデオ メモリ) を超えるグラフィックス カードは、これをより適切にサポートし、ビデオ メモリのサイズに応じて batch_size を調整できることが期待されます。

おすすめ

転載: blog.csdn.net/dzysunshine/article/details/130502087