70億パラメータのモデルでは、重みを半精度でロードするだけで140GBのVRAMが必要です。この数字に驚いたら、ぜひ読み進めてください。
大型言語モデル(LLM)はソフトウェアの可能性を変革しましたが、その展開にはリソース管理が欠かせません。最大のボトルネックとなるのは、ほとんどの場合メモリです。2025年第3四半期以降、DRAMのコストが大幅に上昇しており、これはAI企業の運用コストに大きな影響を与えるでしょう。本記事では、大型モデルを小型ハードウェアに適応させるための技術を、単純な量子化からメモリ消費を根本的に見直すアーキテクチャの工夫に至るまで詳しく解説します。
メモリはどこで消費されているのか?
最適化を行う前に、何を最適化すべきかを理解することが重要です。推論中、GPUメモリは4つの主要なコンポーネントによって消費され、それぞれ異なる動きを見せます。
- モデルの重み
最も明白なコストです。各パラメータはデータ型によって固定サイズを占めます(FP32は4バイト、FP16やBF16は2バイト、INT8は1バイト、INT4は0.5バイト)。たとえば、7億パラメータのモデルではFP16で約14GB、70億パラメータでは140GBが必要です。これは静的なコストであり、モデルがロードされた後は変わりません。 - KVキャッシュ
Transformerモデルにおける自己注意メカニズム[1]では、各トークンに対してKeyおよびValueのプロジェクションをキャッシュする必要があります。このキャッシュは、シーケンス長に比例して直線的に増加します。たとえば、Llama 3 70Bが128Kトークンのコンテキストを処理する場合、KVキャッシュだけで重みメモリに匹敵、またはそれを上回ることがあります。 - アクティベーション
推論時に生成される中間テンソルで、通常トレーニング時よりも控えめですが、バッチサイズが大きい場合や負荷が高い場合には無視できない量になります。 - フレームワークのオーバーヘッド
CUDAコンテキスト、メモリアロケータの断片化、マルチGPU用の通信バッファ、その他の内部管理データなどです。500MBから2GB程度の比較的小さいながらも削減できないコストです。
以上を踏まえて、以下の最適化戦略ではこれらのいずれかのコンポーネントを対象としています。
量子化: 精度と容量のトレードオフ
量子化は最も広く採用されているメモリ最適化技術であり、モデルの重みを低精度データ型で表現することで直接的かつ予測可能にサイズを削減します。たとえば、モデルをFP16からINT4に量子化すると約4倍小さくなります。現代の量子化技術では、出力品質の劣化を最小限に抑えながらこれを実現できます。
GPTQ[2] はポストトレーニング量子化手法で、モデルを層ごとに処理しながら、小さなキャリブレーションデータセットを使用して量子化パラメータを調整します。一部の標準ベンチマークでは、4ビット精度のGPTQ量子化モデルが、フル精度モデルとほぼ同等の性能を発揮します。
AWQ[3](Activation-aware Weight Quantization)は、重みチャネルごとの重要性が異なることに注目した手法です。重要なチャネルにより高い精度を割り当てることで、同じビット幅でより高品質の結果を得ることができます。
GGUF は、llama.cppプロジェクトで普及し、2ビットから8ビットまでの混合精度量子化をサポートします。特に消費者向けハードウェアやエッジデバイス向けの展開でそのポータビリティが強みです。
bitsandbytes[4] はHugging Faceエコシステムとシームレスに統合し、4ビット精度のモデルを容易にロードできます。さらに、量子化定数そのものを圧縮する「二重量子化」[5] をサポートし、4ビット圧縮の上にさらに10–15%のメモリ削減を実現します。
KVキャッシュの最適化
量子化によってモデルの重みが圧縮された後は、KVキャッシュが主要なメモリボトルネックとなることがよくあります。特に長いコンテキストや高い同時実行性が求められる生産環境では顕著です。
Multi-Query Attention (MQA)[6] や Grouped-Query Attention (GQA)[7] などの設計の工夫、キャッシュの低精度化(FP8やINT4への変換)、および PagedAttention[8] のようなページング技術を活用することで、大幅なメモリ削減が可能です。
GPUをまたぐ負荷分散
単一のGPUに収まらないモデルを展開する場合、テンソル並列化やパイプライン並列化を用いた分散が有効です。
CPUオフロードとハイブリッド推論
GPUが1台でも十分なシステムRAMがある場合、オフロード技術により、VRAM容量を超えるモデルも実行可能です。
展開フレームワークの選択
展開フレームワークの選択は、メモリ使用率とスループットに大きな影響を与えます。vLLM[8]、TensorRT-LLM、および llama.cpp など、使用するフレームワークを慎重に選び、最適なメモリ効率を実現しましょう。
まとめ
LLMの効率的な展開は、単一の技術ではなく、特定の制約に応じた適切な最適化技術の組み合わせによって実現されます。本記事で述べた手法を活用し、リソースを最大限に活用しながら、大型言語モデルを効果的に展開しましょう。