こんにちはMIYAKAWAIブログの宮川です。
先日公開したLLMファインチューニングで下記の公開したブログを詳しく見ていく記事を順番に発表していきます。
この記事では、AI、特に文章を作るのが得意なAI(大規模言語モデルやLLMと呼ばれます)に、自分の書く文章のクセや特定の知識を追加で学んでもらう「ファインチューニング」を行う際に、最初の環境構築に関するPythonコードについて解説しています。
準備作業を「Google Colab」という無料ツールを使って行います(ファインチューニングにはGPUパワーが必要なため私はPro版で使っています)。
なぜファインチューニング? なぜColab?
ゼロから大規模モデルを学習させるのは膨大な計算コストがかかりますが、公開されている強力な事前学習済みモデルをベースに、比較的小規模なデータセットで追加学習を行うファインチューニングは、より現実的なアプローチです。
当初はLinux化した個人のノートPCを使ってファインチューニングを計画しましたが、GPUパワーが不足がちなのでGoogle Colabに環境を以降することにしました。
Google Colabは、ブラウザからPythonコードを実行でき、無料枠でもGPU(やTPU)を利用できるため、このような機械学習の実験や開発環境として広く使われています。環境構築も比較的容易です。
それでは具体的なコードの中身を見ていきましょう。以下のコードをGoogle Colabで順番に実行していくことになります。
# Google Colab環境での実行を想定
# 1. 依存ライブラリのインストール
# -q: インストール中のログ出力を抑制
# -U: ライブラリを最新版にアップグレード
# Colabはランタイムがリセットされるとインストールしたライブラリも消えるため、
# ノートブックを開く際やランタイム再接続時に再実行が必要な場合があります。
!pip install -qU transformers datasets accelerate peft bitsandbytes trl sentencepiece
# 2. 必要なモジュール/クラスのインポート
import os # OS依存機能(ファイルパス操作など)
import torch # PyTorchコアライブラリ(テンソル演算、GPUサポート)
from google.colab import drive, userdata # Google Colab連携機能
from datasets import load_dataset # datasetsライブラリからの機能
from transformers import ( # transformersライブラリからの主要クラス
AutoTokenizer,
AutoModelForCausalLM,
BitsAndBytesConfig,
TrainingArguments,
pipeline,
logging,
)
from peft import LoraConfig, PeftModel, prepare_model_for_kbit_training, get_peft_model # peftライブラリ
from trl import SFTTrainer # trlライブラリ
# 3. Google Driveのマウント
# 学習データやモデルのチェックポイントを永続化するためにGoogle Driveをマウントします。
# 実行すると認証が求められます。
drive.mount('/content/drive')
# 4. 環境構築完了の確認メッセージ
print("環境構築完了。")
コード解説
- 依存ライブラリのインストール (
!pip install ...
)
ファインチューニングに必要なライブラリ群 (transformers
,datasets
など) をpip
コマンドでインストールします。-qU
オプションで、ログ出力を抑えつつ最新版をインストールします。Colab環境は一時的なものであるため、セッションが切れると再インストールが必要になる点に注意してください。 - 必要なモジュール/クラスのインポート (
import ...
)
インストールしたライブラリや標準ライブラリから、プログラム中で使用するクラスや関数をインポートします。後のコードでこれらの機能を利用可能にするための定型的なステップです。 - Google Driveのマウント (
drive.mount(...)
)google.colab.drive
モジュールを使い、自身のGoogle DriveをColabのファイルシステム (/content/drive
) に接続(マウント)します。これにより、学習用データセットの読み込みや、学習済みモデルの重みなどをGoogle Drive上に保存・永続化できます。初回実行時にはGoogleアカウントでの認証が必要です。 - 完了確認 (
print(...)
)
ここまでの処理が正常に完了したことを示すメッセージを出力します。エラーなくこのメッセージが表示されれば、環境構築は成功です。
ファインチューニングを支える主要ライブラリ
上記のpip install
で導入したライブラリは、それぞれLLM開発のエコシステムにおいて重要な役割を担っています。
transformers
(トランスフォーマーズ)
Hugging Face社提供。Transformerベースの事前学習済みモデル(BERT, GPT系など)と関連ツール(トークナイザ、学習パイプライン)を包括的に提供する、この分野のコアライブラリです。Model Hubとの連携が強力です。datasets
(データセッツ)
Hugging Face Hub上のデータセットを含む、大規模データセットの効率的な読み込み、前処理、キャッシュ等をサポートします。メモリ効率の良いApache Arrow形式を内部利用しています。accelerate
(アクセラレート)
PyTorchコードを最小限の変更で分散学習(Multi-GPU/TPU)や混合精度学習に対応させるユーティリティ。ハードウェアの違いを吸収する抽象化を提供し、コードのポータビリティを高めます。peft
(ペフト : Parameter-Efficient Fine-Tuning)
LoRAなどの効率的なファインチューニング手法群を実装。モデル全体ではなく、少数の追加パラメータのみを学習することで、計算コストとメモリ使用量を大幅に削減します。bitsandbytes
(ビッツアンドバイツ)
モデルの量子化(8bit/4bit)などにより、メモリ使用量を削減するライブラリ。特にGPUメモリが限られる環境で大規模モデルを扱う際に有効です。transformers
と連携して容易に利用できます(例: QLoRA)。trl
(ティーアールエル : Transformer Reinforcement Learning)
教師ありファインチューニング(SFT)や人間のフィードバックを用いた強化学習(RLHF)といった、LLMのチューニング手法を実装するための高レベルAPI(SFTTrainer
など)を提供します。sentencepiece
(センテンスピース)
Google開発のテキストトークナイゼーションライブラリ。サブワード分割(BPE, Unigram)を行い、特に語彙サイズを抑えたい場合や、分かち書きのない言語(日本語など)で有効です。多くのtransformers
モデルで利用されています。
これらのライブラリは相互に連携するように設計されており、モダンなLLMのファインチューニングワークフローを効率的に構築する上で欠かせない要素となっています。
まとめ
本記事では、Google Colabを用いたLLMファインチューニングの基本的な環境構築手順と、その際に利用される主要なPythonライブラリについて解説しました。各ライブラリの役割を理解することは、より複雑なファインチューニング手法やトラブルシューティングに取り組む上で重要になります。
この環境構築は、実際の学習コードを実行するための第一歩です。次のステップでは、この環境上でモデルとデータセットを読み込み、具体的なファインチューニング処理を実装していくことになります。
※この記事の作成には、一部生成AI(Google Geminiなど)を利用しています。
ピンバック: LLMファインチューニングのためのデータセット準備 Google Drive上のJSONLを読み込みフォーマットする | MIYAKAWA AI