硬件
| 项 |
规格 |
| GPU |
NVIDIA GeForce RTX 4090,48 GB(49140 MiB) |
| 驱动 |
595.80,CUDA 13.2 |
| CPU |
Intel Xeon Gold 6530,8 核 16 线程 |
| 内存 |
94 GB |
| 系统 |
Ubuntu 22.04.5 LTS(Docker 容器) |
| 磁盘 |
overlay 共 79 GB,当前空闲 ~43 GB |
最终方案
选型
- 模型:
Qwen3.8-27B-AWQ-MTP(AWQ 4bit 量化 + MTP 投机解码头)
- 推理引擎:vLLM 0.28.0(独立 venv:
/opt/vllm-env,Py3.12)
关键路径
- 模型目录:
/opt/qwen-models/qwen3.8-awq-mtp
- 服务日志:
/tmp/vllm-awq.log
- opencode 配置:
/root/.config/opencode/opencode.jsonc
- 手动入口脚本:
/root/qwen3.8-27b/serve.sh(start / stop / status,内置 watchdog 崩溃自动重拉)
- 备用编排模板:
/root/qwen3.8-27b/docker-compose.yml(Docker 原生服务化示例)
服务端核心启动命令
/opt/vllm-env/bin/vllm serve /opt/qwen-models/qwen3.8-awq-mtp \
--port 8080 \
--max-model-len 262144 \
--gpu-memory-utilization 0.95 \
--kv-cache-dtype fp8 \
--spec-method mtp --spec-tokens 4 \
--enable-auto-tool-choice --tool-call-parser qwen3_xml \
--reasoning-parser qwen3 \
--served-model-name qwen3.8-27b-awq-mtp
关键 flag 解读:
--max-model-len 262144:262K 上下文需求
--gpu-memory-utilization 0.95:吃满 48 GB 卡(留 ~2 GB 余量给宿主)
--kv-cache-dtype fp8:fp8 压缩 KV,等效 2× 槽位密度
--spec-method mtp --spec-tokens 4:MTP 投机解码,实测 acceptance 55%~77%,相比纯非 MTP 吞吐约 2.4× 提升
--enable-auto-tool-choice --tool-call-parser qwen3_xml:OpenAI tool_calls 协议
--reasoning-parser qwen3:vLLM 0.28 里 chat completions 的 thinking 字段叫 reasoning(不是 reasoning_content,旧名已改名)。曾误判为「不产出 thinking」,实为字段名问题。 reasoning_effort支持 {xhigh, medium, low} 三种。
--served-model-name qwen3.8-27b-awq-mtp:客户端使用的 model id
实测性能
- 单流生成:66~69 tok/s(45+ TPS 时体感已经较流畅)
- 4 并发短 prompt 合计:~158 tok/s
- KV cache 总容量:
~638,704 tokens(48 GB 卡 95% 利用率、fp8 压缩后)
- 单请求满 262K 上下文最大并发:
2.44× ≈ 2 个稳定并行(由 vLLM 自动测算),多于2个并发可遭遇 TPS 暴降至个位数
- 长输入 prefill:262K 约 10~30 秒,冷启动时有明显延迟感
- 冷启动(模型权重加载 + CUDA graph capture):约 1~2 分钟
客户端(opencode)配置
- Provider:
qwen-local,npm @ai-sdk/openai-compatible,baseURL http://localhost:8080/v1
- 默认模型:
qwen3.8-27b-awq-mtp
- 模型参数:
tool_call: true,reasoning: true,context: 262144,output: 8192
被排除的备选方案
| 方案 |
结果 |
| llama.cpp Q4_K_M GGUF + 单 slot |
262K 下 49.4 tok/s,但无 vLLM 并发批处理,放弃 |
| OptimizeLLM Qwen3.8-27B-heretic-MTP-FP8 |
实测 48.7 tok/s,MTP 有效,但 FP8 的有效上下文不够 262K |
注意事项
- 若 GPU 显存被其他进程占用,vLLM 可能起不来,
nvidia-smi 先确认 48 GB 基本空闲
- MTP 投机解码是本次 TPS 达标(68 tok/s 单流)的关键;若未来想更稳,可考虑降低
--spec-tokens(如 2)或改用 --spec-method medusa 对比