
单张 AMD MI300X 跑 DeepSeek V4 Flash:一份可直接抄的生产部署方案
304B 参数模型、无需量化、168.6 tok/s 单流解码:一个开源仓库把 DeepSeek V4 Flash 在单张 MI300X 上的生产级部署配置全部开源,含镜像锁定、补丁和调优表
原文来源:GitHub - ryanzhou/deepseek-v4-flash-mi300x — 在单张 AMD MI300X 上生产级运行 DeepSeek V4 Flash 的完整配置:digest 锁定的 vLLM ROCm 镜像、SHA-256 校验的补丁文件、AITER 调优表,实测 168.6 tok/s 解码吞吐。
DeepSeek V4 Flash 是 304B 参数的 MoE 模型,官方 vLLM 推荐配置主要面向 NVIDIA 和较新的 AMD 硬件。但 MI300X 有个独特的优势:192GB 的 HBM3 显存(是 H100 SXM5 的 2.4 倍),标价大约只要 H100 的一半。对 304B 的 checkpoint 来说,这个容量让"单卡部署"成为可能——整个模型直接放进显存,不需要 PCIe 权重流式传输,也不需要层卸载。
问题在于,要把模型在 MI300X 上"跑得对、跑得快",需要解决一串只有踩过坑才知道的问题。GitHub 用户 ryanzhou 把自己生产环境的整套配置开源了,本文把它拆解成可以直接照抄的步骤。
为什么 MI300X 上跑 V4 Flash 有坑
先理解要解决的障碍,才知道这份配置的价值:
- FP8 格式不兼容:MI300X(CDNA3 架构)实现的是 AMD/Graphcore 的 FNUZ 变体 E4M3,而 MI325X 及更新硬件用的是 OCP 标准 FP8。假设 OCP 语义的 kernel 跑在 MI300X 上,scale 域可能差两倍。所以正确性优先于性能。
- 官方 recipe 未覆盖:vLLM 官方配方覆盖 NVIDIA 和 MI325X/MI355X,但没有针对 0731 checkpoint 的单 MI300X 生产配置。
- 缺失的 kernel 快路径:AITER 对 gfx942 的某些 GEMM 形状缺少调优表,稀疏 MLA 解码还有 HIP-graph 风险,MoE 高并发路由有 bug,CPU-KV 加载路径缺跨流同步(上游 issue #47282 记录了,修复 PR #47291 一直没合并)。
这个仓库做的就是把这些修复收集起来、锁定版本、逐字节验证。
—— 广告 ——
实测性能
在锁定的技术栈上(vLLM ROCm nightly 0.26.1rc1.dev229+g124154a88.rocm723、AITER 0.1.19):
| 指标 | 结果 |
|---|---|
| 单流解码(DSpark-7 中位数) | 168.6 tok/s |
| 调优后 prefill | 约 7.9-8.5K tok/s |
| 8 并发流 | 聚合 542 tok/s,单流中位 90.3 tok/s |
| 64 流突发 | 聚合 830 tok/s,无 OOM、无引擎错误 |
| 上下文长度 | 256K 已验证(架构支持 1M) |
| 显存占用 | 156.67 GiB,无额外量化或权重卸载 |
权重按原样运行(as shipped),不需要额外量化。混合 KV 策略:20GB GPU 上的 fp8_ds_mla 缓存 + 96GiB CPU 原生卸载层,用于被逐出的前缀缓存条目。
部署步骤
1. 主机前置条件:一张 MI300X(gfx942,304 CUs,约 192GiB HBM)、可用的 AMD 内核驱动、较新的 Docker Compose、约 235GiB RAM(给 CPU KV 层用)、约 500GB 磁盘(模型缓存就约 156GB)。
2. 拉取锁定的运行时和模型。镜像用 digest 锁定(确保每次拉到的都是同一个镜像),模型也锁定 revision:
VLLM_IMAGE='vllm/vllm-openai-rocm@sha256:e68d18b2ba50298661bfc49baf01158fbf036645c2362cccf3e8a7a79fe6c69a'
MODEL='deepseek-ai/DeepSeek-V4-Flash-0731'
REVISION='7872f01b1d1fe23eabc4c98b48bffcef5a386062'
docker pull "$VLLM_IMAGE"
docker run --rm --entrypoint hf \
-v /root/.cache/huggingface:/root/.cache/huggingface \
"$VLLM_IMAGE" download "$MODEL" --revision "$REVISION"3. 准备文件:
cp Caddyfile.example Caddyfile # 设置 hostname、email、远程 IP CIDR
mkdir -p aiter-cache crash-dumps
chmod +x vllm-entrypoint.sh
sha256sum -c SHA256SUMS # 首次启动前校验所有补丁文件4. 启动:用仓库里的 compose.yaml 起服务。运行配置要点:--trust-remote-code 加 DeepSeek V4 的 tokenizer/reasoning/tool parser;fp8_ds_mla KV 缓存(UE8M0 块缩放 FP8,256 token 块);VLLM_ROCM_USE_AITER=1 + --moe-backend triton(Triton OGS 处理分组 MXFP4 专家,AITER 处理 attention 和 dense 线性层);DSpark-7 投机解码(概率性起草 + 块拒绝);2048 token 调度预算和 1024 token 长 prefill 上限,防止冷 prompt 卡住其他流。Caddy 做 IP 白名单的 HTTPS 反代。
5. 验证正确性:不要只看吞吐。验证套件包含两轮工具调用 fixtures、BFCL 子集(74-76/90 精确调用)、OpenCode tool-schema 检查、380K token 的 needle recall(原生和 DSpark 两条路径都测)。冷 prefill 和缓存 prefill 可能走不同的浮点路径,所以要都测。
仓库结构速览
.
├── compose.yaml # 生产栈(vLLM ROCm + Caddy),digest 锁定
├── Caddyfile.example
├── vllm-entrypoint.sh # 启动前清理 /dev/shm 里过期的 CPU-KV mmap
├── SHA256SUMS # 每个运行时工件的 SHA-256 校验
├── patches/ # 逐字节一致的生产补丁 + 与上游的 diff
└── tuning/ # gfx942 的 AITER A8W8 blockscale 调优表
给你的实操建议
- 镜像和模型都锁 revision:digest 锁定保证复现性,这是生产环境最重要的习惯。
- SHA-256 校验所有补丁:一行命令,杜绝"文件被改过但没人知道"。
- 先验证正确性再调性能:这个仓库的哲学是 FP8 正确性第一,性能调优在其后——顺序反了会得到"快但错"的结果。
- 没有 MI300X 也能抄思路:镜像锁定 + 补丁管理 + 校验和的部署模式,适用于任何 GPU 推理服务的生产化。
这个方案的定位很明确:给有 AMD 单卡(或想用 MI300X 省一半硬件成本)的团队一套"开箱即用、可复现"的生产配置。模型本身 MIT 许可,仓库 Apache-2.0,配置、补丁、调优表全部可审计。
© 2026 四月
原文链接:https://www.aprilzz.com/tutorials/deepseek-v4-flash-mi300x
相关文章
vLLM 生产部署完整指南:从 Docker 到 K8s 的每一步
把 vLLM 从演示级推到生产级:镜像版本锁定、GPU 内存调优、前缀缓存、KEDA 自动扩缩、监控告警,一套可以直接抄的完整配置
Caddy 反向代理从入门到实战:一行配置搞定 HTTPS
从零开始学习 Caddy 反代的完整教程:单站点配置、多服务路由、Docker 部署、生产环境最佳实践,告别 Nginx 的繁琐配置。
Docker Compose 生产环境部署完整指南:从开发到上线的每一步
从 Dockerfile 编写到 Compose 编排,从多阶段构建到健康检查,从日志管理到安全加固——一份面向开发者的 Docker Compose 生产部署实战教程