- FSDP(Fully Sharded Data Parallel) と QLoRA(Quantization + Low-Rank Adaptation")を組み合わせたオープンソース
- 一般的なデスクトップPCと標準的なゲーミングGPU 2枚で、70b規模の言語モデルを効率的にファインチューニング可能
背景
- データセンター級ハードウェアとデスクトップPCに搭載されたゲーミングGPUの間には、性能差がそれほど大きくないにもかかわらず、価格差は非常に大きい
- ゲーミングGPUはメモリが少ないため、大規模言語モデルの学習が難しい
- Answer.AI はこの問題を解決するため、安価なゲーミングGPUを使って最高クラスのオープンソースモデルを学習する方法を見つけようとした
QLoRA: 単一GPUでより大きなモデルを学習する
- QLoRA は量子化と LoRA の組み合わせで、モデルの重みを4ビットに縮小して GPU メモリ使用量を減らす。
- LoRA は大規模言語モデル全体を学習する代わりに、小さなアダプタ行列を追加して学習することで、メモリ制約を回避する。
- QLoRA は 65b モデルを 48GB カードで学習可能にするが、70b モデルを 24GB のゲーミングGPUで学習するには依然として不十分。
FSDP: 複数GPUで学習規模を拡張する
- FSDP(Fully Sharded Data Parallel) はモデルのパラメータを複数のGPUに分散し、同時に利用できるようにする。
- FSDP は DDP(Distributed Data Parallel) の利点を、単一GPUでは収まりきらない大規模モデルにも適用できるようにする。
- たとえば 70b(700億パラメータ) の非量子化モデルは 140GB のRAMを使用するが(各パラメータが16ビット、つまり2バイトで保存されるため)、NVIDIA の H100 カード(1枚あたり約 $40,000!) でも不足し、80GB RAM が必要
- しかし FSDP を使えば、4枚の H100 GPU を組み合わせて合計 320GB RAM を作ることができ、さらに $150000 を節約できる
FSDP と QLoRA を組み合わせる
- Answer.AI は QLoRA でモデルサイズを縮小し、FSDP でそれを複数の24GBゲーミングカードに分散して、効率的な学習を可能にした。
- これにより 70b モデルを一般的なゲーミングGPU 2枚で学習できるようになった。
- 2023年末に FSDP と QLoRA を組み合わせるアイデアを議論した後、必要な課題を解決した。
- この過程ではさまざまな技術とライブラリが組み合わせて使われた
- 量子化されたパラメータを、モデルの "Computation Type" と同じデータ型で保存
- モデル全体の複数の「チェックポイント」に活性化を保存し、必要に応じて順伝播計算ステップを再実行して勾配を再計算するグラディエントチェックポイントにより、完全な勾配を保存しない
- CPU を使っていないとき、重みをGPUではなくCPU RAMに保存して必要なGPUメモリを大幅に減らす CPU オフローディング
- Flash Attention 2: メモリ最適化された Cuda カーネルを使って Attention を効率的に計算
- HQQ(Half-Quadratic Quantization) を発見し、FSDP と連携(GPTQ と比べて50倍高速かつ高精度)
FSDP/QLoRA の使い方
- FSDP を使うには 2枚以上のGPUが必要。 (Runpod では時間あたり $0.6 でデュアル 3090 ボックスを利用可能)
- 最新版の Transformers、PEFT、Bitsandbytes(および使用する場合は HQQ) をインストールし、Answer.AI のリポジトリをクローンして README に従って実行する。
- 24GB カード2枚で Alpaca を学習するには
python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
- まだ初期段階(アルファ/プレビュー)
- 数週間以内にベンチマーク結果も公開予定
GN⁺の意見
- この記事は AI と機械学習分野に携わる人にとって非常に興味深い。特に、大規模言語モデルを効率よく学習できる新しい方法を提示しているため注目に値する。
- この技術が成功裏に広く使われるようになれば、AI の研究開発におけるコスト障壁を大きく下げられる可能性がある。これは小規模な研究室や個人開発者にとっても大きな機会になり得る。
- ただし、このアプローチが実際に広く採用されるには、安定性と使いやすさが重要な要素になる。現在はまだ初期段階なので、コミュニティのテストとフィードバックを通じてシステムを改善していく必要がある。
- 新しい技術を導入する際には、常に既存システムとの互換性、性能、コストなどを考慮する必要がある。この技術を選ぶことで得られる利点は大規模モデル学習のアクセス性向上だが、まだ初期段階であるため、安定性やサポートの面では欠点がある可能性もある。
1件のコメント
Hacker Newsの意見
この記事は素晴らしいが、
nibbleという単語を使う機会がたくさんあったのに、すべて逃していたのが惜しい。nibbleという単語を活用しなかった点が惜しいという感想。4ビット重みを使うシステムで70bモデルをファインチューニングするのにどれくらい時間がかかるのか、たとえばモデルサイズ、学習規模、学習コスト、この技術で予想される品質低下を示す表があれば、消費者として関心を持てそうだ。
(-1,0,1) エンコーディングを適用できるのか気になる。そのモデルが出たら、answer.ai が同じ技術を使って2枚の小型GPUで大きなモデルをファインチューニングできるのか、そして費用対効果の分析も知りたい。
こうした研究は、個人ユーザーが LLM 市場で競争できるようにするうえで非常に有用だ。『ゼロ・トゥ・ワン』の内容にも通じる素晴らしい仕事だ。
NeurIPS 効率性チャレンジで上位入賞作品がすべて QLoRA を使っていた点に触れていないが、これは QLoRA の重要性と有用性を示す良い例だ。
「オープンソース」LLM で見た中でも、最も興味深く建設的なアプローチだ。学界でもこれを標準にしてほしい。
Metal での高速学習がもっと早く登場してほしい。現時点では Mac Studio は大規模モデル推論にははるかに安価で十分に高速だが、学習ソリューションはほとんど存在しない。
技術的な文章の質と明快さが素晴らしい。
LLM (70B) の重みを自分のデータで再学習できるのか気になる。
限られたハードウェア予算で LLM をファインチューニングする人にとって、これは画期的な突破口だ。
FSDP ではなく DeepSpeed を選んだ理由が気になる。
モデルをファインチューニングできるようになったとき、性能チューニングのために使ったツールがあるのか気になる。
スパース化を試したことがあるのか気になる。これによってより少ない RAM でファインチューニングできそうに思える。