当前位置:首页 > 逆向工程 > 正文

从 14 PFLOPS 反推:FP4 的 6.2 倍差在哪

约 4370 字 · 预计阅读 11 分钟
一句话总结:B300 的规格里同时给了 FP16 稠密 2.25 PFLOPS 和 FP4 稀疏 14 PFLOPS,两者相差 6.22 倍。理论倍数应该是 8 倍(位宽减 4 倍 × 稀疏 2 倍)。差的 22% 说明至少有一档的口径和标称不一样。

这类规格表最容易被误读的地方,就是拿两个峰值直接相除,得出"性能提升 6 倍"。

实际上 6.22 这个数字本身没错,错的是把它当成"同一个模型上快 6 倍"。

官方给的三个算力数字

先把已知的列清楚:

指标 数值 口径
FP16 / BF16 稠密2.25 PFLOPSdense,不含稀疏
FP4 稀疏14 PFLOPSsparse,含 2:4 结构化稀疏
显存288 GB HBM3e—
带宽8 TB/s—

三个算力相关数字里,只有两个算力。缺的是 FP8 和 FP4 稠密——这两个档位如果给了,就能判断 14 PF 到底怎么来的。

只给"最好看的那个数",是硬件规格表的惯例。 FP4 稀疏是四档里数字最大的,所以放在显眼位置。

算力的理论倍数 8 倍是怎么来的

从 14 PFLOPS 反推:FP4 的 6.2 倍差在哪

图 1:按位宽与稀疏的理论倍数推算,FP4 稀疏应为 18 PF,官方给的是 14 PF

从 FP16 稠密到 FP4 稀疏,中间有两级放大:

第一级:位宽从 16 位降到 4 位,理论上算力 ×4
第二级:从稠密变稀疏(2:4),理论上算力 ×2
合计:×8

这个 4 倍和 2 倍都是"理论值",前提是硬件在每一档都能跑满。

算一下理论值应该是多少:

fp16_dense = 2.25      # PFLOPS
theoretical = {
    "FP8 稠密":  fp16_dense * 2,
    "FP4 稠密":  fp16_dense * 4,
    "FP4 稀疏":  fp16_dense * 8,
}
for k, v in theoretical.items():
    print(f"{k}: {v:.2f} PFLOPS")

actual = 14.0
print(f"\n官方 FP4 稀疏: {actual} PFLOPS")
print(f"理论值:        {theoretical['FP4 稀疏']:.2f} PFLOPS")
print(f"实测/理论 = {actual / theoretical['FP4 稀疏']:.3f}")

输出:

FP8 稠密: 4.50 PFLOPS
FP4 稠密: 9.00 PFLOPS
FP4 稀疏: 18.00 PFLOPS

官方 FP4 稀疏: 14.0 PFLOPS
理论值:        18.00 PFLOPS
实测/理论 = 0.778

18 对 14,差 22%。

实测 6.22 倍:算力缺的 22% 在哪

反推一下:14 PF 稀疏算力,如果稀疏真的是 2 倍,那对应的稠密是 7 PF。

而 FP4 稠密按 4 倍理论应该是 9 PF。

7 对 9,差 22%。 这个差额只能出在两处之一:

要么 FP4 的稠密倍率不是 4 倍。 如果实际是 3.11 倍(7/2.25),那一切都对上了。这意味着 FP4 的硬件实现效率没有达到位宽减半的理论值。

要么稀疏的有效倍率不到 2 倍。 如果 FP4 稠密确实是 9 PF,那 14/9 = 1.56,稀疏只贡献了 1.56 倍而不是 2 倍。

两种解释在工程上都成立。区别在于:如果是第一种,说明 FP4 的硬件效率有问题;如果是第二种,说明稀疏的编译器支持不到位。

从公开信息看,我倾向于第二种。原因:2:4 稀疏要求模型权重本身是稀疏的,而且编译器要能识别并利用。这两个条件在实际模型上很少同时满足。厂商标的"稀疏算力"通常是硬件峰值,不是实测值。

三种可能的解释

把上面的分析列成三条,按可能性排序。

解释一:稀疏是硬件峰值,实际用不上。

2:4 结构化稀疏要求每 4 个权重里有 2 个是零且位置固定。预训练出来的模型不满足这个条件,要人为剪枝,剪完通常掉点。所以"稀疏算力"这个数字,在跑标准模型时是用不到的。

这一条最能解释为什么差 22%:厂商标的是"如果你能把模型剪成 2:4 稀疏,理论上能达到",不是"跑任何模型都这么快"。

解释二:FP4 的硬件实现效率低于理论。

位宽减半,理论上算力翻倍,但实际受限于数据搬运、累加器位宽、指令发射。FP4 的累加通常还是 FP16 或 FP32,这部分开销固定,所以实际倍率会低于 4 倍。

解释三:两个数字的测量条件不同。

FP16 稠密可能是"理想条件"下的峰值(大矩阵、无依赖),FP4 稀疏可能是"实测"值。两个不同条件下的数字放一起,倍数就没有意义。

我判断解释一的权重最高。因为稀疏算力在业界一直是"标称大于实用"的典型,各家的做法都一样。

为什么厂商都爱标稀疏算力

这个问题值得单独说,因为它解释了口径为什么改不了。

稀疏算力的数字天生是稠密的 2 倍。同样一颗芯片,标稠密是 7 PF,标稀疏就是 14 PF。PPT 上差一倍,成本没变。

这在行业里形成了一个循环:A 家标稀疏,B 家不标就显得弱,于是 B 家也标;标完之后谁都不敢退回稠密口径,因为数字会"腰斩"。

结果是:规格表上的算力数字,和实际能跑出来的性能,差距越拉越大。

对采购方,这意味着一件事:不同厂商的"峰值算力"不能直接比。 一家标稀疏、一家标稠密,数字差一倍但实际性能可能一样。

可用的替代指标是 MLPerf 的推理/训练成绩——那个是在真实模型上测的,各家口径统一。虽然也有优化空间,但至少不会出现"标 14 用 7"这种落差。

怎么核对:找规格表

上面所有推算都基于二手数据。要核实,得看官方 datasheet。

需要确认的四件事:

一,FP8 稠密的算力是多少。 如果 FP8 稠密是 4.5 PF(正好 2 倍),说明位宽减半的倍率是线性的,FP4 稠密应该是 9 PF,那差的就是稀疏那一档。

二,有没有单独标 FP4 稠密。 有些规格表会分开列"dense"和"sparse",这样一眼就能看出差在哪。

三,稀疏的单位是 2:4 还是别的。 不同的稀疏模式,有效倍率不一样。

四,这些数字是 chip 级还是 module 级(多芯片封装)。 一个 module 里可能有多个 die,标称算力是合起来的。

我看到的这组数据来自行业媒体的转述,没找到官方规格表原文。这本身也是个提醒:二手转述在数字上出错的概率不低,尤其是单位和小数点。

这类口径问题的普遍性

这种"峰值算力对不上"的情况,在硬件规格里很常见。

之前算过 B300 的显存与带宽,也发现同样的问题:288GB 显存听着大,但每 GB 带宽反而比 H200 低。单看一个数字都会误判。

再看沐曦 C600 的 144GB,那个数字要反推 HBM 堆叠组合才能确认带宽。

共同点:厂商标的是"最好的那个数",用户要用的是"实际能拿到的那个数",中间隔着口径。

实用的判断方法有三条:

第一,同档位比较。 稠密比稠密,稀疏比稀疏。跨档位相除得出的倍数,只能当上限看。

第二,看有没有给全套。 如果只给了一档,说明其他档位不够好看。给全套规格的厂商,可信度更高。

第三,找"实测"而不是"峰值"。 MLPerf 这类第三方基准测的是实际跑模型的表现,比峰值算力有用得多。虽然 MLPerf 也有优化的空间,但至少是在真实模型上测的。

最后说个数字上的直觉:如果 14 PF 这个数字真能在实际模型上跑到,那 B300 跑推理的吞吐应该是 H200 的好几倍。 但从带宽算,288GB 装满时只有 28 token/s(算过),比 H200 装 141GB 时还慢。

两个结论矛盾的地方,就是口径藏身的地方。

参考资料

目录导航
  • 官方给的三个算力数字
  • 算力的理论倍数 8 倍是怎么来的
  • 实测 6.22 倍:算力缺的 22% 在哪
  • 三种可能的解释
  • 为什么厂商都爱标稀疏算力
  • 怎么核对:找规格表
  • 这类口径问题的普遍性
    • 参考资料
  • 相关文章:

  • 60 万颗 H200 滞留香港:84.6PB 显存能装下什么
  • Agent 的算力账单:一个任务跑到 1333 步,整月订阅就没了
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。