見出し画像

text-generation-webuiで、ELYZA-japanese-Llama-2-7n-fast-instructのLoRAトレーニングを試す。

text-generation-webuiで、ELYZA-japanese-Llama-2-7n-fast-instructのLoRAトレーニングを試してみたので、その備忘録を記します。

Google Colabでtext-generation-webuiを起動

ローカルマシンではVRAMが足りなかったので、Google ColabでA100を利用します。

以下のコードを実行すると、Google Colabでtext-generation-webuiを起動することができます。

%cd /content
!apt-get -y install -qq aria2

!git clone -b v2.5 https://github.com/camenduru/text-generation-webui
%cd /content/text-generation-webui
!pip install -q -r requirements.txt

!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/resolve/main/pytorch_model-00001-of-00002.bin -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o pytorch_model-00001-of-00002.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/resolve/main/pytorch_model-00002-of-00002.bin -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o pytorch_model-00002-of-00002.bin
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/resolve/main/pytorch_model.bin.index.json -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o pytorch_model.bin.index.json
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/raw/main/special_tokens_map.json -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o special_tokens_map.json
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-instruct/resolve/main/tokenizer.model -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o tokenizer.model
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/raw/main/tokenizer_config.json -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o tokenizer_config.json
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/raw/main/config.json -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o config.json
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-fast-instruct/raw/main/generation_config.json -d /content/text-generation-webui/models/ELYZA-japanese-Llama-2-7b-fast-instruct -o generation_config.json

!echo "dark_theme: true" > /content/settings.yaml
!echo "chat_style: wpp" >> /content/settings.yaml

%cd /content/text-generation-webui
!python server.py --share --settings /content/settings.yaml

モデルのダウンロードがあるので時間がかかります。

しばらく待つと以下のようなログが出力されるので、public URLの方をクリック。

Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://<ランダム文字列>.gradio.live

モデルのロード

ModelタブでELYZA-japanese-Llama-2-7b-fast-instructを開き、Transformersでロードします。このとき、load-in-8bitにチェックを入れます。

(参考)

 Successfully loaded ELYZA-japanese-Llama-2-7b-fast-instructと表示されれば成功。

llama.cppやAutoGPTQ等ではLoRAトレーニングは上手くいきませんでした。

LoRAのトレーニング

Trainingタブの中のTrain LoRAタブでLoRAをトレーニングします。

各種パラメーター

  • Name … 翻訳:新しいLoRAファイルの名前

  • Override Existing Files … 翻訳:もし名前が同じなら、チェックを入れると既存のファイルを置き換え、チェックを外すとそのファイルをロードして続行する(ランクは同じでなければならない)。

  • LoRA Rank … 翻訳:ディメンション・カウントとも呼ばれる。値が大きい=ファイルが大きく、コンテンツのコントロールができる。値が小さい=ファイルサイズが小さくなり、制御性が低下する。スタイルには4または8、ティーチングには128または256、ビッグデータの詳細には1024以上を使用する。より高いランクにはより多くのVRAMが必要です。

    • 補足:この値を高くしすぎると過学習が起こるので調整すべき値です。

      • ChatGPTのファインチューニングのように、スタイルのみを学習させる場合はランクを4~8程度に設定します。今回はスタイルを学習させたかったので4にしました。

      • 新しい知識を注入させたい場合は128~256程度に設定します。

      • 更に詳細な学習を行いたい場合は1024以上にします。

  • LoRA Alpha … 翻訳:これをランクで割ったものがLoRAのスケーリングとなる。高ければ高いほど強い。目安はランクの2倍。

    • 補足:素直にLoRA Rankの2倍の値を入れておきましょう。今回は8にしました。

  • Batch Size … 翻訳:グローバルバッチサイズ。2つのバッチサイズを合わせて、勾配累積を決定する(gradientAccum = batch / microBatch)。gradientAccumの値が大きいほど、より質の高いトレーニングになります。

    • 補足:Docsでは「怖がらずに試してみてください。やりすぎたらエラーになるだけで、設定を下げて再挑戦すればいい。」と書かれているので、大きければ大きいほど良いようです。私は一度256にしたところVRAMエラーが出たので、128にしています。

  • Micro Batch Size … 翻訳:デバイスごとのバッチサイズ(注:複数デバイスは未実装)。これを増やすとVRAM使用量が増えます。

    • 補足:Docsには「注:現在4ビットのモンキーパッチではデフォルトで悪い。Micro Batch Sizeを1に下げると期待値に戻ります。 (Note: worse by default in the 4-bit monkeypatch currently. Reduce Micro Batch Size to 1 to restore this to expectations.)」と書かれているので、1にしてみます。

  • Cutoff Length:テキスト入力のカットオフ長。基本的に、一度に入力するテキスト行の長さ。値が大きいほど、より多くのVRAMを必要とする。

    • ここはデフォルトの256のままにしました。

    • おそらく、Hard Cut Stringを設定すれば適切にカットオフされると思われます。

データセットの読み込み

Google Colabの左サイドバーのフォルダアイコンからファイルを表示し、/content/text-generation-webui/traning/datasetsの中にtxt形式でデータセットをアップロードします。

Raw text fileタブのText fileプルダウンの右の🔄アイコンをクリックすると、リストが再読み込みされ、先程のtxtファイルが選べるようになります。

Hard Cut String(テキストパート間のハードカットを示す文字列。不要な重なりを防ぐのに役立つ。)で区切り文字を設定します。今回は「\n」としました。

ここまで完了したら、「Start LoRA Training」ボタンをクリックしてください。

Running…表示になればトレーニング開始です。

LoRAファイルのダウンロード

私の場合、およそ1時間程度で完了しました。

Modelタブから読み込んでそのまま推論を試すこともできますが、Google Colabのランタイムが削除されるとLoRAファイルを失ってしまうのでダウンロードしておきましょう。

このようなコードを実行することで、作成したLoRAをZIPに圧縮することができます。

!zip -r /content/text-generation-webui/loras/<LoRA名>.zip /content/text-generation-webui/loras/<LoRA名>

zipができたら、右クリックでダウンロードしましょう。

次回は推論編です。

Xのフォローをお願いします。
https://twitter.com/31pi_


この記事が気に入ったらサポートをしてみませんか?