DCU技术达人
新人贴
海光 DCU BF16 M=1 实测:hipBLASLt 为什么输给 rocBLAS
2026-10-09 21:34:37
22
## 实验摘要 hipBLASLt 提供更灵活的矩阵布局、heuristic 和 epilogue 能力,因此在选择 DCU GEMM 后端时,很容易产生一个直觉: > 对 Decode 的 M=1 GEMM,直接使用 hipBLASLt,至少不应该比传统 rocBLAS 更慢。 本地在海光 DCU gfx936 上对四个真实 BF16 Decode shape 进行了直接测试。hipBLASLt 能够正常编译和执行,但安装环境对每个问题只暴露一个 heuristic,四个 shape 全部落后于当前 rocBLAS 路径。 最明显的 lm_head 形状中: ~~~text hipBLASLt: 4.69 ms rocBLAS: 1.94848 ms 相对性能: 0.415x ~~~ 这份实验说明,库的接口能力和某个固定 shape 上是否拥有高质量 kernel,是两件不同的事。 --- ## 1. 实验问题 长上下文 Decode 中,query 维度通常为 1,大量 Linear 会转化为 M=1 GEMM。 本地 profile 映射出的四类形状为: | 模块 | M | N | K | 每 token 调用数 | |---|---:|---:|---:|---:| | MLP down projection | 5120 | 1 | 17408 | 64 | | GDN output projection | 5120 | 1 | 6144 | 48 | | Attention output projection | 5120 | 1 | 5120 | 16 | | lm_head | 248320 | 1 | 5120 | 1 | 这里采用库调用语义中的 M、N、K 记法。四类 shape 的共同点是 N=1,属于典型的矩阵向量路径。 实验只回答一个问题: ~~~text 在当前 gfx936 软件栈中 hipBLASLt 对这些固定 BF16 M=1 shape 能否直接替代当前 rocBLAS 路径 ~~~ --- ## 2. hipBLASLt 直接测试 hipBLASLt BF16 路径成功编译并运行。对每个问题,当前安装库只返回一个可用 heuristic。 结果如下: | Shape | hipBLASLt | rocBLAS 参考 | hipBLASLt/rocBLAS | |---|---:|---:|---:| | MLP down | 0.40 ms | 0.19424 ms | 0.486x | | GDN out | 0.15 ms | 0.09376 ms | 0.625x | | Attention o_proj | 0.13 ms | 0.09104 ms | 0.700x | | lm_head | 4.69 ms | 1.94848 ms | 0.415x | 四个比值都小于 1,表示 hipBLASLt 更慢。 换成更直观的耗时倍数: | Shape | hipBLASLt 耗时约为 rocBLAS 的 | |---|---:| | MLP down | 2.06 倍 | | GDN out | 1.60 倍 | | Attention o_proj | 1.43 倍 | | lm_head | 2.41 倍 | 这不是几个百分点的波动,而是明确的 kernel 质量差距,因此没有继续接入完整服务。 --- ## 3. rocBLAS 是否还有隐藏的大幅优化 为了确认参考路径并非随意选择,本地还对相同四类 M=1 问题运行了 rocBLAS/Tensile solution tune,并用三组 baseline/override 交错比较。 ### 3.1 MLP down ~~~text baseline median: 0.194720 / 0.194400 / 0.194240 ms override median: 0.193600 / 0.191840 / 0.190720 ms pair speedup: 1.0058x / 1.0133x / 1.0185x median speedup: 1.0133x output: exact ~~~ 强制 solution 确实更换了 kernel,但中位收益只有 1.33%,没有形成结构性提升。 ### 3.2 GDN out ~~~text pair speedup: 0.9250x / 1.1187x / 1.0121x median speedup: 1.0121x ~~~ 日志显示 baseline 与 override 最终使用相同 Tensile kernel。这里的中位差异更接近共享环境波动,而不是新 solution 的收益。 ### 3.3 Attention o_proj ~~~text pair speedup: 1.0327x / 0.9458x / 1.0305x median speedup: 1.0289x checksum exact: false ~~~ 三组结果同时出现回退和提升,输出 checksum 也发生变化,不能作为稳定候选。 ### 3.4 lm_head ~~~text pair speedup: 1.0001x / 1.0071x / 1.0016x median speedup: 1.0012x ~~~ baseline 与 override 使用相同 kernel,结果基本中性。 --- ## 4. 为什么“更现代的库”不保证更快 ### 4.1 后端能力取决于 shape 覆盖 hipBLASLt 的优势需要具体 heuristic 和 kernel 支撑。接口支持 BF16、布局和 epilogue,不代表安装库对每个 N=1 shape 都拥有成熟实现。 ### 4.2 M=1 与大 GEMM 是不同问题 大 GEMM 可以用更大的 tile 和更高并行度摊销调度成本。N=1 时,问题更接近权重流式读取和归约: - 可用并行维度更少; - tile 选择空间不同; - kernel launch 与 reduction 占比更高; - 大 GEMM 上优秀的 heuristic 未必适合 GEMV。 ### 4.3 默认 rocBLAS 路径可能已经命中专用解 当前 rocBLAS/Tensile 参考在四个 shape 上都明显领先直接 hipBLASLt。后续 tune 又只找到约 0%-1.3% 的稳定空间,说明这些 M=1 问题已经命中相对成熟的实现。 ### 4.4 heuristic 数量本身是一条信号 本地 hipBLASLt 对每个问题只暴露一个 heuristic。没有第二个可比较候选时,继续扫 workspace 或手工猜测 ID 缺乏证据基础。 --- ## 5. 如何公平比较两个 GEMM 后端 建议至少固定: 1. 完全相同的 M、N、K 和转置语义; 2. 相同 BF16 输入与 FP32 accumulation 约束; 3. 相同输出布局; 4. 相同 warmup 和 device event 计时; 5. 相同进程状态; 6. 输出 checksum 或逐元素误差; 7. 实际选中的 kernel 名称; 8. heuristic 数量和 workspace 大小。 只比较 API 调用耗时而不记录最终 kernel,很难判断差异来自库、heuristic 还是布局转换。 --- ## 6. 对海光 DCU 后端选型的启示 这组结果对海光 DCU 开发者最直接的价值,不是判断哪个库“总体更强”,而是提醒后端选择必须绑定实际 DTK 版本、gfx936 库文件和目标 shape。 在海光 DCU 上评估 Linear 后端时,建议记录: - 当前安装库实际返回了多少个 heuristic; - 最终命中的 Tensile 或 hipBLASLt kernel; - 真实 M=1 shape,而不是只测规则的大矩阵; - 是否包含布局转换和 workspace 成本; - 相同 BF16 语义下的输出 checksum。 这样得到的是“当前海光 DCU 软件栈上这个 shape 应选谁”,而不是脱离环境比较 API 名称。 ## 7. 实验结论 在本地 gfx936 软件栈中,直接 hipBLASLt BF16 M=1 路径对四个真实 Decode shape 的相对性能为: ~~~text MLP down: 0.486x GDN out: 0.625x Attention out: 0.700x lm_head: 0.415x ~~~ 四项全部慢于当前 rocBLAS 参考。进一步对 rocBLAS solution 进行 tune,也没有发现稳定的大幅空间。 因此,针对这组 shape,更可靠的结论是: > 不能按库名选择后端,必须按目标 shape 和当前软件栈实测。 hipBLASLt 仍可能在大 GEMM、不同布局、不同 epilogue 或其他版本的软件栈上占优;本文只否定“当前环境下直接替换这四个 M=1 BF16 shape”这一具体方案。 --- 本文数据来自本地固定 gfx936 环境。表中的 rocBLAS 与 hipBLASLt 时间绑定于对应 shape、dtype 和安装库版本,不应外推为两个库在所有工作负载上的统一排名。
全部评论(0)
只看楼主
暂无数据
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据