--gpu-memory-utilization、--tensor-parallel-size、--max-model-len を試行錯誤で推測する必要はもうありません。オープンウェイトモデル、量子化、目標コンテキスト長、GPU構成を選ぶだけで本番投入可能な起動コマンドとコンテナマニフェストを生成します。
vllm serve Qwen/Qwen3-32B \ --tensor-parallel-size 1 \ --max-model-len 32768 \ --max-num-seqs 16 \ --gpu-memory-utilization 0.95 \ --quantization fp8 \ --kv-cache-dtype fp8 \ --enable-prefix-caching \ --port 8000
python3 -m sglang.launch_server \ --model-path Qwen/Qwen3-32B \ --tp 1 \ --context-length 32768 \ --mem-fraction-static 0.95 \ --kv-cache-dtype fp8_e4m3 \ --max-running-requests 16 \ --host 0.0.0.0 \ --port 30000
# Save as Modelfile, then run: ollama create qwen3-32b-custom -f Modelfile FROM qwen3:32b PARAMETER num_ctx 32768 PARAMETER num_batch 512 PARAMETER flash_attn true # Environment variables for ollama serve: # OLLAMA_NUM_PARALLEL=16 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=q8_0 ollama serve
llama-server \ -hf Qwen/Qwen3-32B:FP8_E4M3 \ --ctx-size 524288 \ --parallel 16 \ --n-gpu-layers 999 \ --flash-attn \ --cache-type-k q8_0 \ --cache-type-v q8_0 \ --host 0.0.0.0 --port 8080
services: vllm-qwen3-32b: image: vllm/vllm-openai:latest ipc: host ports: - "8000:8000" environment: - HUGGING_FACE_HUB_TOKEN=${HF_TOKEN:-} volumes: - ~/.cache/huggingface:/root/.cache/huggingface command: > --model Qwen/Qwen3-32B --tensor-parallel-size 1 --max-model-len 32768 --max-num-seqs 16 --gpu-memory-utilization 0.95 --quantization fp8 --kv-cache-dtype fp8 --enable-prefix-caching deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]
apiVersion: apps/v1 kind: Deployment metadata: name: qwen3-32b-vllm labels: app: qwen3-32b-vllm spec: replicas: 1 selector: matchLabels: app: qwen3-32b-vllm template: metadata: labels: app: qwen3-32b-vllm spec: volumes: - name: dshm emptyDir: medium: Memory sizeLimit: 16Gi containers: - name: vllm image: vllm/vllm-openai:latest args: - "--model" - "Qwen/Qwen3-32B" - "--tensor-parallel-size" - "1" - "--max-model-len" - "32768" - "--max-num-seqs" - "16" - "--gpu-memory-utilization" - "0.95" - "--kv-cache-dtype" - "fp8" ports: - containerPort: 8000 volumeMounts: - name: dshm mountPath: /dev/shm resources: limits: nvidia.com/gpu: "1" memory: "48Gi" requests: nvidia.com/gpu: "1" cpu: "8" memory: "32Gi"
テンソル並列はアテンションヘッドとMLP行列をNVLinkやPCIeデバイスへ分割するため、--tensor-parallel-size はクエリヘッド数およびKVヘッド数を割り切れる値にしつつ、NCCL all-reduceバッファとCUDAグラフ確保用の余裕を残す必要があります。
KVキャッシュ量子化(FP8 E4M3 または Q8_0)を選択すると、VRAMLabは vLLM 向けに --kv-cache-dtype fp8、SGLang 向けに --kv-cache-dtype fp8_e4m3、さらに OLLAMA_KV_CACHE_TYPE=q8_0 / --cache-type-k フラグを出力し、重み精度を落とさずに長文脈の同時処理数を倍増させます。
大雑把な経験則は、現代のオープンウェイト推論を左右する3つの主要因を見落としています。GGUFスーパーブロック量子化のスケール係数(Q4_K_Mの実効平均は4.00ではなく4.85 bits/weight)、長大コンテキストや連続バッチ処理の同時スロットに伴うKVキャッシュ膨張、そしてMixture-of-Experts(MoE)において全671Bや235BパラメータがVRAMに常駐しつつトークン生成ごとに37Bや22Bのみが読み出される挙動です。