問題の説明:SGLangサーバー起動時のCUDAメモリエラー
SGLangは、大規模言語モデル(LLM)の推論を高速化するためのランタイムです。しかし、特に大規模なモデルやマルチモーダルモデルをロードする際に、CUDA Out of Memory(OOM)エラーに遭遇することがあります。また、環境設定によってはtorch.cuda.is_available()がFalseを返し、GPUが認識されない問題も発生します。
これらのエラーは、主に以下の原因で発生します。
- モデルのVRAM要求量がGPUの物理メモリを超えている。
- PyTorchのメモリ管理設定が最適化されていない(メモリフラグメンテーション)。
- CUDAドライバ、PyTorch、CUDA Toolkitのバージョン不一致。
- テンソル並列(–tp)やメモリ割り当て設定(–mem-fraction-static)の不適切な使用。
本記事では、GitHubのIssueで報告されている実際のトラブルを参考に���これらの問題を解決する具体的な手順を解説します。
結論:解決策の要約
SGLangのCUDA OOMエラーとGPU認識問題は、以下の複数のアプローチを組み合わせることで解決できる可能性が高いです。
- 環境変数
PYTORCH_CUDA_ALLOC_CONFの設定:メモリフラグメンテーションを防ぎます。 - 起動オプション
--mem-fraction-staticの調整:GPUメモリの静的な確保割合を制御します。 - テンソル並列(
--tensor-parallel-size)の活用:モデルを複数GPUに分散してロードします。 - CUDA環境の再確認:ドライバ、PyTorch、CUDAのバージョン整合性を確認します。
具体的な手順:コマンド例と設定
1. メモリフラグメンテーション対策
PyTorchはデフォルトでメモリをキャッシュし、断片化(フラグメンテーション)が発生することがあります。これにより、実際に空きがあるにもかかわらずOOMが発生します。環境変数PYTORCH_CUDA_ALLOC_CONFを設定して対策します。
# シェルで設定(Linux/macOS)
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
# または、Pythonスクリプト内で設定
import os
os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'expandable_segments:True'
# サーバー起動コマンド例
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python -m sglang.launch_server
--model-path Qwen/Qwen2.5-7B-Instruct
--port 30000
この設定により、PyTorchがメモリをより柔軟に管理し、大きな連続メモリブロックの確保に失敗する問題を軽減できます。
2. メモリ割り当ての静的管理 (–mem-fraction-static)
SGLangサーバー起動時に、GPUメモリのうちどれだけを静的に確保するかを指定できます。デフォルトは0.9ですが、他のプロセスとGPUを共有する場合や、OOMが頻発する場合はこの値を下げます。
# メモリの70%を静的に確保する例
python -m sglang.launch_server
--model-path Qwen/Qwen3-0.6B
--port 8000
--mem-fraction-static 0.7
--cpu-offload-gb 1
--cpu-offload-gbオプションと組み合わせることで、指定したGB分の重みをCPUにオフロードし、GPUメモリの圧迫をさらに緩和できます。
3. テンソル並列によるマルチGPU活用
単一GPUのメモリ容量では収まらない大規模モデル(例:Qwen3-VL-235B)を実行する場合は、テンソル並列が必須です。--tensor-parallel-size(または--tp)オプションで、使用するGPU数を指定します。
# 8GPUを使用して235BパラメータのVLモデルを実行する例
export SGLANG_VLM_CACHE_SIZE_MB=8192
python -m sglang.launch_server
--model-path /path/to/Qwen3-VL-235B-A22B-Instruct
--tensor-parallel-size 8
--port 30000
--host 0.0.0.0
--trust-remote-code
--context-length 64000
--enable-multimodal
この例では、8つのGPUにモデルを分散してロードすることで、単体GPUのメモリ制限を超えるモデルを実行可能にしています。
4. CUDA環境とtorch.cuda.is_available()の確認
torch.cuda.is_available()がFalseを返す場合、根本的なCUDA環境に問題があります。以下のコマンドで環境を確認してください。
# Pythonインタラクティブシェルで確認
import torch
print(f"PyTorch Version: {torch.__version__}")
print(f"CUDA Available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"CUDA Version: {torch.version.cuda}")
print(f"GPU Device: {torch.cuda.get_device_name(0)}")
print(f"GPU Count: {torch.cuda.device_count()}")
# nvidia-smiでドライバとGPU状態を確認
nvidia-smi
出力結果を確認し、以下の点に不一致がないかチェックします。
torch.version.cudaのバージョンと、システムにインストールされているCUDA Toolkitのバージョン。- PyTorchがCUDAサポート付きでインストールされているか(
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124など)。 - NVIDIAドライバのバージョンが十分に新しいか。
よくあるトラブルと対処法
ケース1: 「reserved by PyTorch but unallocated」が大きい
エラーメッセージに「Of the allocated memory XX GiB is allocated by PyTorch, and YY MiB is reserved by PyTorch but unallocated」と表示される場合、メモリフラグメンテーションが疑われます。
対処法: 前述のPYTORCH_CUDA_ALLOC_CONF=expandable_segments:Trueを設定してください。これが最も効果的な解決策です。
ケース2: テンソル並列設定後もOOM
--tensor-parallel-sizeを指定しているのにOOMになる場合、各GPUのメモリ容量が依然として不足しているか、モデルの精度(dtype)が高い(例:float32)可能性があります。
対処法:
- モデルを量子化(AWQ, GPTQ)したバージョンを使用する。
- 起動オプションに
--dtype bfloat16または--dtype float16を明示的に指定する。 - 使用するGPU数をさらに増やす(可能であれば)。
ケース3: CPUオフロード使用中にOOM
--cpu-offload-gbを指定しているのにOOMエラーが報告される場合(Issue #6526)、オフロードの処理中に一時的にGPUメモリが逼迫している可能性があります。
対処法:
--mem-fraction-staticの値をさらに下げて(例:0.5)、GPUメモリの余裕を増やす。--cpu-offload-gbの値を増やして、より多くの重みをCPUに移す。
参考元
本記事の解決策は、以下のSGLang公式GitHub Issueの実際の議論と解決案に基づいています。
- /generate request possibly hanging when `CUDA out of memory` is thrown · Issue #435
- [Bug] sglang offline inference: “cuda out of memory” error, while vllm works fine · Issue #4248
- Qwen3-VL-235B-A22B-Instruct: torch.OutOfMemoryError: CUDA out of memory. · Issue #11382
- [Bug] When using cpu-offload-gb 1, a CUDA error: out of memory is reported · Issue #6526
- qwen2.5vl-72b-awq – 4090 – OOM · Issue #6082
🔧 AI開発におすすめのGPU・パーツ
本記事の手順を快適に進めるための推奨スペック:
- GPU: NVIDIA RTX 4070 Ti Super(AI開発コスパ最強)
- メモリ: DDR5 64GB(LLM推論に必須)
- SSD: NVMe SSD 2TB(大規模モデル保存用)
⚡ GPU環境をすぐに使いたいなら
ハードウェアの購入・セットアップなしで、すぐにGPU環境を使えるクラウドサービスがおすすめです。
- RunPod — RTX 4090/A100/H100を即座に利用可能
- Vast.ai — 最安のGPUクラウド、オークション方式で低コスト
- RTX 5090をAmazonで見る — 自宅GPU環境を構築するなら