← 返回报告归档

🧠 DeepSeek-V4-Flash-0731 海光 DCU 推理适配测试报告

纯 PyTorch 软件反量化路线 · 从兼容性阻塞到功能验证
📅 2026-08-07 ~ 2026-08-12 🖥️ 某国产超算集群 · 海光 BW1000 DCU · DTK 26.04 📊 模型: DeepSeek-V4-Flash-0731 (154.5B) / Qwen3-30B-A3B (30.5B)
1 最终结论

DSV4-Flash-0731 (154.5B 参数) 在海光 DCU gfx936 上以纯 PyTorch 软件反量化方式成功运行,生成结果正确,速度约 1 tok/s。

指标结果说明
模型加载627~1524s(10~25 min)取决于节点 I/O 性能
显存占用16.6~22.0 GB/卡 (8卡) / 33~39 GB/卡 (4卡)64GB 上限内安全
首次 forward12.9~25.5s4 卡 + 缓存最优
生成速度0.93~1.12 tok/s单序列贪婪解码
生成正确性 "Paris" / "2"两个 prompt 均正确
INT8 vs BF16 速度无差异单 token 访存瓶颈
2 环境与硬件能力边界
项目
集群某国产超算集群(超算互联网,某地区)
加速器海光 BW1000 DCU,gfx936,8 卡/节点,64GB/卡
工具链DTK 26.04 / HIP 6.3 / torch 2.9.0
Python3.12 / transformers 5.14.1

硬件能力实测(已脱敏作业记录 等)

能力结论证据
FP8 存储 + .to(bf16)已脱敏作业记录
torch._scaled_mm(硬件 FP8) 拒绝 gfx936需要 SM89+/MI300+
Triton 3.7.1 hipDrvLaunchKernelEx 缺失已脱敏作业记录
Triton 3.3.0 ConvertTritonAMDGPUToLLVM 拒绝 gfx936新版测试
torch._int_mm(硬件 INT8) 比 BF16 快 18%2048³: 0.055ms vs 0.067ms
torch._int_mm 小 M (≤16) RuntimeError需 pad 到 17
bitsandbytes INT8 hipBLASLt 无 gfx936 algo已脱敏作业记录
3 兼容性失败路径与原因
路线结论根因
SGLang16 次全 FAILEDaiter → Triton 不可用
vLLM + SparkInfer不可移植需要 CUDA SM90+ / 硬件 FP8
transformers 原生 kernelDeepGEMM + finegrained-fp8CUDA-only / Triton 依赖
bitsandbytes INT8无 algohipBLASLt 无 gfx936 INT8
vLLM pypi 0.27.1Triton 不可用vLLM 依赖 Triton runtime
4 编译过程与主要技术方案

核心思路:在 transformers 的 finegrained_fp8 模块加载前,用 monkey-patch 替换全部 7 处 kernel 调用点为纯 PyTorch 软件反量化。

7 处补丁覆盖(finegrained_fp8.py 全部 kernel 调用点)

#位置替换
1finegrained_fp8_linear (L196)dequant + F.linear
2fp8_linear 分派器 (L211)短路 DeepGEMM 探测
3deepgemm_fp8_fp4_linear兜底
4FP8Linear.forward (attention q/k/v/o)dequant + F.linear(带缓存)
5FP8GroupedLinear.forward (attention o_a_proj)per-group dequant + torch.bmm
6FP8Experts.linear (eager experts)FP4→INT8 requant + _int_mm
7FP8ExpertsInterface grouped_mm/batched_mm委托回 eager forward

关键设计决策

决策说明
experts_implementation="eager"保留原始逐 expert 循环,让 FP8Experts.linear 补丁被调用
INT8 硬件路径FP4→INT8 requant → torch._int_mm 真张量核心(比 BF16 快 18%)
M≤16 零行补齐_int_mm 要求 M>16,pad 到 17 行再裁回(数学精确)
惰性缓存按 data_ptr() 缓存 INT8 权重,只有被路由的 expert 才转换
attention 权重缓存首 token 反量化后缓存 BF16 权重,后续复用
USE_HUB_KERNELS=0禁用 RMSNorm 的 hub kernel 装饰
5 测试数据

5.1 单元测试(全部通过)

测试内容结果job
TEST A–GFP8/FP4 反量化正确性(16 项)ALL PASSED已脱敏
TEST H–IFP4→INT8 requant + int8_expert_linearPASS (1.4~1.44%)已脱敏
TEST J合成 FP8Experts 端到端PASS (2.026%)已脱敏

5.2 端到端验证(probe_e2e)

job状态说明
已脱敏作业FAILEDmeta tensor → to() 失败
已脱敏作业FAILEDtorch.bmm dtype 不匹配
已脱敏作业FAILEDquantize scale 方向反了
已脱敏作业FAILEDFP4 sign 偏移缺失
已脱敏作业✅ PASSEDrel_err=12.315%, 7 补丁全部确认生效

5.3 DSV4 推理运行记录

job配置加载显存/卡Forward生成速度结果
已脱敏作业8-GPU, 默认 grouped_mm1332s16.6~22.0 GB❌ FP8GroupedLinear kernel 加载失败FAILED
已脱敏作业8-GPU, INT8, eager1344s16.6~22.0 GB25.5s0.93~1.03 tok/s✅ 首次成功
已脱敏作业8-GPU, INT8, config fix1524s16.6~22.0 GB23.0s0.95~1.05 tok/s
已脱敏作业4-GPU, INT8, 缓存627s33.2~38.7 GB12.9s1.04~1.12 tok/s✅ 最优
已脱敏作业8-GPU, BF16 experts1610s16.6~22.0 GB21.6s1.00~1.03 tok/s
已脱敏作业8-GPU, BF16 experts1166s16.6~22.0 GB21.7s1.01~1.07 tok/s

5.4 A/B 对照:INT8 vs BF16 experts

路径ForwardGen 1Gen 2
INT8 experts (已脱敏作业)23.0s0.95 tok/s1.05 tok/s
BF16 experts (已脱敏作业)21.6s1.00 tok/s1.03 tok/s
BF16 experts (已脱敏作业)21.7s1.01 tok/s1.07 tok/s
结论:单 token 解码下 INT8 与 BF16 速度无差异(访存瓶颈,非算力瓶颈)

5.5 生成正确性验证

Prompt: "The capital of France is"
→ " Paris. The capital of Spain is Madrid. The capital of Italy is Rome. The capital of Germany is Berlin. The"
24 tokens / 25.3s = 0.95 tok/s
Prompt: "1 + 1 ="
→ " 2, 2 + 1 = 3, 3 + 1 = 4, 4 +"
24 tokens / 22.9s = 1.05 tok/s

5.6 Qwen3-30B-A3B 对比测试

模型参数量活跃参数卡数速度
DSV4-Flash154.5B~20B4~1 tok/s
Qwen3-30B-A3B (BF16)30.5B3B14~12 tok/s
Qwen3-30B-A3B (MXFP4)30.5B3B1rel_err 9.46%, cos_sim 0.9956
6 适配补丁演进过程
08-07 ~ 08-09
硬件能力探测 + 反量化单元测试
FP8/Triton/scaled_mm 实测 → 全部否定。TEST A–G 反量化 16 项全过。
08-10 上午
INT8 expert 测试 + 全量端到端首跑 (已脱敏作业)
TEST H–J 全过。但真实模型 forward 撞 kernel:默认 grouped_mm 绕开补丁。
08-10 晚上
源码审计 + 补全 7 处补丁
读 transformers 5.14.1 源码,确认 4 处 kernel 调用点 + 周边入口。补 FP8GroupedLinear + experts 接口映射。
08-11 凌晨
首次成功推理 (已脱敏作业) + 4 卡优化 (已脱敏作业)
8 卡 0.93~1.05 tok/s → 4 卡 + 缓存 1.04~1.12 tok/s,显存 33~39 GB/卡。
08-11 下午
probe 端到端验证 (已脱敏作业) + A/B 对照
修复 4 个 bug(meta→to_empty、dtype、scale 方向、FP4 sign)。端到端误差 12.3%。INT8≈BF16 速度。
08-11 晚上
Qwen3-30B MXFP4 量化对比 + vLLM 移植
MXFP4 首 token 一致 (cos_sim 0.9956)。vLLM 0.11.0 DAS wheel 安装成功,平台检测待修复。
7 vLLM 移植尝试
尝试结果说明
vLLM pypi 0.27.1依赖 Triton runtime,gfx936 不可用
vLLM DAS 0.11.0 (torch 2.9.0)✅ import 成功DAS 预编译 wheel,需 torch 2.9.0
vLLM 源码编译 0.11.0依赖版本链太长(llguidance, xgrammar, outlines_core 等)
MXFP4 SAFE 后端✅ monkey-patch 安装成功dequant_mxfp4 + torch.matmul,纯 PyTorch
平台检测⏳ 待修复vLLM 0.11.0 用 amdsmi 检测 ROCm,DTK 没有此包

DAS vLLM wheel 路径: 内部镜像路径已隐藏
DAS torch 2.9.0 wheel: 内部镜像路径已隐藏

8 经验总结与通用建议
#教训详情
1 合成测试验证不了函数是否被调用 TEST J 手工构造 FP8Experts 实例,绕过了 replace_with_fp8_linear 的类替换。补丁正确但从未执行。必须从 from_pretrained 端验证。
2 脚本末尾必须 exit $rc Python 崩了 bash 继续执行,sacct 显示 COMPLETED。已脱敏作业记录 34 分钟白跑。
3 FP4 nibble 符号陷阱 idx 只取 0-7 忘了加符号偏移 → 负数全变成正数。quantize scale 方向反了 → 权重全量化成 0。两个 bug 各浪费一轮。
4 meta tensor 不能 .to() replace_with_fp8_linear 在 meta 上建模块,必须用 to_empty() 物化。
5 分层验证策略 1 分钟 srun 探针确认假设 → 再提交大作业。避免 22 分钟加载的试错成本。
6 DAS 是唯一可靠的包来源 pypi 的 vLLM/Triton 在 gfx936 上不可用。海光开发者社区 (内部开发者镜像) 的 DAS 预编译包是唯一路径。
9 推理速度对比

DSV4 各配置生成速度对比

8-GPU INT8
0.93~1.05 tok/s
8-GPU BF16
1.00~1.07 tok/s
4-GPU INT8 缓存
1.04~1.12 tok/s
Qwen3-30B BF16 (1-GPU)
3.93~11.95 tok/s

* Blackwell 参考: DSV4 投机解码 K5 217.8 tok/s(交接文档 §8)。我们无投机解码、无融合 kernel、attention 软件反量化。

10 下一步建议
优先级方向预期收益难度
投机解码(小模型 draft + DSV4 verify)5~50× 速度提升
修复 vLLM 平台检测,跑 vLLM 推理2~3×(PagedAttention + 连续批处理)
mxfp4-gfx936 bitcast 反量化移植到纯 PyTorchexpert 反量化加速
DSV4 精度门(PPL + token 匹配 vs BF16 参考)量化精度量化
pipeline parallelism(GPU 间流水线)1.5~2×
自定义 HIP kernel(fused dequant + matmul)2~3×
11 测试记录索引
编号内容状态
已脱敏硬件能力探测(FP8/Triton/scaled_mm)COMPLETED
已脱敏作业torch._int_mm 正确性+性能,bnb INT8 失败COMPLETED
已脱敏反量化单元测试 TEST A–G 全通过COMPLETED
已脱敏INT8 expert 测试首跑——发现 _int_mm M≤16 崩溃FAILED
已脱敏修复后全通过(TEST H/I/J)COMPLETED
已脱敏作业全量端到端首跑:加载成功,forward 失败FAILED
已脱敏作业首次成功推理(8-GPU, INT8)COMPLETED
已脱敏作业config fix 重跑COMPLETED
已脱敏作业4-GPU + 缓存最优COMPLETED
已脱敏作业A/B 对照(BF16 experts)COMPLETED
已脱敏作业probe 端到端验证通过COMPLETED
已脱敏作业Qwen3-30B MXFP4 量化对比COMPLETED
已脱敏作业Qwen3-30B 生成速度测试COMPLETED