12GB超のモデルをGPU 2枚で快適に動かす:層別配置とKVキャッシュ最適化
12GB×2=合計24GBの構成で、12GBを超えるモデルをCPU退避なしに動かすための実践的な手順をまとめました。単一モデルを専有実行する条件を整えれば16GBクラスまで全層GPU常駐が可能で、鍵になるのは同時ロード数の制御、num_ctxのバケット丸め、KVキャッシュ量子化、そして層別配置の確認です。
はじめに:合計VRAMの数字に期待しすぎない
GPUを2枚積むと、合計VRAMの数字が期待を膨らませます。実際には「24GBまで載る」わけではありませんが、条件を整えれば12GBを超えるモデルもCPU退避なしで動かせます。分かれ目は容量の足し算ではなく、同時に何を常駐させているか、そしてKVキャッシュにどれだけ使っているかです。この記事では、12GB×2の構成で16GBクラスのモデルを全層GPUに載せるための手順を順番に見ていきます。
まず全体像:層別配置(layer split)がどう決まるか
Ollamaはモデルの層を各GPUの空き容量に応じて配分します。複数のモデルやプロセスが同時にVRAMを使っていると、この配分の前提が崩れ、想定より少ない層しか1枚に載らなくなります。
CPU退避が起きる本当の条件
実測で分かったのは、CPU退避の主因が「容量オーバー」そのものではなく「同時常駐による圧迫」であるということです。単一モデルを専有実行できていれば、16GBクラスのモデルでも12GB×2構成で全層GPUに載ります。
単一モデル専有で動かす
OLLAMA_MAX_LOADED_MODELSとOLLAMA_NUM_PARALLELをどちらも1に固定し、大型モデルを扱う間は他のモデルを同時ロードしないようにします。これがCPU退避を避ける最優先の設定です。
KVキャッシュを量子化して余白を作る
OLLAMA_FLASH_ATTENTION=1とOLLAMA_KV_CACHE_TYPE=q8_0を組み合わせると、重みを削らずにKVキャッシュ分の容量を圧縮できます。長いコンテキストを扱うほど効果が出ます。
num_ctxはバケット値へ丸める
2048/4096/8192/16384のようなバケット値に丸めることで、呼び出しごとの再ロードとVRAM断片化を防ぎます。断片化はそのままCPU退避につながるため、地味ながら効果の大きい設定です。
GGUF量子化の選び方
Q4_K_Mは同じモデルをおよそ半分弱の容量に収められ、12GB×2で16GBクラスを扱う際の基本線になります。品質を優先したい場面だけQ5_K_MやQ6_Kを検討します。
全層GPU常駐を確認する手順
ollama psのPROCESSORが「100% GPU」であること、nvidia-smiで両カードの使用量が極端に偏っていないことの2点を確認します。片側だけ満杯なら、同時常駐しているモデルを落とすかnum_ctxを1段下げます。
16GB超を狙うなら
さらに大きいモデルを扱いたい場合は、24GBクラスのGPU1枚への切り替えと、12GB×2のまま専有実行を徹底する運用のどちらが自分の用途に合うかを比較検討します。
設定の目安まとめ
- 同時常駐を止める:
OLLAMA_MAX_LOADED_MODELS=1、OLLAMA_NUM_PARALLEL=1(いずれもサーバ起動時の環境変数。起動後やリクエスト単位では変更が効きません)。大型モデルを扱う間はこの2つを最優先で固定する。 - KVキャッシュ量子化:
OLLAMA_FLASH_ATTENTION=1とOLLAMA_KV_CACHE_TYPE=q8_0。長いコンテキストほど効き、重みを削らずに余白を作れる。 - num_ctxは2048/4096/8192/16384のようなバケット値へ丸める。割り算の生値を渡すと呼び出しごとにモデルが再ロードされ、VRAMが断片化して結果的に退避を招く。
- 量子化の目安:Q4_K_Mは同じモデルをおよそ半分弱の容量に収められ、12GB×2で16GBクラスを扱う際の基本線。品質を優先したい場面だけQ5_K_M / Q6_Kを検討する。
- 確認手順:
ollama psのPROCESSORが「100% GPU」であること、nvidia-smiで両カードの使用量が極端に偏っていないことの2点を毎回見る。片側だけ満杯なら、同時常駐しているモデルを落とすかnum_ctxを1段下げる。 - 複数の処理を並行させたい場合は、大型モデルを使う処理だけ直列に流す。並行実行はGPUの取り合いになり、退避と測定ブレの両方を招く。
まとめ
12GB×2で大型モデルを扱う要点は、容量を限界まで攻めることではなく「専有状態を作ること」です。OLLAMA_MAX_LOADED_MODELS=1、KVキャッシュq8_0、num_ctxのバケット丸めの3点をまず適用し、ollama psが100% GPUのままかを確認してみてください。それでも足りない場合が、24GBクラス1枚への買い替えを検討するタイミングです。