フルファインチューニング(フルファインチューニング)
LLMの全パラメータを更新する完全なファインチューニング手法。LoRA等の部分的更新と対比し、最高の性能適応が得られるが大量のGPUメモリと計算コストを要する。
フルファインチューニングとは
フルファインチューニング(Full Fine-Tuning / FFT)はLLMの全重みパラメータを対象とするファインチューニング。事前学習済みモデルの全Layer(Embedding・Attention・FFN・LM Head等)を学習データで更新する。LoRAやアダプタ等の「部分更新PEFT」と対比される概念。
メモリ要件
7Bモデルの場合 (bfloat16):
モデル重み: 7B × 2byte = 14GB
勾配: 14GB
オプティマイザ状態 (AdamW): 14GB × 2 = 28GB
アクティベーション: 数GB〜10GB+
合計: 約 60〜80GB
| モデルサイズ | 最低VRAM (bf16) | 推奨GPU構成 |
|---|---|---|
| 7B | 60GB+ | A100 80GB ×1 |
| 13B | 100GB+ | A100 ×2 |
| 70B | 500GB+ | A100 ×8 |
| 405B | 3TB+ | H100 ×16+ |
DeepSpeedとFSDP
フルファインチューニングの大規模化には分散学習フレームワークが不可欠。
DeepSpeed ZeRO
- ZeRO-1: オプティマイザ状態をGPU間分散
- ZeRO-2: + 勾配も分散
- ZeRO-3: + モデルパラメータも分散(実質的にモデル並列)
- ZeRO-Offload: CPUメモリへオフロード(低コスト構成用)
PyTorch FSDP
PyTorch公式の完全シャード化データ並列。ZeRO-3相当の分散学習を実現。2024年よりTRL・LLaMA-Factory等で標準サポート。
フルFTとLoRAの性能比較
| タスク | Full FT | LoRA (r=64) | LoRA (r=16) |
|---|---|---|---|
| 特定ドメインQA | 最高 | -1〜3% | -3〜8% |
| 一般指示追従 | 最高 | ほぼ同等 | 同等 |
| コード生成 | 最高 | -1〜2% | -2〜5% |
| 多言語翻訳 | 最高 | ほぼ同等 | 同等 |
一般タスクではLoRAがFull FTの95%以上の性能を達成するため、コスト対効果でLoRAが優位。特殊ドメイン(医療・法律・独自言語等)ではFull FTの優位性が顕著。
Continual Pre-training vs Fine-tuning
| 手法 | 目的 | データ形式 | 更新範囲 |
|---|---|---|---|
| 事前学習 | 言語知識習得 | 生テキスト | 全 |
| Continual Pre-training | ドメイン知識注入 | 生テキスト | 全 |
| Full Fine-tuning | タスク適応 | ラベル付き | 全 |
| LoRA Fine-tuning | 軽量タスク適応 | ラベル付き | 一部 |
実用例 (2025年)
- Llama-3-70B医療特化: 医療教科書・論文でContinual Pre-training → 医療QAでFull SFT
- 日本語LLM (Swallow等): 英語ベースモデルを日本語コーパスでFull Continual Pre-training
- 企業秘密データ適応: 社内文書・ノウハウでFull FT(クラウドAPIに送れないデータ)
よくある質問 (FAQ)
Q1: A100が使えない場合にフルFTする方法は? A: DeepSpeed ZeRO-3 + ZeRO-Offload でCPUメモリを活用し、RTX 3090(24GB)×4枚程度でも7B模型のFull FTが可能。ただし学習速度は大幅低下。Unslothの「Full Fine-tuning」モードも選択肢。
Q2: Full FTでCatastrophic Forgettingは起こるか? A: はい。ドメイン特化データのみで全パラメータ更新すると、事前学習で習得した汎用能力が失われる(Catastrophic Forgetting)。EWC (Elastic Weight Consolidation) やリプレイバッファで軽減可能。
Q3: Full FTとLoRAを使い分ける基準は? A: VRAM 80GB未満またはコスト制約ありならLoRA一択。最高性能が必須かつ大規模GPU利用可能ならFull FT。特殊言語・専門ドメインで既存tokenizer外の語彙追加が必要な場合はFull FT必須。
まとめ
- 全パラメータ更新で最高の下流タスク性能
- 7Bで60GB+VRAM必要 → DeepSpeed/FSDPで分散化
- 一般タスクはLoRAで代替可能。特殊ドメインではFull FTが優位
- Continual Pre-trainingと組み合わせてドメイン特化LLMを構築