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 上限内安全 |
| 首次 forward | 12.9~25.5s | 4 卡 + 缓存最优 |
| 生成速度 | 0.93~1.12 tok/s | 单序列贪婪解码 |
| 生成正确性 | ✅ "Paris" / "2" | 两个 prompt 均正确 |
| INT8 vs BF16 速度 | 无差异 | 单 token 访存瓶颈 |
| 项目 | 值 |
|---|---|
| 集群 | 某国产超算集群(超算互联网,某地区) |
| 加速器 | 海光 BW1000 DCU,gfx936,8 卡/节点,64GB/卡 |
| 工具链 | DTK 26.04 / HIP 6.3 / torch 2.9.0 |
| Python | 3.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 | 已脱敏作业记录 |
| 路线 | 结论 | 根因 |
|---|---|---|
| SGLang | 16 次全 FAILED | aiter → Triton 不可用 |
| vLLM + SparkInfer | 不可移植 | 需要 CUDA SM90+ / 硬件 FP8 |
| transformers 原生 kernel | DeepGEMM + finegrained-fp8 | CUDA-only / Triton 依赖 |
| bitsandbytes INT8 | 无 algo | hipBLASLt 无 gfx936 INT8 |
| vLLM pypi 0.27.1 | Triton 不可用 | vLLM 依赖 Triton runtime |
核心思路:在 transformers 的 finegrained_fp8 模块加载前,用 monkey-patch 替换全部 7 处 kernel 调用点为纯 PyTorch 软件反量化。
7 处补丁覆盖(finegrained_fp8.py 全部 kernel 调用点)
| # | 位置 | 替换 |
|---|---|---|
| 1 | finegrained_fp8_linear (L196) | dequant + F.linear |
| 2 | fp8_linear 分派器 (L211) | 短路 DeepGEMM 探测 |
| 3 | deepgemm_fp8_fp4_linear | 兜底 |
| 4 | FP8Linear.forward (attention q/k/v/o) | dequant + F.linear(带缓存) |
| 5 | FP8GroupedLinear.forward (attention o_a_proj) | per-group dequant + torch.bmm |
| 6 | FP8Experts.linear (eager experts) | FP4→INT8 requant + _int_mm |
| 7 | FP8ExpertsInterface 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.1 单元测试(全部通过)
| 测试 | 内容 | 结果 | job |
|---|---|---|---|
| TEST A–G | FP8/FP4 反量化正确性(16 项) | ALL PASSED | 已脱敏 |
| TEST H–I | FP4→INT8 requant + int8_expert_linear | PASS (1.4~1.44%) | 已脱敏 |
| TEST J | 合成 FP8Experts 端到端 | PASS (2.026%) | 已脱敏 |
5.2 端到端验证(probe_e2e)
| job | 状态 | 说明 |
|---|---|---|
| 已脱敏作业 | FAILED | meta tensor → to() 失败 |
| 已脱敏作业 | FAILED | torch.bmm dtype 不匹配 |
| 已脱敏作业 | FAILED | quantize scale 方向反了 |
| 已脱敏作业 | FAILED | FP4 sign 偏移缺失 |
| 已脱敏作业 | ✅ PASSED | rel_err=12.315%, 7 补丁全部确认生效 |
5.3 DSV4 推理运行记录
| job | 配置 | 加载 | 显存/卡 | Forward | 生成速度 | 结果 |
|---|---|---|---|---|---|---|
| 已脱敏作业 | 8-GPU, 默认 grouped_mm | 1332s | 16.6~22.0 GB | ❌ FP8GroupedLinear kernel 加载失败 | FAILED | |
| 已脱敏作业 | 8-GPU, INT8, eager | 1344s | 16.6~22.0 GB | 25.5s | 0.93~1.03 tok/s | ✅ 首次成功 |
| 已脱敏作业 | 8-GPU, INT8, config fix | 1524s | 16.6~22.0 GB | 23.0s | 0.95~1.05 tok/s | ✅ |
| 已脱敏作业 | 4-GPU, INT8, 缓存 | 627s | 33.2~38.7 GB | 12.9s | 1.04~1.12 tok/s | ✅ 最优 |
| 已脱敏作业 | 8-GPU, BF16 experts | 1610s | 16.6~22.0 GB | 21.6s | 1.00~1.03 tok/s | ✅ |
| 已脱敏作业 | 8-GPU, BF16 experts | 1166s | 16.6~22.0 GB | 21.7s | 1.01~1.07 tok/s | ✅ |
5.4 A/B 对照:INT8 vs BF16 experts
| 路径 | Forward | Gen 1 | Gen 2 |
|---|---|---|---|
| INT8 experts (已脱敏作业) | 23.0s | 0.95 tok/s | 1.05 tok/s |
| BF16 experts (已脱敏作业) | 21.6s | 1.00 tok/s | 1.03 tok/s |
| BF16 experts (已脱敏作业) | 21.7s | 1.01 tok/s | 1.07 tok/s |
| 结论:单 token 解码下 INT8 与 BF16 速度无差异(访存瓶颈,非算力瓶颈) | |||
5.5 生成正确性验证
5.6 Qwen3-30B-A3B 对比测试
| 模型 | 参数量 | 活跃参数 | 卡数 | 速度 |
|---|---|---|---|---|
| DSV4-Flash | 154.5B | ~20B | 4 | ~1 tok/s |
| Qwen3-30B-A3B (BF16) | 30.5B | 3B | 1 | 4~12 tok/s |
| Qwen3-30B-A3B (MXFP4) | 30.5B | 3B | 1 | rel_err 9.46%, cos_sim 0.9956 |
| 尝试 | 结果 | 说明 |
|---|---|---|
| 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: 内部镜像路径已隐藏
| # | 教训 | 详情 |
|---|---|---|
| 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 预编译包是唯一路径。 |
DSV4 各配置生成速度对比
* Blackwell 参考: DSV4 投机解码 K5 217.8 tok/s(交接文档 §8)。我们无投机解码、无融合 kernel、attention 软件反量化。
| 优先级 | 方向 | 预期收益 | 难度 |
|---|---|---|---|
| 高 | 投机解码(小模型 draft + DSV4 verify) | 5~50× 速度提升 | 中 |
| 高 | 修复 vLLM 平台检测,跑 vLLM 推理 | 2~3×(PagedAttention + 连续批处理) | 中 |
| 中 | mxfp4-gfx936 bitcast 反量化移植到纯 PyTorch | expert 反量化加速 | 低 |
| 中 | DSV4 精度门(PPL + token 匹配 vs BF16 参考) | 量化精度量化 | 中 |
| 低 | pipeline parallelism(GPU 间流水线) | 1.5~2× | 中 |
| 低 | 自定义 HIP kernel(fused dequant + matmul) | 2~3× | 高 |
| 编号 | 内容 | 状态 |
|---|---|---|
| 已脱敏 | 硬件能力探测(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 |