はじめに
OpenCALM-7Bとは、サイバーエージェントが開発した日本語に特化したLLMのこと。これのFine Tuningをまともに実施しようとすると、一般PCではスペック不足になってしまうため、LoRAという技術を駆使して計算方法を簡素化。当記事では、具体的なコードは割愛し、以下サイトのコードをローカル環境で実施した際の注意点を記載。
Google Colab で OpenCALM-7B のLoRAファインチューニングを試す|npaka (note.com)
環境はWindows11でGPUはNVIDIA Geforce GTX 1660 Ti、Ubuntuというソフトを使ってLinux環境を整備。
★関連リンク
業務で活用できるAI技集のまとめはこちら
解説
①必要なライブラリをインストール
まずは必要なライブラリをインストールする。
# Install modules
!pip install peft==0.9.0
!pip install transformers datasets accelerate
!pip install sentencepiece bitsandbytes
!pip install scipy
[参考] 動作環境
peft == 0.9.0
transformers == 4.39.0
datasets == 2.18.0
accelerate == 0.28.0
sentencepiece == 0.2.0
bitsandbytes == 0.43.0
scipy == 1.12.0
注意点1:メモリ不足
下記コードでメモリのオーバーフローに関するエラーがでたら、load_in_4bitに変更するとメモリ消費を抑制することが可能。ただしトレードオフとして精度が低下する可能性があるので要注意。ちなみにこのコードはbitsandbytesが基本的にLinux対応のライブラリにつき、Windows環境(≠Linux環境)の場合、エラーとなるケースが多い。
from transformers import AutoModelForCausalLM
# モデルの準備
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_8bit=True,
device_map="auto",
)
注意点2:prepare_model_for_int8_trainingが読み込めなくなる
下記コードを投入すると「cannot import name ‘prepare_model_for_int8_training’ from ‘peft’」というエラーが表示される場合があった。試行錯誤した結果、peftが新しいVer(0.10.1でエラー確認)とNGだったが、古いVer(0.9.0)では特に問題が発生しなかった。
from peft import prepare_model_for_int8_training
参考情報
メモ:モデルを【ELYZA-japanese-Llama-2-7b-fast-instruct】に変えてみたところ、1epochで7時間相当。target_modulesは増やすとtrainable paramsは増えるが、処理時間はそこまで変化しないように見受けられた。
コメント