在 AMD ROCm DSW 上部署 Qwen3.6-27B-FP8:vLLM、MTP 解码加速与小并发压测

简介: 本文记录一次在 ModelScope DSW AMD GPU 实例上完成的 Qwen3.6-27B-FP8 推理实践。实验重点不是单纯证明模型可以启动,而是围绕 vLLM ROCm 服务、Qwen MTP 投机解码、near-8K 长上下文正确性验证、FP8 KV cache 和小并发 serving 压测,整理一套可复现、可复查、可继续扩展的 AMD GPU 大模型推理 baseline。

摘要

本文记录一次在 ModelScope DSW AMD GPU 实例上完成的 Qwen3.6-27B-FP8 推理实践。实验重点不是单纯证明模型可以启动,而是围绕 vLLM ROCm 服务、Qwen MTP 投机解码、near-8K 长上下文正确性验证、FP8 KV cache 和小并发 serving 压测,整理一套可复现、可复查、可继续扩展的 AMD GPU 大模型推理 baseline。

这轮实验中,我把模型权重和复现资料分开管理:模型权重体积大,可以按需重新下载;脚本、参数、日志摘要、图表和报告体积小,但决定实验能否复现,因此优先保存。最终沉淀了启动脚本、benchmark 脚本、near-8K correctness gate、强制 1024-token decode 对照、小并发压测结果,以及 GitHub 和 Hugging Face Space 两个公开入口。

核心结论如下:

  • vLLM ROCm 服务可用于 Qwen3.6-27B-FP8 的研究型部署;
  • near-8K MTP gate 和 FP8 KV cache gate 均有通过记录;
  • 在强制 1024-token decode 口径下,baseline median decode throughput 为 21.46 tok/s,MTP t4 为 54.48 tok/s,约 2.54x;
  • 在 concurrency=1/2/4 的小并发压测中,MTP t4 aggregate completion throughput 相对 baseline 约为 2.52x / 2.79x / 2.58x;
  • 当前结果适合作为 ROCm/vLLM/MTP 推理优化 baseline,不应被解读为生产 serving benchmark 或跨硬件排名。

公开入口:

为什么选择 Qwen3.6-27B-FP8

Qwen3.6-27B-FP8 适合做 AMD ROCm 大模型推理实践,原因有三个。

第一,模型规模足够大。27B 级别模型会真实暴露显存、KV cache、prefill、decode 和并发调度问题,不会停留在“启动一个小模型”的演示层面。

第二,FP8 和 MTP 都和推理效率有关。FP8 让显存和带宽压力下降,MTP speculative decoding 则尝试通过一次预测多个 token 来改善 decode-heavy 场景的吞吐。二者都适合在 AMD GPU / ROCm 环境下做工程验证。

第三,vLLM 对 ROCm 的支持正在快速演进。只记录“能不能启动”价值有限,更有意义的是建立 correctness gate 和性能测试脚本,后续可以继续比较不同 ROCm、vLLM、AITER、MTP tokens、KV cache 和量化配置。

实验环境与目录设计

本次实验在 ModelScope DSW AMD GPU 实例上完成,环境摘要如下:

项目 记录
平台 ModelScope DSW AMD GPU
Python 3.12
PyTorch 2.10.0+git...
HIP 7.2.53211
vLLM 0.20.1+rocm721
GPU 单张 AMD GPU,约 192GB 显存
模型 Qwen/Qwen3.6-27B-FP8

目录设计采用“权重和复现资料分离”的方式:

export REPRO_DIR=/mnt/workspace/qwen27b_rocm_mtp_repro_20260525
export MODEL_CACHE=/home/qwen_model_cache
export MODEL_DIR=$MODEL_CACHE/Qwen/Qwen3.6-27B-FP8

其中:

  • MODEL_CACHE 用来放模型权重;
  • REPRO_DIR 用来放脚本、报告、日志摘要、prompt 和图表;
  • 本地备份和 GitHub 仓库不保存模型权重,只保存可复现资料。

这种设计的原则很简单:权重文件体积大,必要时可以重新下载;脚本、参数、日志摘要和报告体积小,但决定实验能否恢复,所以需要优先持久化。

vLLM ROCm 服务启动思路

实验中我使用 vLLM OpenAI API server 作为服务层。baseline 和 MTP 两类服务的启动参数保持尽量一致,只改变 MTP 相关配置,便于对照。

baseline 启动脚本的核心思路如下:

python3 -m vllm.entrypoints.openai.api_server \
  --model "$MODEL_DIR" \
  --served-model-name qwen36-27b-fp8-baseline \
  --host 0.0.0.0 \
  --port 8000 \
  --trust-remote-code \
  --dtype auto \
  --max-model-len 8192 \
  --max-num-seqs 8 \
  --gpu-memory-utilization 0.90 \
  --disable-uvicorn-access-log

MTP t4 服务在 baseline 基础上增加 speculative decoding 配置:

python3 -m vllm.entrypoints.openai.api_server \
  --model "$MODEL_DIR" \
  --served-model-name qwen36-27b-fp8-mtp-t4 \
  --host 0.0.0.0 \
  --port 8000 \
  --trust-remote-code \
  --dtype auto \
  --max-model-len 8192 \
  --max-num-seqs 8 \
  --gpu-memory-utilization 0.90 \
  --speculative-config '{"model":"qwen_mtp","num_speculative_tokens":4}' \
  --disable-uvicorn-access-log

实际脚本中还包含日志文件、端口检查和恢复说明。启动后先做 /v1/models 和短输出检查,再进入长上下文和性能测试。

正确性验证:near-8K needle gate

性能测试之前必须先做 correctness gate。长上下文测试不能只看模型是否返回 token,而要确认模型能从长文本中取回指定信息。

本次使用 near-8K needle retrieval:构造接近 8K token 的上下文,在其中插入隐藏 key,然后要求模型只返回该 key。只有命中隐藏 key,才认为该配置通过。

关键结果如下:

case prompt tokens total tokens completion tokens 结果
MTP t4 near-8K needle 7857 8002 145 PASS
FP8 KV baseline near-8K 7858 8006 148 PASS
FP8 KV + MTP t4 near-8K 7861 8053 192 PASS

这一步的意义是把“服务能启动”提升到“长上下文语义可验证”。如果没有 correctness gate,后面的吞吐数字就容易失去可信度。

MTP tokens sweep

为了观察 MTP speculative decoding 的收益,我先做了一轮 128-token decode sweep:

配置 median tok/s 相对 baseline
baseline 21.63 1.00x
MTP t1 34.85 1.61x
MTP t2 49.33 2.28x
MTP t3 62.00 2.87x
MTP t4 65.84 3.04x

这一轮说明 MTP 方向有效,但 128-token 生成太短,容易受首 token、调度和请求波动影响。因此我继续做了更严格的强制 1024-token decode 对照。

强制 1024-token decode 对照

强制 1024-token decode 是本轮最干净的单请求性能结果。所有配置都生成完整 1024 completion tokens,避免了“某个配置提前结束导致吞吐虚高”的问题。

配置 repeat median latency median decode tok/s 是否完整 1024
baseline 2 47.73s 21.46 yes
MTP t2 2 24.14s 42.41 yes
MTP t3 2 21.04s 48.68 yes
MTP t4 2 18.80s 54.48 yes

在这个口径下,MTP t4 相对 baseline 的 median decode throughput 约为 2.54x。这是本文最适合引用的性能结论,因为输入、输出长度和测试脚本都更一致。

小并发 serving 压测

单请求加速成立后,我继续做了小并发 serving 对照。测试仍然使用强制 1024-token 输出,观察 MTP t4 在 concurrency=1/2/4 下是否还能保持收益。

配置 concurrency requests success rate aggregate tok/s p50 latency 是否完整 1024
baseline 1 2 1.0 21.51 47.61s yes
baseline 2 2 1.0 37.23 55.00s yes
baseline 4 4 1.0 73.42 55.79s yes
MTP t4 1 2 1.0 54.28 18.87s yes
MTP t4 2 2 1.0 103.73 19.74s yes
MTP t4 4 4 1.0 189.73 20.78s yes

换算后,MTP t4 在 concurrency=1/2/4 下分别约为 2.52x / 2.79x / 2.58x。这说明 MTP 收益不是只存在于孤立单请求中,在小并发场景里仍然能保持方向一致。

FP8 KV cache 观察

FP8 KV cache 在长上下文场景中主要价值是降低 KV cache 显存压力。本轮实验中,FP8 KV 路径可以启动,并且 near-8K gate 有通过记录。

不过在小规模 decode 测试里,FP8 KV baseline 吞吐低于默认 KV 路径。因此我没有把它写成“必然更快”,而是把它作为一个 runtime/kernel tradeoff 来看:它更可能在更长上下文、更高并发或显存压力更大的场景中体现价值,需要后续继续测试。

复现资料与公开入口

为了让实验不是一次性结果,我整理了如下文件:

scripts/
  start_qwen36_27b_fp8_8k_baseline.sh
  start_qwen36_27b_fp8_8k_mtp.sh
  run_mtp_sweep.sh
  run_needle_gate.py
  run_round4_forced_1024_decode.sh
  run_round5_concurrency_serving.sh

reports/
  round2_mtp_sweep_and_8k_gate_20260525.md
  round3_long_decode_and_kv_20260525.md
  round4_forced_1024_decode_20260525.md
  round5_concurrency_serving_20260525.md
  qwen36_27b_rocm_mtp_research_report_20260525.md

publish/gallery/
  qwen36_27b_fp8_rocm_vllm_mtp_gallery.ipynb
  requirements.txt

公开入口如下:

其中 Gallery Notebook 的默认 Cell 不下载模型、不启动完整 vLLM 服务,只做环境探测、实验数据复核、加速比计算、图表生成和复现清单输出。完整 live check 被放在可选 Cell 中,需要手动设置环境变量开启。

边界与下一步

这次实验应被理解为一个可复现的 ROCm/vLLM/MTP 研究 baseline,而不是生产级 serving benchmark,也不是不同硬件之间的排名。

当前结果已经说明:

  • AMD ROCm 环境中可以围绕 Qwen3.6-27B-FP8 建立 vLLM 推理实验链路;
  • MTP 在 decode-heavy 场景中有明确收益;
  • correctness gate 对长上下文实验非常必要;
  • FP8 KV cache 可用,但需要在更长上下文和更高显存压力下继续验证;
  • 小并发 serving 结果支持继续往真实 serving 场景扩展。

下一步计划包括:

  1. 扩展 16K / 32K context correctness gate;
  2. 增加更稳定的并发请求数和输入输出 token 形状;
  3. 比较默认 KV 与 FP8 KV 在长上下文和高并发下的差异;
  4. 引入 AMD Quark 等量化工具做权重量化实验;
  5. 用 llama.cpp / GGUF 路线做工程部署对照,但不把它和 vLLM 直接做同算法性能排名。

对我来说,这轮实验的价值在于把“模型能不能启动”推进到了“如何验证 correctness、如何设计公平 decode benchmark、MTP 在 ROCm 上是否有稳定收益、后续量化和 serving 优化应该从哪里继续”的阶段。这个 baseline 后续可以继续复用,而不是每次都从零开始排查环境和启动参数。

参考资料

目录
相关文章
|
11天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3297 10
|
3天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
1664 5
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
14天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3348 24
|
7天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2390 4
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
26天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23599 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
13天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
2875 3
|
5天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
957 2
|
12天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)

热门文章

最新文章