※ このページは「QLORA: Efficient Finetuning of Quantized LLMs」の要約になります。
このページでわかること
- QLORAは、4ビット量子化とLoRAアダプターを用いて、65Bパラメータモデルを48GBのGPUで効率的に Fine-Tuning ができる
- 主要な技術革新には、4ビットNormalFloat、ダブル量子化、およびページドオプティマイザ
- Guanacoモデルは、24時間かからずChatGPTに匹敵する性能を達成した
対象読者
- 特に大規模言語モデル(LLM)の効率的な微調整と量子化に関心がある研究者やエンジニア
従来 Fine-Tuning の問題点
-
大規模言語モデルの微調整のコストとメモリ要求の高さ:
- 65Bパラメータモデルの通常の16ビット微調整には、780GB以上のGPUメモリが必要であり、非常に高価で実行が困難
-
量子化モデルの微調整中の性能劣化:
- 既存の量子化手法は推論時のメモリを削減するが、トレーニング時には性能が低下することが多い
-
高性能な微調整手法の欠如:
- 微調整時にフルモデルの性能を維持しながら、メモリ使用量を大幅に削減できる手法が不足している
QLoRA
QLoRAとは?
QLoRA(Quantized Low-rank Adapter)は、LLMの効率的な微調整手法で、4ビットに量子化された事前学習済みモデルを利用し、メモリ使用量を大幅に削減しながら性能を維持する方法です。QLoRAは、Low-rank Adapters(LoRA)と呼ばれる小さな学習可能な重みセットを使用し、量子化されたモデルの中で勾配を逆伝播させます。
QLoRAのメリット
- メモリ効率の向上:QLoRAは4ビット量子化により、メモリ使用量を劇的に削減し、65Bパラメータモデルを48GBのGPUで微調整可能
- 性能維持:メモリ使用量を削減しながらも、16ビット微調整と同等の性能を維持
- コスト削減:単一のGPUで大規模モデルを微調整できるため、計算コストとハードウェアコストを大幅に削減できる
- アクセスの向上:より多くの研究者や開発者が大規模モデルの微調整にアクセスできる
QLoRAの手順
- 量子化:事前学習済みのモデルを4ビットに量子化します。これには、情報理論的に最適な4ビットNormalFloat(NF4)データ型とダブル量子化技術が使用される
- LoRAアダプターの追加:量子化されたモデルにLow-rank Adapters(LoRA)を追加します。これらのアダプターは、小さな学習可能なパラメータセットであり、モデルの全体の重みは固定される
- 勾配の逆伝播:量子化された重みを通じて勾配を逆伝播させ、LoRAアダプターを更新します。このプロセスにより、メモリ効率を維持しながらモデルを微調整する
- ページドオプティマイザの使用:メモリスパイクを管理し、メモリ不足を防ぐためにNVIDIAの統一メモリ機能を使用する
4ビットNormalFloat
4ビットNormalFloat(NF4)は、正規分布重み用に情報理論的に最適化された量子化データ型です。これは、通常の4ビット整数や浮動小数点数と比べて、正規分布に対してより精度の高い量子化を提供します。具体的には、次のような手順で実現されます:
- 標準正規分布の量子化:標準正規分布の量子を理論的に最適化し、各量子化ビンに等しい数の値が割り当てられるようにする
- データの正規化:入力テンソルを標準正規分布にフィットするようにスケーリングし、範囲を[-1, 1]に正規化する
- 量子化:正規化された値を量子化して、4ビットのNormalFloatデータ型にマッピングする
ダブル量子化
ダブル量子化は、量子化定数自体をさらに量子化することで、メモリ使用量を削減する技術です。通常の量子化では、量子化定数が大きなメモリフットプリントを持つことがありますが、ダブル量子化によりこれを減らします。手順は次の通りです:
- 第1段階の量子化:通常の方法で入力テンソルを量子化し、量子化定数(例えば32ビット浮動小数点数)を得る
- 第2段階の量子化:第1段階の量子化定数を8ビット浮動小数点数に再量子化します。この再量子化により、メモリフットプリントを大幅に削減できる
- メモリ削減:この方法により、65Bパラメータモデルの場合、32ビット定数が0.5ビット/パラメータから8ビット定数が0.127ビット/パラメータへと削減される
ページドオプティマイザ
ページドオプティマイザは、NVIDIAの統一メモリ機能を使用して、メモリ不足を防ぐための技術です。これにより、GPUがメモリ不足になると、自動的にメモリページがCPU RAMにスワップされ、必要に応じて再度GPUメモリにロードされます。手順は次の通りです:
- 統一メモリの利用:GPUとCPU間で自動的にページングを行い、メモリ管理を簡素化する
- メモリスパイクの管理:勾配チェックポイント処理中に発生するメモリスパイクを防ぎ、大規模モデルの微調整を単一のマシンで可能にする
- パフォーマンスの維持:ページングが発生しても、トレーニング速度やパフォーマンスを大きく低下させることなく、65Bモデルを48GBのGPUでトレーニング可能にする
QLoRAの性能
- Guanacoモデル:QLoRAを使用して微調整されたGuanacoモデルは、VicunaベンチマークでChatGPTの99.3%の性能を達成し、他のオープンソースモデルを上回る性能を示した
- 評価結果:QLoRA微調整は、小規模な高品質データセットを使用することで、以前の最先端モデルよりも優れた結果を達成しました。例えば、Guanaco 65Bモデルは24時間以内に単一GPUで微調整され、ChatGPTに匹敵する性能を発揮した
- データセットの品質:データセットのサイズよりも質が重要であり、QLoRA微調整は高品質なデータセットでの優れた性能を示した
まとめ
以上がQLoRAの要約でした。メモリ消費多い問題はLLMのFine-Tuningをするうえで絶対に出てくるので知っておくとよさそうですね。
おわり。