2024年5月28日火曜日

SuperAdapters を使って M2 mac mini 上で日本語モデルの Fine-tuning をしてみる

SuperAdapters を使って M2 mac mini 上で日本語モデルの Fine-tuning をしてみる

概要

SuperAdapters はどのモデルでもどのデータセットでもどのプラットフォームでも Fine-Tuning を実現することができるクロスプラットフォームツールです
今回は M2 mac mini 上で LLaMA の日本語モデルを Fine-tuning してみました

環境

  • macOS 14.4.1
  • SuperAdapters 30ef7d3
  • Python 3.11.8

準備

  • pyenv install 3.11.8

プロジェクト準備

M2 の GPU が使えるようにします

  • git clone https://github.com/cckuailong/SuperAdapters.git
  • cd SuperAdapters
  • pyenv local 3.11.8
  • brew install llvm libomp
  • pip install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
  • pip install -r requirements.txt

tokenizers でコンフリクトエラーが出る場合は requirements.txt を以下のように修正します

-tokenizers==0.15.0
+tokenizers==0.19.1

モデルのダウンロード

モデルはこちらを使います
LLaMA ベースの日本語特化モデルになります
fast 版には SuperAdapters が対応していないので普通の instruct 版を使います
モデルサイズは15GB ほどあります

  • brew install git-lfs
  • cd SuperAdapters/LLMs
  • git clone https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b-instruct

データセットのダウンロード

データセットはこちらを使います

  • cd SuperAdapters/data/train
  • rm example.json
  • git lfs install
  • git clone https://huggingface.co/datasets/bbz662bbz/databricks-dolly-15k-ja-ojousama

学習 Fine-Tuning

  • PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 python finetune.py --model_type llama --data "data/train/databricks-dolly-15k-ja-ojousama" --model_path "LLMs/ELYZA-japanese-Llama-2-7b-instruct" --adapter "lora" --output_dir "output/llama"

W&B アカウントがあるかないか求められるのでない場合は 3 を入力します
学習が完了すると output/llama に作成されます

推論 Inference

  • PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 python inference.py --model_type llama --instruction "こんにちわ" --model_path "LLMs/ELYZA-japanese-Llama-2-7b-instruct" --adapter_weights "output/llama" --max_new_tokens 32

これで Fine-Tuning したモデルの結果が表示されます

トラブルシューティング

PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 に設定していてもメモリサイズが足りない場合強制終了してしまいます
こうなると物理的にメモリを増設するしかないようです

最後に

SuperAdapters を使って M2 mac mini で LLaMA モデルの Fine-Tuning を試してみました
GPU は使ってくれるようですメモリサイズが小さすぎると動作しないようです

参考サイト

0 件のコメント:

コメントを投稿