🍀

Singularity + ELYZA-7bでLocal LLM の fine-tuningを実行する(環境構築メイン)

2024/05/03に公開

SingularityELYZA-japanese-Llama-2-7b-instructをfine-tuningした際の備忘録になります。

実行時のソースコードはこちらの記事を参考にしました。ありがとうなのだ。
https://wandb.ai/npaka3/qlora-zundamon/reports/Elyza-7B-QLoRA---Vmlldzo2MDk3MzYw

なぜSingularity?

A. 共有のGPUマシンを使用しているため、cudaのバージョンを勝手に変更することができないことと、sudo権限が不要な環境構築がしたいから。Singularityについて詳しく知りたい方はこちらをチェックしてください。
https://qiita.com/mkt3/items/b9f86f5ddf9eb0f43608

手順

  1. Singularityのインストール
    インストールについてはこちらの記事を参考にしてください。
    流石にインストールにはsudo権限が必要なので、管理者に頼むしかない気がします。
    https://www.sylabs.io/guides/3.2/user-guide/installation.html#installation

  2. 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は現在のパスに作成されるビルドフォルダの名称なので、任意の文字列で大丈夫です。

  1. Singularityに対話モードでアクセス
singularity shell --nv local-llm

--nvはGPUを使用する場合に使用する引数になります。CPU Onlyの場合、必要ありません。

  1. ライブラリのインストール
    ずんだもんのfine-tuningに必要なライブラリをインストールします。
pip install peft
pip install bitsandbytes
pip install trl
pip install wandb
  1. 学習と推論
    学習や推論のコードはずんだもんのfine-tuningの記事を参考にしてください。
    現時点ではコピペで動作できることを確認しています。
    fine-tuning後のLLMの結果はこんな感じです。

    Singularityと言われて一番先に想像する方を説明してくれています。

学習時のGPUメモリに関するエラー

学習時において"torch.cuda.OutOfMemoryError: CUDA out of memory."が表示された場合、TrainingArgumentsper_device_train_bath_sizeを下げてください。筆者のGPU環境では、per_device_train_bath_size=3でOutOfMemoryErrorを回避できました。

まとめ

Singularityを使ったLocal LLMのfine-tuningを行いました。コンテナを使うとcudaのバージョン周りで悩まされることがないのが非常に良いですね。

Discussion