概要
OpenCALMをtloen/alpaca-loraでファインチューニングします。
finetuning.py
をそのまま実行するとエラーが出るので、LlamaForCausalLM、LlamaTokenizerをそれぞれAutoModelForCausalLM、AutoTokenizerに書き換えるとうまくいきます。
その他、全体的なやり方は以下を参考にさせていただきました。
CyberAgent社の日本語LLM OpenCALMの対話モデル用途のfinetune検証
2023-05-23 追記:
おそらく以下リンクの方法のほうがよさそうです。本記事の方法は学習に時間がかかりすぎる上、結果も微妙なので。ハイパラの問題かもですが...
https://twitter.com/niw/status/1660126333962452992?s=20
環境
GoogleColab (Pro) A100
手順
準備
google driveをマウントします。必須ではありませんが、ランタイム切断に伴う学習結果の意図せぬ削除を防ぐため、学習結果はMyDrive下に保存することを勧めます。
from google.colab import drive
drive.mount('/content/drive')
alpaca-loraリポジトリをクローンします。
!git clone https://github.com/tloen/alpaca-lora.git
フォルダに移動してライブラリをインストールします。
%cd /content/alpaca-lora
!pip install -r requirements.txt
モデル名と出力フォルダを定義します。
OUTPUT_DIR = "../drive/MyDrive/calm-lora-alpaca" #generate.pyの引数に指定するときに相対パスでないとエラーになる
MODEL = 'cyberagent/open-calm-7b'
学習
finetune.py
の中のライブラリ名を書き換えます。OpenCALMはLlamaのモデルやトーカナイザに対応していないため、書き換える必要があります。
!sed -i 's/LlamaForCausalLM/AutoModelForCausalLM/g' finetune.py
!sed -i 's/LlamaTokenizer/AutoTokenizer/g' finetune.py
実行します。
教師データにkunishou/databricks-dolly-15k-jaを使っています。
!python finetune.py \
--base_model $MODEL \
--data_path 'kunishou/databricks-dolly-15k-ja' \
--output_dir $OUTPUT_DIR \
--lora_target_modules ['query_key_value'] \
--add_eos_token True
モデルのダウンロード後、学習が始まるところまでエラーなく実行できれば成功です。
生成
generate.py
を使います。
finetune.py
同様にライブラリ名を置換します。
!sed -i 's/LlamaForCausalLM/AutoModelForCausalLM/g' generate.py
!sed -i 's/LlamaTokenizer/AutoTokenizer/g' generate.py
実行します。
!python generate.py \
--load_8bit \
--base_model $MODEL \
--lora_weights $OUTPUT_DIR \
--share_gradio True
実行後、少し待つと、gradioのリンクが生成されるので、クリックし、Webアプリ上で出力を確認することができます。
補足
- デフォルトのパラメータの場合、学習に5~6時間かかりました。学習終了後、うっかり放置しすぎると、ランタイムが切断されます。保存先をMyDrive下にしていない場合は学習結果が削除されるため注意してください。
- 自前データで学習させたい場合は、kunishou/databricks-dolly-15k-jaに倣い、
instruction
output
にそれぞれ入力、出力を格納したjson形式のデータを用意して、finetune.py
の--data_path
で指定するとよさそうです。