BW1000 对 FP8 支持差吗

前言

做国产算力选型或把 CUDA 上的 FP8 推理栈迁到海光平台时,常听到一句笼统判断:BW1000 对 FP8 支持不好。

先说结论

BW1000 不要用FP8,性能真的很差。

为何体感差

开源大模型里 FP8 权重、校准与推理脚本,大量按 英伟达工具链与 dtype 约定 编写。

换到 DCU 时,即使硬件侧有 FP8 能力,仍可能遇到 需要重导出、重校准或走海光推荐的数据排布 才能稳定的情况。

BW1000 没有原生 FP8 硬件单元,强行用 FP8 会触发软件模拟,速度反而比 FP16 慢。

对比

BW1000 的架构设计非常独特,它更像是一张“披着 AI 外衣”的高性能科学计算卡。从数据上看,它的技能点主要加在了**双精度计算(FP64)**上,而不是像 NVIDIA H100 那样疯狂堆叠 FP8/FP16 的 Tensor Core 性能。

以下是 BW1000 与 NVIDIA 旗舰卡的算力对比,你可以清晰地看到差异:

指标 海光 BW1000 NVIDIA H100 (SXM) 差异解读
FP64 (双精度) 30 TFLOPS 30-34 TFLOPS 几乎持平。这是 BW1000 的杀手锏,适合科学计算。
FP32 (单精度) 60 TFLOPS 60-67 TFLOPS 表现优秀,通用性强。
FP16 (半精度) 480 TFLOPS ~1,979 TFLOPS 差距明显,H100 的 AI 训练能力远超 BW1000。
FP8 (8位精度) 未重点标注 极高 (数千 TFLOPS) BW1000 未宣传此项,说明非核心优势。

是否支持

下面用一段最小化的 PyTorch 思路说明「验证」在做什么:

在已安装海光版 PyTorch 的环境里,查看当前构建是否注册了你关心的浮点类型。

1
2
3
4
5
6
7
8
9
import torch

# 在 DCU 设备可用时,检查常见低精度类型是否被识别
# 实际名称请以当前 torch 与海光插件为准
dev = torch.device("cuda:0") if torch.cuda.is_available() else torch.device("cpu")
print("device:", dev)
for name in ("float8_e4m3fn", "float8_e5m2", "bfloat16"):
dt = getattr(torch, name, None)
print(name, "->", dt)

我们可以看到

1
2
3
4
device: cuda:0
float8_e4m3fn -> torch.float8_e4m3fn
float8_e5m2 -> torch.float8_e5m2
bfloat16 -> torch.bfloat16

可以看出环境是支持FP8的,只是性能差。