【No.L007】OpenCALM-7BのLoRAファインチューニング:実施上の注意点と解決策のポイント

はじめに

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は増えるが、処理時間はそこまで変化しないように見受けられた。

コメント