Singularity + ELYZA-7bでLocal LLM の fine-tuningを実行する(環境構築メイン)
SingularityでELYZA-japanese-Llama-2-7b-instructをfine-tuningした際の備忘録になります。
実行時のソースコードはこちらの記事を参考にしました。ありがとうなのだ。
なぜSingularity?
A. 共有のGPUマシンを使用しているため、cudaのバージョンを勝手に変更することができないことと、sudo権限が不要な環境構築がしたいから。Singularityについて詳しく知りたい方はこちらをチェックしてください。
手順
-
Singularityのインストール
インストールについてはこちらの記事を参考にしてください。
流石にインストールにはsudo権限が必要なので、管理者に頼むしかない気がします。
https://www.sylabs.io/guides/3.2/user-guide/installation.html#installation -
Singularityのビルド
Singularityはdockerhubに掲載されているオープンなコンテナを使って環境構築が可能です。
local LLMのfine-tuningには🤗Transformersをします。
今回は執筆時点において最新版であるhuggingface/transformers-pytorch-gpu:4.32.2を採用しました。ビルドコマンドは以下の通りです。
singularity build --sandbox local-llm docker://huggingface/transformers-pytorch-gpu:4.35.2
local-llm
は現在のパスに作成されるビルドフォルダの名称なので、任意の文字列で大丈夫です。
- Singularityに対話モードでアクセス
singularity shell --nv local-llm
--nv
はGPUを使用する場合に使用する引数になります。CPU Onlyの場合、必要ありません。
- ライブラリのインストール
ずんだもんのfine-tuningに必要なライブラリをインストールします。
pip install peft
pip install bitsandbytes
pip install trl
pip install wandb
- 学習と推論
学習や推論のコードはずんだもんのfine-tuningの記事を参考にしてください。
現時点ではコピペで動作できることを確認しています。
fine-tuning後のLLMの結果はこんな感じです。
Singularityと言われて一番先に想像する方を説明してくれています。
学習時のGPUメモリに関するエラー
学習時において"torch.cuda.OutOfMemoryError: CUDA out of memory."が表示された場合、TrainingArguments
のper_device_train_bath_size
を下げてください。筆者のGPU環境では、per_device_train_bath_size=3
でOutOfMemoryErrorを回避できました。
まとめ
Singularityを使ったLocal LLMのfine-tuningを行いました。コンテナを使うとcudaのバージョン周りで悩まされることがないのが非常に良いですね。
Discussion