トラブルシューティング 更新日 5 分で読めます

24GB GPUでのGemma 4 OOM(メモリ不足)エラーの修正

結論:RTX 3090/4090でGemma 4 27Bまたは31Bを読み込む際にCUDAメモリ不足エラーが発生する場合、問題がモデルの重み自体にあることはまれです。ほとんどの場合、制限のないKVキャッシュ、またはOllamaやvLLMでの野心的なコンテキスト長の設定が原因です。

コンテキスト: このガイドは、推論パラメータを調整することで24GBのVRAMにGemma 4 31Bをうまく収めた、X(Twitter)やRedditの開発者からの実際の修正方法を集約しています。

症状

24GB GPUを使用している多くのユーザーが、次のクラッシュシーケンスを報告しています。

  1. モデルがVRAMに正常に読み込まれる(Q4_K_Mで約18〜20GBを消費)。
  2. 最初の短いプロンプトは正常に機能する。
  3. 長いドキュメントを貼り付けたり、チャット履歴が増えたりする。
  4. 推論エンジンが CUDA error: out of memory でクラッシュするか、Ollamaが突然応答を停止する。

根本原因の分析:KVキャッシュの隠れたコスト

量子化された31Bモデルの重みは約19GBのVRAMに収まりますが、アテンションメカニズムはコンテキスト(KVキャッシュ)を保存するためのメモリを必要とします。Gemma 4では、長いコンテキストはメモリ使用量を線形にスケーリングします。コンテキストウィンドウをデフォルトの8kのままにするか、メモリ制限なしで32kに押し上げようとすると、KVキャッシュが24GB VRAMの残りの4〜5GBを即座に消費し、ハードクラッシュを引き起こします。

修正 1:Ollamaでのコンテキストの制限

Ollamaを使用している場合は、モデルの実行時またはAPI呼び出し内でコンテキストサイズ(num_ctx)を明示的に制限する必要があります。

# コンテキストを制限してCLI経由で実行
ollama run gemma4:31b --num_ctx 4096

カスタム Modelfile を使用している場合は、このパラメータを追加します。

FROM gemma4:31b
PARAMETER num_ctx 4096

修正 2:vLLMでのGPUメモリ使用率の管理

より高いスループットのためにvLLM経由で展開している場合、vLLMのデフォルトの動作は、GPUメモリの90%を事前に予約することです。24GBカード上のGemma 4 31Bの場合、この積極的な予約はOSのオーバーヘッドと競合することがよくあります。

gpu-memory-utilization フラグを明示的に下げる必要があります。

python -m vllm.entrypoints.openai.api_server \
  --model google/gemma-4-27b-it \
  --quantization awq \
  --gpu-memory-utilization 0.85 \
  --max-model-len 4096

関連ガイド