🧷

Phi-3のFineTuning方法の違い「通常のファインチューニング」「LoRA」「qLoRA」

2024/10/18に公開

Phi-3モデルのFineTuning方法って何が違うの?

https://github.com/microsoft/Phi-3CookBook/blob/main/code/04.Finetuning/Phi_3_Inference_Finetuning.ipynb

上記のGitHubリポジトリには、Phi-3のFineTuning方法が記載されています。

そこには「通常のファインチューニング」「LoRA」「qLoRA」の3つのノートブックがあったので、
GPTに何が違うのか聞きました。

GPT-o1-previewの回答

ご提供いただいた3つのノートブックは、Phi-3モデルをファインチューニングする際の異なる手法を示しています。それぞれの方法について、具体的な違いと特徴を説明いたします。

  1. 通常のファインチューニング
    ノートブック: Phi_3_Inference_Finetuning.ipynb
  • 特徴
    • モデル全体の更新: 通常のファインチューニングでは、モデルの全パラメータが更新されます。
    • 高い計算コストとメモリ使用量: モデルサイズが大きい場合、GPUメモリを多く消費し、計算時間も長くなります。
    • 最適な性能: すべてのパラメータを調整するため、最も高い性能が期待できます。
  • 利点: モデルの性能を最大限に引き出せます。
  • 欠点: 計算資源が大量に必要で、時間もかかります。
  • 適用例:
    リソースに余裕があり、特定のタスクで最高の性能を求める場合。
  1. LoRA(Low-Rank Adaptation)によるファインチューニング
    ノートブック: Phi-3-finetune-lora-python.ipynb
  • 特徴:
    • 低ランク行列の学習: 元のモデルの重み行列を低ランク行列で近似し、追加のパラメータのみを学習します。
    • パラメータ効率: 学習するパラメータ数が大幅に減少し、メモリ使用量と計算コストを削減できます。
    • 元のモデルを固定: 基本モデルのパラメータは固定され、LoRAモジュールのみが更新されます。
  • 利点: 計算資源を節約しながら、ほぼ同等の性能を維持できます。
  • 欠点: 通常のファインチューニングと比較して、微細な性能向上が難しい場合があります。
  • 適用例:
    複数のタスクに対して効率的にモデルを適応させたい場合。
    計算資源やメモリが限られている環境でのファインチューニング。
  1. qLoRA(Quantized LoRA)によるファインチューニング
    ノートブック: Phi-3-finetune-qlora-python.ipynb
  • 特徴:
    • 量子化とLoRAの組み合わせ: モデルのパラメータを低ビット(例: 4ビット)に量子化し、さらにLoRAを適用します。
    • 極限のメモリ効率: 量子化によりモデルのメモリ使用量を大幅に削減し、一般的なGPUでも大規模モデルのファインチューニングが可能になります。
    • 性能維持: 適切な量子化手法により、性能の低下を最小限に抑えます。
  • 利点: 非常に限られた計算資源でも大規模モデルのファインチューニングが可能です。
  • 欠点: 量子化によるわずかな性能劣化が生じる可能性があります。
  • 適用例:
    消費者向けのGPUやメモリが限られた環境で大規模モデルをファインチューニングしたい場合。
    モバイルデバイスや組み込みシステムでのモデル適応。

各手法の比較

項目 通常のファインチューニング LoRA qLoRA
パラメータ更新 モデル全体 追加の低ランク行列のみ 追加の低ランク行列のみ
メモリ使用量 高い 中程度 低い
計算コスト 高い 中程度 低い
性能 最高 ほぼ同等 わずかな劣化の可能性
適用の容易さ 難しい(リソースが必要) 容易 非常に容易
モデルサイズ 大きい(全パラメータ更新) 小さい(LoRAパラメータのみ) 非常に小さい(量子化+LoRAパラメータ)

選択のポイント

  • 計算資源とメモリに余裕がある場合:
    通常のファインチューニングがおすすめです。最高の性能を引き出せます。

  • 計算資源やメモリが限られているが、性能を維持したい場合:
    LoRAを使用すると、効率的にモデルを微調整できます。

  • 極めて限られたリソース環境で大規模モデルを微調整したい場合:
    qLoRAが最適です。一般的なハードウェアでも大規模モデルのファインチューニングが可能になります。

技術的な詳細

  1. 通常のファインチューニング
  • 実装
    モデルをそのままロードし、全パラメータを学習可能に設定します。
    学習率やオプティマイザの設定を行い、トレーニングを開始します。

  • 必要なリソース
    モデルサイズに応じた大量のGPUメモリ(例: 数十GB以上)。
    複数の高性能GPUや分散学習の環境。

  1. LoRAによるファインチューニング
  • 実装
    LoRAモジュールをモデルに挿入し、元のパラメータを固定します。
    LoRAの低ランク行列のみを学習対象とします。

  • 必要なリソース
    学習するパラメータ数が少ないため、GPUメモリの使用量が削減されます。
    単一または少数のGPUでの学習が可能。

  1. qLoRAによるファインチューニング
  • 実装
    モデルを低ビット(例: 4ビット)に量子化してロードします。
    LoRAモジュールを適用し、量子化されたモデル上でLoRAパラメータを学習します。

  • 必要なリソース
    モデルが量子化されているため、GPUメモリの使用量がさらに削減されます。
    消費者向けのGPU(例: 8GB程度)でも大規模モデルの学習が可能。

まとめ

通常のファインチューニングは最高の性能を求める場合に適していますが、リソースの消費が大きいです。
LoRAは性能と効率のバランスが良く、計算資源を節約しながらモデルを微調整できます。
qLoRAはリソースが非常に限られている場合でも、大規模モデルのファインチューニングを可能にします。

最後に(人の感想)

実際、通常のファインチューニングのノートブックでColabでFine Tuningをしようとしたら、
T4だとOutOfMemoryで学習できず、A100で学習はできるけど、GPU RAMが40GB付近に張り付いている状態だったので、SLMのFineTuningならLoRAで十分じゃないかなと。

ヘッドウォータース

Discussion