概要
フルファインチューニングは、独自のデータ例を使用してモデル全体の学習を継続します。すべてのレイヤーのすべての重みが変更される可能性があります。これは最も直接的なファインチューニングの形式であり、メカニズムとしてはモデル構築の後半段階と同じです。代替手段として、元の重みを凍結し、代わりに小さなアドオンを学習させるLoRAなどのパラメータ効率の良いファインチューニング(PEFT)があります。
メモリの消費先
モデルの実行には重みのみが必要です。すべての重みを学習するには、それぞれの重み自体に加えて、勾配とオプティマイザの状態が必要になります。通常の混合精度セットアップでAdamWを使用する場合、フォワードパスとバックワードパス用の16ビットの重みと16ビットの勾配に加え、安定した更新を維持するための32ビットの重みのマスターコピーとAdamの2つの32ビット移動平均が含まれます。ZeROの論文の計算では、これを重みあたり16バイトとしていますが、勾配を32ビットで保持する他のセットアップでは約18バイトになります。
per trainable weight · AdamW · mixed precision
16-bit weight 2 bytes
16-bit gradient 2 bytes
32-bit master weight 4 bytes
32-bit Adam momentum 4 bytes
32-bit Adam variance 4 bytes
───────────────────────────────────
16 bytes + activations
7B model: 7 × 10⁹ × 16 bytes ≈ 112 GB- 16ビットでの実行のみ: 70億 × 2バイト ≈ 14 GB。
- AdamWを使用したフルファインチューニング: アクティベーション前に、70億 × 16バイト ≈ 112 GB。これは80 GBのGPU1基の容量を超えるため、ZeROやFSDPなどの技術を使用して複数のGPUにジョブを分割し、オプティマイザの状態、勾配、重みを分散させます。
- Llamaスタイルの7Bモデルのすべての線形レイヤーにランク16のLoRAを適用: 約4,000万の学習可能な重み(モデルの0.6%)。その学習状態は、凍結された14 GBのベースモデルに加えて、約4,000万 × 16バイト ≈ 0.6 GBとなり、合計で約15 GBになります。
- QLoRA: 4ビットで保持される凍結されたベースモデルは約3.5 GBを占めるため、合計は約4〜5 GBにアクティベーションを加えたものとなり、一般的なコンシューマー向けGPU1基で対応可能な範囲に収まります。
- どの場合でもアクティベーションがさらに上乗せされ、バッチサイズとシーケンス長に応じて増加します。勾配チェックポイント(Gradient checkpointing)を使用すると、計算量を増やす代わりにアクティベーションメモリを削減できます。
得られるメリット
フルファインチューニングは、アダプターが到達できる小さな部分空間だけでなく、あらゆる方向にモデルを変更できます。両者を比較したある研究では、フルファインチューニングは一般的なLoRA設定の10〜100倍のランクで変更を学習し、約10万例の大規模なコードや数学の学習セットでより多くを学習することがわかりました。トーン、フォーマット、ドメイン特有の言い回しを教える数百から数千のチャット例を使用する一般的なビジネスケースでは、すべてのレイヤーに適用されたLoRAは、概ねフルファインチューニングと同等の結果をもたらします。
代償:忘却
破滅的忘却(Catastrophic forgetting)とは、新しいことを学習したネットワークが以前に学習した内容を失う傾向のことです。フルファインチューニングはすべての重みを変更できるため、一般的な能力を上書きする余地が最も大きくなります。例えば、製品に関する質問には完璧に答えるものの、無関係な指示に従う能力が低下したサポートモデルなどがこれに該当します。継続的な指示チューニング(Instruction tuning)に関する実証研究では、1Bから7Bパラメータのモデル全体で忘却が観察されており、ベースを凍結するLoRAでファインチューニングされたモデルは忘却が少ないことがわかっています。
- エポック数を減らし、学習率を低くすることで、重みが初期状態から大きく変動するのを防ぎます。
- 独自のデータだけでなく、幅広い指示に従う例を一定割合含めるなど、一般的なデータを混在させます。
- 対象タスク以外も評価します。 評価に一般的な質問をいくつか含めることで、性能の低下(リグレッション)を検出できるようにします。
- フルファインチューニングによる効果が実際に測定されていない限り、アダプターの使用を推奨します。
フルファインチューニングとLoRAの比較
| 項目 | フルファインチューニング | LoRAアダプター |
|---|---|---|
| 学習可能な重み | すべて | 通常0.1〜1% |
| 学習に必要なメモリ | 重みあたり約16バイト、およびアクティベーション | 凍結されたベースモデル(重みあたり2バイト、または4ビットで約0.5バイト)と小規模なアダプター |
| 保存される結果 | モデル全体のコピー(例:16ビットの7Bモデルで約14GB) | アダプターファイル(通常数十〜数百MB) |
| 一般的な学習率 | 約1e-5 | 約10倍 |
| 忘却リスク | 高い | 低い |
| 最適な用途 | 実質的な新しいスキルを学習させる大規模データセット | トーン、フォーマット、ドメイン特有の言い回しの調整。1つのベースモデルから複数のバリアントを作成する場合 |
よくある間違い
- より徹底しているように聞こえるという理由でフルファインチューニングを選択すること。小規模なデータセットでは、測定可能な効果が得られないにもかかわらず、はるかに高いコストがかかることが一般的です。
- モデルのダウンロードサイズからGPUメモリを見積もること。すべての重みを学習するには、16ビットの重みの約8倍のメモリに加えて、アクティベーション用のメモリが必要になります。
- 高い学習率で多数のエポックを学習させ、対象タスクのみをテストした結果、一般的なスキルが低下していることに後から気づくこと。
- フルファインチューニングを行うたびに、保存および提供するためのフルサイズのモデルが生成されることを忘れてしまうこと。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01ZeRO: Memory Optimizations Toward Training Trillion Parameter ModelsRajbhandari et al., 2019 · arXiv · arxiv.orgパラメータあたり16バイトという計算の根拠、およびそれを複数のGPUに分散させるために使用されるシャーディングのソース。
- 02GPU memory usageHugging Face Transformers docs · huggingface.co学習中の重み、オプティマイザの状態、勾配、およびアクティベーションの内訳。
- 03LoRA Learns Less and Forgets LessBiderman et al., 2024 · arXiv · arxiv.orgコードと数学におけるフルファインチューニングとLoRAの詳細な比較:それぞれが学習することと忘却すること。
- 04An Empirical Study of Catastrophic Forgetting in Large Language Models During Continual Fine-tuningLuo et al., 2023 · arXiv · arxiv.org
- 05LoRA vs. full fine-tuningTogether AI docs · docs.together.aiアダプターからフルファインチューニングに移行するタイミングに関する、プロバイダーの実践的なアドバイス。