4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCALMをGoogleColabでfine-tuningする

Last updated at Posted at 2023-05-22

概要

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で指定するとよさそうです。
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?