28. 时延估算未按输入dtype取算力: Cube恒用BF16/AIV恒用fp32, 需dtype感知速率表 #28

Closed
opened 2026-09-04 08:17:34 +00:00 by admin · 1 comment
Owner

问题确认: 时延估算没有按输入 dtype 选算力

现场 (代码)

  • Cube: 所有分支 t_mmad = flops / spec.q16, q16 恒为 BF16 486TFLOPS/32 —— fp16/bf16 正确, 但 fp32/tf32(更慢)、fp8/fp4(更快, 白皮书: FP8/MXFP8/HiF8=2x FP16, MXFP4=4x FP16)全按 BF16 计。
  • AIV: spec.q_aivaiv_fp32_per_cycle=128 推出, fp32 元素速率写死; K=1 逐元素乘 (special.py) 输入是 bf16 却按 fp32 速率算。
  • 平衡点 R16 同理只对 16bit。

数值例证 (result_recommend.csv)

special_k1_b64: B=64 M=8192 N=512 K=1, bf16 → t_mmad 列 19.86us = B*MN/Q_AIV_fp32(13.5T 元素/s); bf16 向量单元按 2x 通量应为 ≈9.93us。

建议修复 (估算时延一律按输入 dtype 取算力)

精度 Cube 因子(相对BF16) AIV 元素通量因子(相对fp32) 依据
fp16/bf16 1.0 2.0 白皮书: FP16/BF16 同一档
fp32/tf32 0.5 (假设, 待实测标定) 1.0 950 白皮书表述"FP16与FP32单核较上代+100%"未给出同代比值; 按 DaVinci 惯例 FP32=1/2
fp8/int8 2.0 4.0 白皮书: FP8=2x FP16; INT8 假设同 FP8
fp4 4.0 8.0 白皮书: MXFP4=4x FP16 (fp4 假设同 MXFP4, 待标定)

A/B dtype 不一致时按两者中"更慢"的取因子; StreamK 归约是对 fp32 部分和求和, AIV 仍按 fp32 通量(不变)。入口条件的 R16 也按 dtype 缩放。数值表为模型假设项, 需 msProf 实测标定 (同 #26 风格)。

## 问题确认: 时延估算没有按输入 dtype 选算力 ### 现场 (代码) - Cube: 所有分支 `t_mmad = flops / spec.q16`, q16 恒为 **BF16** 486TFLOPS/32 —— fp16/bf16 正确, 但 fp32/tf32(更慢)、fp8/fp4(更快, 白皮书: FP8/MXFP8/HiF8=2x FP16, MXFP4=4x FP16)全按 BF16 计。 - AIV: `spec.q_aiv` 由 `aiv_fp32_per_cycle=128` 推出, **fp32 元素速率写死**; K=1 逐元素乘 (special.py) 输入是 bf16 却按 fp32 速率算。 - 平衡点 R16 同理只对 16bit。 ### 数值例证 (result_recommend.csv) special_k1_b64: B=64 M=8192 N=512 K=1, bf16 → t_mmad 列 19.86us = B*MN/Q_AIV_fp32(13.5T 元素/s); bf16 向量单元按 2x 通量应为 ≈9.93us。 ### 建议修复 (估算时延一律按输入 dtype 取算力) | 精度 | Cube 因子(相对BF16) | AIV 元素通量因子(相对fp32) | 依据 | |---|---|---|---| | fp16/bf16 | 1.0 | 2.0 | 白皮书: FP16/BF16 同一档 | | fp32/tf32 | 0.5 (假设, 待实测标定) | 1.0 | 950 白皮书表述"FP16与FP32单核较上代+100%"未给出同代比值; 按 DaVinci 惯例 FP32=1/2 | | fp8/int8 | 2.0 | 4.0 | 白皮书: FP8=2x FP16; INT8 假设同 FP8 | | fp4 | 4.0 | 8.0 | 白皮书: MXFP4=4x FP16 (fp4 假设同 MXFP4, 待标定) | A/B dtype 不一致时按两者中"更慢"的取因子; StreamK 归约是对 fp32 部分和求和, AIV 仍按 fp32 通量(不变)。入口条件的 R16 也按 dtype 缩放。数值表为模型假设项, 需 msProf 实测标定 (同 #26 风格)。
Author
Owner

修复 commit: b9e07ed

落地:

  1. hardware/ascend950pr.py: 新增 CUBE_DTYPE_FACTOR / AIV_DTYPE_FACTOR 速率表 + q_cube(dtype_a,dtype_b) / aiv_elem_rate(dtype) / aiv_elem_rate_fp32 方法。Cube: fp16/bf16=1x(基准486T), fp8/fp8_*2=2x(白皮书FP8=2xFP16), fp4=4x(白皮书MXFP4=4xFP16), fp32/tf32=0.5x与int8=2x、fp4普通档=4x 标注为假设待实测标定; AIV 逐元素: fp16/bf16 2x, int8/fp8 4x, fp4 8x (相对fp32基准, 假设待标定);
  2. 全链路替换: 各分支 t_mmad/t_comp_chunk/drain/尾轮决策主导项、MergeBatch beats 阈值 T_comp、StreamK θ_c 均改 q_cube(输入dtype); K=1 special t_compute 改 aiv_elem_rate(dtype); 混精度 A/B 取较慢侧 (models.BmmCase.dtype_in);
  3. StreamK 归约 AIV 侧保持 fp32 (部分和为 fp32, 正确行为) —— 已在代码注释说明;
  4. R16 平衡点按新表对全 dtype 不变 (因子与元素字节互成反比), 入口条件沿用并注释;
  5. 新增回归: fp32/fp8 Cube 时延相对 bf16 为 2x/0.5x; K=1 fp32 AIV 时延 = bf16 的 2 倍。

验证: 单元测试 49/49; 压力回归 10000 例 0 异常; demo 44 例全 bf16 时延数值不变 (仅列口径/输出落点变化见 #30)。

修复 commit: b9e07ed 落地: 1. hardware/ascend950pr.py: 新增 CUBE_DTYPE_FACTOR / AIV_DTYPE_FACTOR 速率表 + q_cube(dtype_a,dtype_b) / aiv_elem_rate(dtype) / aiv_elem_rate_fp32 方法。Cube: fp16/bf16=1x(基准486T), fp8/fp8_*2=2x(白皮书FP8=2xFP16), fp4=4x(白皮书MXFP4=4xFP16), fp32/tf32=0.5x与int8=2x、fp4普通档=4x 标注为假设待实测标定; AIV 逐元素: fp16/bf16 2x, int8/fp8 4x, fp4 8x (相对fp32基准, 假设待标定); 2. 全链路替换: 各分支 t_mmad/t_comp_chunk/drain/尾轮决策主导项、MergeBatch beats 阈值 T_comp、StreamK θ_c 均改 q_cube(输入dtype); K=1 special t_compute 改 aiv_elem_rate(dtype); 混精度 A/B 取较慢侧 (models.BmmCase.dtype_in); 3. StreamK 归约 AIV 侧保持 fp32 (部分和为 fp32, 正确行为) —— 已在代码注释说明; 4. R16 平衡点按新表对全 dtype 不变 (因子与元素字节互成反比), 入口条件沿用并注释; 5. 新增回归: fp32/fp8 Cube 时延相对 bf16 为 2x/0.5x; K=1 fp32 AIV 时延 = bf16 的 2 倍。 验证: 单元测试 49/49; 压力回归 10000 例 0 异常; demo 44 例全 bf16 时延数值不变 (仅列口径/输出落点变化见 #30)。
admin closed this issue 2026-09-04 08:26:35 +00:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/matmul-analysis#28
No description provided.