第14章. 学習ツール群
この章の目的
この章では、大規模言語モデル(LLM)の学習と微調整(ファインチューニング)において頻繁に登場する主要なツールやフレームワークについて、それぞれの役割と位置づけを明確にすることを目的とします。特に、多くのツールが乱立し、機能が重複しているように見える現状で、それぞれのツールの得意分野と利用シーンを理解し、適切なツール選択ができるようになることを目指します。
この章で覚えるべきこと
transformersライブラリがLLM学習の基盤となること。accelerateが分散学習を容易にするための汎用的なツールであること。deepspeedとFSDPが大規模モデルのメモリ効率とスケーラビリティを向上させるための技術であること。PEFTが効率的なファインチューニング手法(LoRAなど)を実装するためのフレームワークであること。unsloth、Axolotl、LLaMA-Factory、torchtuneが特定の学習タスクやモデルに特化した高レベルな学習スクリプトやフレームワークであること。
導入
LLMの学習や微調整は、単にモデルを訓練するだけでなく、膨大な計算リソース、メモリ管理、そして効率的な学習手法の適用が求められる複雑なプロセスです。この複雑さを軽減し、開発者がより簡単にLLMを扱えるようにするために、多くのツールやフレームワークが開発されてきました。しかし、その多様性ゆえに、どのツールがどのような目的で使われるのか、あるいは互いにどのように関連しているのかが分かりにくいという問題も生じています。
例えば、「Hugging Face transformers」という名前を聞くと、多くの人はモデルそのものを指すのか、それともライブラリを指すのか、あるいはTransformerアーキテクチャ全般を指すのかで混乱することがあります。また、accelerateやdeepspeed、FSDPといったツールは、いずれも「学習を速くする」「大規模モデルを扱えるようにする」といった共通の目的を持っているように見えますが、そのアプローチや得意分野は異なります。
本章では、これらの主要な学習ツール群を体系的に整理し、それぞれの役割と相互関係を明らかにすることで、読者がLLM学習のランドスケープを明確に理解できるよう導きます。
基本概念
LLMの学習ツール群は、大きく以下のカテゴリに分類できます。
- 基盤ライブラリ: LLMのモデルアーキテクチャ、トークナイザ、学習ループの基本的な実装を提供する。
- 分散学習・メモリ最適化: 大規模モデルを複数のGPUやノードで効率的に学習させるための技術を提供する。
- 効率的ファインチューニング: 全てのパラメータを更新するのではなく、一部のパラメータのみを更新することで、計算リソースと時間を節約する手法を提供する。
- 高レベル学習フレームワーク: 特定のモデルやタスクに特化し、上記技術を統合して学習プロセスを簡素化する。
これらのカテゴリに属する主要なツールについて、以下に説明します。
transformers
- ひとことで言うと: Hugging Faceが提供する、Transformerベースのモデルを扱うためのデファクトスタンダードなライブラリ。
- 何のカテゴリか: 基盤ライブラリ
- 何に使うのか: 事前学習済みモデルのロード、トークナイザの利用、モデルの学習・推論、モデルアーキテクチャの定義。
- 代表例: BERT, GPT-2, LLaMA, Mistralなど、数多くのモデルがこのライブラリを通じて利用可能。
- よく混同される用語:
- Transformer (アーキテクチャ): Attentionメカニズムを基盤としたニューラルネットワークのアーキテクチャそのもの。
transformersライブラリはこのアーキテクチャを実装したモデルを扱う。 - Hugging Face:
transformersライブラリを提供する企業およびコミュニティ。モデルハブも運営。 - llama.cpp: 推論に特化したC++製のライブラリ。
transformersは学習・推論両方に対応するPythonライブラリ。
- Transformer (アーキテクチャ): Attentionメカニズムを基盤としたニューラルネットワークのアーキテクチャそのもの。
- 初心者向け注意点:
transformersはLLM学習の「土台」となる部分を提供します。他の多くの学習ツールやフレームワークは、このtransformersの上に構築されています。
accelerate
- ひとことで言うと: Hugging Faceが提供する、PyTorchの分散学習を簡単に実装するためのライブラリ。
- 何のカテゴリか: 分散学習・メモリ最適化
- 何に使うのか: 複数GPU、複数ノード、混合精度学習など、複雑な分散学習設定を数行のコード変更で実現する。
- 代表例:
accelerate launchコマンドで学習スクリプトを実行するだけで、自動的に分散環境をセットアップ。 - よく混同される用語:
- PyTorch Distributed: PyTorchが提供する低レベルな分散学習API。
accelerateはこれを抽象化し、使いやすくしたもの。 - deepspeed / FSDP: これらも分散学習・メモリ最適化技術だが、
accelerateはこれらをバックエンドとして利用することもできる汎用的なラッパー。
- PyTorch Distributed: PyTorchが提供する低レベルな分散学習API。
- 初心者向け注意点: 分散学習の複雑な設定(プロセスグループの初期化、デバイス割り当てなど)を意識することなく、通常のPyTorchコードを分散環境で実行できるようにします。
deepspeed
- ひとことで言うと: Microsoftが開発した、大規模モデルの学習を高速化し、メモリ効率を向上させるための最適化ライブラリ。
- 何のカテゴリか: 分散学習・メモリ最適化
- 何に使うのか: モデル並列、データ並列、ZeRO (Zero Redundancy Optimizer) などの技術を組み合わせて、巨大なモデルを限られたGPUメモリで学習させる。
- 代表例: ZeRO-Offload, ZeRO-Infinityなど、メモリ使用量を劇的に削減する技術。
- よく混同される用語:
- FSDP (Fully Sharded Data Parallel): PyTorchが提供する同様のメモリ最適化技術。
deepspeedはより多機能で、モデル並列などもサポート。 - accelerate:
accelerateはdeepspeedをバックエンドとして利用できる。
- FSDP (Fully Sharded Data Parallel): PyTorchが提供する同様のメモリ最適化技術。
- 初心者向け注意点:
deepspeedは非常に強力ですが、設定が複雑になることがあります。accelerate経由で利用すると、設定が簡素化される場合があります。
FSDP (Fully Sharded Data Parallel)
- ひとことで言うと: PyTorchが提供する、モデルのパラメータ、勾配、オプティマイザの状態をGPU間で完全にシャード(分割)することで、メモリ効率を最大化する分散学習戦略。
- 何のカテゴリか: 分散学習・メモリ最適化
- 何に使うのか: 大規模モデルを単一GPUのメモリ制限を超えて学習させる。各GPUがモデル全体の一部のみを保持するため、メモリ使用量が大幅に削減される。
- 代表例: PyTorch 1.10以降で利用可能。
torch.distributed.fsdp.FullyShardedDataParallelクラスを使用。 - よく混同される用語:
- deepspeed ZeRO:
deepspeedのZeRO-2/3と概念的に非常に近い。FSDPはPyTorchネイティブな実装。 - Data Parallel (DP): 各GPUがモデル全体のコピーを持つため、メモリ効率が悪い。FSDPはこれを改善。
- deepspeed ZeRO:
- 初心者向け注意点:
deepspeedと同様に大規模モデル学習の必須技術ですが、PyTorchエコシステムに深く統合されています。
PEFT (Parameter-Efficient Fine-Tuning)
- ひとことで言うと: Hugging Faceが提供する、LoRAなどのパラメータ効率の良いファインチューニング手法を簡単に適用するためのライブラリ。
- 何のカテゴリか: 効率的ファインチューニング
- 何に使うのか: 事前学習済みLLMの全パラメータを更新することなく、少量の追加パラメータのみを学習させることで、計算コストとストレージ要件を大幅に削減する。
- 代表例: LoRA (Low-Rank Adaptation), Prefix Tuning, P-Tuning v2など。
- よく混同される用語:
- LoRA: PEFTライブラリが実装する具体的な手法の一つ。PEFTはLoRAだけでなく、他の効率的ファインチューニング手法もサポートするフレームワーク。
- QLoRA: LoRAを量子化されたモデルに適用する手法。PEFTはQLoRAもサポート。
- 初心者向け注意点: LLMのファインチューニングを行う際に、まず検討すべきライブラリです。少ないリソースで高い性能を達成できます。
LoRAの基本的な考え方は、事前学習済み重み行列 $W_0 \in \mathbb{R}^{d \times k}$ に対して、低ランク行列の分解 $W_0 + BA$ を導入することです。ここで $B \in \mathbb{R}^{d \times r}$、$A \in \mathbb{R}^{r \times k}$ であり、$r \ll \min(d, k)$ です。学習時には $W_0$ は固定し、$B$ と $A$ のみ更新します。 $$ W_{new} = W_0 + BA $$ このとき、学習対象のパラメータ数は $d \times r + r \times k = r(d+k)$ となり、元の $d \times k$ に比べて大幅に削減されます。
unsloth
- ひとことで言うと: LoRA/QLoRAの学習を高速化し、メモリ使用量を削減することに特化したライブラリ。
- 何のカテゴリか: 効率的ファインチューニング、高レベル学習フレームワーク
- 何に使うのか:
transformersとPEFTをベースに、LoRA/QLoRAの学習をPyTorchのコンパイル機能やカスタムカーネルを用いて最適化する。 - 代表例: LLaMA-2, Mistralなどのモデルに対するLoRA/QLoRA学習を数倍高速化。
- よく混同される用語:
- PEFT:
unslothはPEFTの機能を拡張し、最適化されたLoRA/QLoRA学習を提供する。 - LLaMA-Factory: 同様に高レベルな学習フレームワークだが、
unslothは特に高速化に焦点を当てている。
- PEFT:
- 初心者向け注意点: LoRA/QLoRAでファインチューニングを行う場合、
unslothを使うことで学習時間を大幅に短縮できる可能性があります。
Axolotl
- ひとことで言うと: LLMのファインチューニングを簡素化するための高レベルな学習フレームワーク。
- 何のカテゴリか: 高レベル学習フレームワーク
- 何に使うのか:
transformers,accelerate,deepspeed,PEFTなどの複数のライブラリを統合し、YAML設定ファイルを通じて簡単にファインチューニングを実行できる。 - 代表例: LLaMA, Mistral, Falconなど、様々なモデルのSFT (Supervised Fine-Tuning) やDPO (Direct Preference Optimization) 学習。
- よく混同される用語:
- LLaMA-Factory: 同様に高レベルな学習フレームワークで、機能が重複する部分が多い。
Axolotlはより柔軟な設定が可能とされる。
- LLaMA-Factory: 同様に高レベルな学習フレームワークで、機能が重複する部分が多い。
- 初心者向け注意点: 複数の低レベルなライブラリを自分で組み合わせるのが難しいと感じる場合に、
Axolotlのようなフレームワークを使うと、複雑な設定をYAMLファイルで一元管理でき、学習プロセスを効率化できます。
LLaMA-Factory
- ひとことで言うと: LLMのファインチューニングと評価のための包括的なWeb UIとスクリプトを提供するフレームワーク。
- 何のカテゴリか: 高レベル学習フレームワーク
- 何に使うのか: LoRA/QLoRA、SFT、DPO、PPOなどの様々なファインチューニング手法を、Web UIまたはコマンドラインスクリプトを通じて簡単に実行できる。
- 代表例: LLaMA, Mistral, Qwenなど、多くのモデルに対応。
- よく混同される用語:
- Axolotl: 同様に高レベルな学習フレームワーク。
LLaMA-Factoryは特にWeb UIによる使いやすさに強みがある。
- Axolotl: 同様に高レベルな学習フレームワーク。
- 初心者向け注意点: Web UIで直感的にファインチューニングの設定を行いたい場合に非常に便利です。多くのモデルと手法に対応しており、手軽に試すことができます。
torchtune
- ひとことで言うと: Metaが開発した、PyTorchネイティブなLLMファインチューニングライブラリ。
- 何のカテゴリか: 高レベル学習フレームワーク
- 何に使うのか: PyTorchの最新機能(
torch.compileなど)を活用し、効率的かつスケーラブルなLLMファインチューニングを提供する。LoRA, QLoRA, FSDPなどをサポート。 - 代表例: Llama 2, Llama 3などのMetaモデルのファインチューニング。
- よく混同される用語:
- Hugging Face
transformers:torchtuneはtransformersに依存せず、PyTorchエコシステム内で完結することを目指している。 - Axolotl / LLaMA-Factory: これらも高レベルフレームワークだが、
torchtuneはMetaが公式に提供し、PyTorchネイティブな最適化に強みを持つ。
- Hugging Face
- 初心者向け注意点: PyTorchの最新技術を最大限に活用してファインチューニングを行いたい場合に有力な選択肢です。特にMetaのモデルを扱う際に有用です。
具体例
ここでは、これらのツールがLLMのファインチューニングにおいてどのように連携し、あるいは独立して使われるかを図で示します。
graph TD
subgraph "LLM学習プロセス"
A
B
C
D
end
subgraph "主要ツール群"
F[transformers]
G[accelerate]
H[deepspeed/FSDP]
I[PEFT]
J[unsloth]
K[Axolotl]
L[LLaMA-Factory]
M[torchtune]
end
F -- "モデル/トークナイザ提供" --> B
F -- 学習ループの基盤 --> D
G -- 分散学習の抽象化 --> D
H -- "メモリ最適化/スケーリング" --> G
I -- 効率的FT手法提供 --> D
J -- "LoRA/QLoRA高速化" --> I
K -- 統合フレームワーク --> F
K -- 統合フレームワーク --> G
K -- 統合フレームワーク --> H
K -- 統合フレームワーク --> I
L -- "統合フレームワーク/Web UI" --> F
L -- "統合フレームワーク/Web UI" --> G
L -- "統合フレームワーク/Web UI" --> H
L -- "統合フレームワーク/Web UI" --> I
M -- PyTorchネイティブFT --> F
M -- PyTorchネイティブFT --> H
M -- PyTorchネイティブFT --> I
図14.1: LLM学習ツール群の関連性
この図が示すように、transformersは多くのモデルの基盤となり、accelerate、deepspeed、FSDPは分散学習とメモリ最適化を、PEFTは効率的なファインチューニング手法を提供します。そして、unsloth、Axolotl、LLaMA-Factory、torchtuneといった高レベルフレームワークは、これらの低レベルな技術を統合し、より使いやすい形で提供することで、開発者がLLMの学習プロセスに集中できるようにします。
よく混同される用語との比較
| 用語 | 主な役割 | 連携するツール/技術 | 独立性/統合性 |
|---|---|---|---|
| transformers | LLMモデルの基盤、トークナイザ、学習ループ | accelerate, deepspeed, PEFT, 各種高レベルフレームワーク | 多くのツールの土台となるコアライブラリ |
| accelerate | PyTorch分散学習の汎用ラッパー | PyTorch Distributed, deepspeed, FSDP | 汎用性が高く、他の分散学習技術のフロントエンド |
| deepspeed | 大規模モデルのメモリ最適化、高速化 | accelerate (バックエンドとして), transformers | 独自の最適化技術群を提供 |
| FSDP | PyTorchネイティブなメモリ最適化 | PyTorch, accelerate (バックエンドとして) | PyTorchエコシステムに深く統合 |
| PEFT | 効率的ファインチューニング手法の実装 | transformers, accelerate, unsloth, Axolotl, LLaMA-Factory | LoRAなどの手法を提供するライブラリ |
| unsloth | LoRA/QLoRA学習の高速化 | transformers, PEFT | PEFTの特定の機能に特化した最適化 |
| Axolotl | LLMファインチューニングの高レベルフレームワーク | transformers, accelerate, deepspeed, PEFT | 複数の低レベルツールを統合し、設定を簡素化 |
| LLaMA-Factory | LLMファインチューニングのWeb UI/スクリプト | transformers, accelerate, deepspeed, PEFT | Web UIによる使いやすさに強み |
| torchtune | PyTorchネイティブなLLMファインチューニング | PyTorch, FSDP, LoRA | PyTorchエコシステム内で完結、Meta公式 |
表14.1: 主要な学習ツール群の比較
この表からわかるように、transformersとPEFTは多くのツールで共通して利用される基盤技術です。accelerate、deepspeed、FSDPは分散学習とメモリ効率の向上に貢献し、これらはしばしば組み合わせて使用されます。そして、unsloth、Axolotl、LLaMA-Factory、torchtuneは、これらの基盤技術を統合し、特定の目的(高速化、使いやすさ、PyTorchネイティブなど)に特化した高レベルな学習体験を提供します。
実務での位置づけ
LLMの学習やファインチューニングを実務で行う際、これらのツールは以下のように位置づけられます。
- 基本的なモデル操作: まずは
transformersライブラリを使って、モデルのロード、トークナイザの準備、基本的な学習ループの構築を行います。これは全てのLLM学習の出発点です。 - リソース制約への対応:
- モデルが大きすぎて単一GPUに乗らない場合や、学習を高速化したい場合は、
accelerateを使って分散学習環境を構築します。 - さらにメモリ効率を追求したり、非常に大きなモデルを扱ったりする場合は、
deepspeedやFSDPをaccelerateのバックエンドとして利用することを検討します。
- モデルが大きすぎて単一GPUに乗らない場合や、学習を高速化したい場合は、
- 効率的なファインチューニング: 全パラメータを更新するのではなく、効率的にファインチューニングを行いたい場合は、
PEFTライブラリを使ってLoRAなどの手法を適用します。これにより、計算リソースとストレージコストを大幅に削減できます。 - 学習プロセスの簡素化:
- LoRA/QLoRAの学習を最速で行いたい場合は、
unslothが非常に有効です。 - 複数のモデルや手法を試したり、複雑な設定をYAMLファイルで管理したりしたい場合は、
AxolotlやLLaMA-Factoryのような高レベルフレームワークが便利です。特にLLaMA-FactoryはWeb UIがあるため、手軽に試したい場合に適しています。 - PyTorchの最新機能やMetaのモデルに特化して、PyTorchネイティブな環境で学習を行いたい場合は、
torchtuneが有力な選択肢となります。
- LoRA/QLoRAの学習を最速で行いたい場合は、
実務では、これらのツールを単独で使うだけでなく、目的に応じて組み合わせて使うことが一般的です。例えば、transformersでモデルを定義し、PEFTでLoRAを適用し、accelerateとdeepspeedを使って分散学習を行う、といった流れです。高レベルフレームワークは、これらの組み合わせをあらかじめ最適化された形で提供してくれるため、開発の手間を省くことができます。
graph TD
subgraph "LLM学習ワークフロー"
A
B
C
D
E
F
end
subgraph "ツール選択の考慮事項"
H[モデルサイズ/GPU数]
I[学習時間/コスト]
J[開発の容易さ]
K[PyTorchネイティブ志向]
end
H -- 影響 --> D
I -- 影響 --> E
J -- 影響 --> E
K -- 影響 --> E
D -- ツール例 --> D1(accelerate)
D -- ツール例 --> D2(deepspeed/FSDP)
E -- ツール例 --> E1(PEFT)
E -- ツール例 --> E2(unsloth)
E -- ツール例 --> E3(Axolotl)
E -- ツール例 --> E4(LLaMA-Factory)
E -- ツール例 --> E5(torchtune)
図14.2: LLM学習ワークフローとツール選択
まとめ
3行まとめ
- LLM学習ツール群は、基盤ライブラリ、分散学習・メモリ最適化、効率的ファインチューニング、高レベル学習フレームワークに分類される。
transformersは基盤となり、accelerate、deepspeed、FSDPは大規模学習を可能にし、PEFTは効率的な微調整を提供する。unsloth、Axolotl、LLaMA-Factory、torchtuneは、これらの技術を統合し、特定の目的(高速化、使いやすさ、PyTorchネイティブ)に特化した高レベルな学習体験を提供する。
混同しやすい用語
- Transformer (アーキテクチャ) と
transformers(ライブラリ): 前者は技術概念、後者はその実装を提供するHugging FaceのPythonライブラリ。 - LoRA と PEFT: LoRAは具体的なファインチューニング手法の一つであり、PEFTはそのような手法を実装するためのフレームワーク。
- deepspeed と FSDP: どちらも大規模モデルのメモリ最適化技術だが、deepspeedはより多機能で、FSDPはPyTorchネイティブな実装。
次に読むべき章
- 第12章: 事前学習・継続事前学習・SFT (学習手法の詳細)
- 第13章: LoRA / QLoRA / Adapter (効率的ファインチューニング手法の詳細)
- 第15章: 推論ツール群 (学習後のモデルの利用方法)