把 FP8 接进 Qwen3:矩阵乘更快,整模型为什么更慢

我用 Qwen3 真实权重完成 FP8 投影实验,再把同一量化方法接回完整模型。预先量化输入时矩阵乘更快,计入在线转换后,整模型 decode 反而慢约 21%,并且未通过预设数值检查。

参数与资源用量

项目 本次实测配置与用量
执行并行方式 1 张 GPU、单进程、batch=1;两种精度交错串行执行,没有服务端并发请求
模型与框架 Qwen3-0.6B;PyTorch 2.6.0、CUDA 12.6;SDPA attention
精度对照 BF16 对照;28 个 MLP gate projection 使用 tensorwise E4M3,激活在线缩放和转换
输入与输出 输入 128 / 512 / 2048 token;每例固定 16 步缓存 decode,单 token 解码行数补齐到 16
重复方式 每种精度、每个长度各 6 次平衡 AB/BA 计时,共 36 次;两段文本共比较 102 个 logit 位置
正式计时窗口 BF16 累计 7.529 秒,FP8 累计 9.043 秒;单卡合计折算 16.571 GPU·秒,约 0.00460 GPU·小时
峰值分配显存 随输入长度为 1282 / 1435 / 2052 MiB;两种权重副本同时驻留,不能用于比较净显存节省

GPU·秒按一张卡乘正式 prefill 与 decode 窗口墙钟计算,未包含加载、暖机、数值检查和其他实验,不能作为全项目用量。计时不包含一次性权重转换与切换,包含在线激活处理。

局部投影结果

下表为三个实际层的中位数汇总,单位为每次调用的微秒。

输入 token BF16 预量化 FP8 FP8 加在线激活处理
128 7.735 5.184 21.824
512 20.232 12.447 33.647
2048 64.304 35.512 76.496

预量化 FP8 的局部优势约为 1.49–1.81 倍;独立新进程重复仍有优势,但在线版本在全部长度上都慢于 BF16。

完整模型结果

时间为每种精度 6 次运行的中位数,单位毫秒;decode 一列为 16 步合计。

输入 token BF16 / FP8 prefill BF16 / FP8 decode 两段文本最大 logit 差
128 26.269 / 30.535 388.016 / 470.386 1.1875 / 0.8125
512 26.846 / 30.957 388.423 / 469.398 3.71875 / 6.92969
2048 28.530 / 33.021 390.829 / 471.736 2.15625 / 1.78125

预设检查要求所有位置 top-1 一致且最大绝对 logit 差不超过 0.5。虽然 102/102 个位置 top-1 相同,六个文本与长度组合都超过误差阈值。因此这些是失败方案的诊断计时,不能称为质量等价的模型加速。

完整笔记保留实现、全部重复、数值复核和逐层误差定位。

阅读全文 →

完整实验记录保存在 pegasas-notes-v2 私有仓库,仅向已获仓库访问权限的账号开放。

← 返回项目笔记