HiFloat8 浮点数据格式:既要又要之路
HiFloat

介绍 HiFloat8(HiF8)之前,我们先回顾一下 AI 浮点数据格式的发展及相应的基本概念,并作简单的对比分析。以便读者更容易理解这篇技术分析的内容。
传统 16 位浮点数
计算机用 IEEE 754 标准定义的数据格式存储数据,其核心类似于十进制的科学计数法,例如 −1.25×10^(-3)只不过是二进制版本。以半精度 FP16 浮点数据格式为例,它用 16 比特(2 字节)存储一个数。这 16 位被划分为 3 块:
- 符号位(Sign bit):1bit,1 表示负,0 表示正
- 阶码位(Exponent Field):5 bits,编码0, 31–15=-15, 16,其中 15 是阶码偏置。E=-15,表示非常规数值(Subnormal/Denormal),E=16 时编码无穷和 NaN,E 等于其他值时表示常规数值。
- 尾数位(Mantissa Field):10bits,都表示小数位,小数位之前有 1-bit 值固定的隐藏位(Normal 模式是 1,Subnormal 模式是 0),共 11 比特有效位
因此 FP16 的二进制科学计数法表达式如下(阶码 E 已经过偏置还原):

浮点数相比定点数,通过二进制的阶码和尾数分离的科学计数法结构,在有限的硬件位宽下,实现了巨大的动态范围。比如 INT16,最多只能表示 ±2^0, 2^15−1范围的非 0 数值,等效支持的二进制指数只有0, 15,共 16 个;而 FP16 却可以表达 ±2^(−24), 2^15×(2−2^(−10))范围的非 0 数值,等效支持的二进制指数高达-24, 15,共 40 个。
FP16 在 CNN 流行的时代,是主流的训练数据格式。但是随着 LLM 的爆发和流行,人们逐渐发现语言模型训练过程中的数值范围非常弥散,仅有 40 个指数支持的 FP16 经常有大量数值下溢变成 0,影响模型训练精度甚至直接跑飞(即便已经支持了反向全局 Loss Scaling)。因此谷歌早期提出的 BF16 数据格式逐渐替代 FP16,成为了 LLM 时代的主流训练格式。BF16 数据格式具有 1-bit 符号位,8-bit 阶码和 7-bit 尾数,等价于直接把 FP32 数据格式的低 16-bit 尾数直接砍掉。相比于 FP16,BF16 虽然只有 8 位有效位,但却能支持-133,127的超大二进制指数范围(包括 Subnormal),对 LLM 训练稳定性极其友好。
FP8 浮点数
FP8 通常包括 E4M3 和 E5M2 两种(默认最高位存在 1bit 符号位),直接继承了 IEEE 754 定义的浮点数特征,使用固定位宽的阶码域和尾数域表达数值大小。其中 E4M3 设定 4-bit 阶码和 3-bit 尾数,精度相比 E5M2 较高,有 4 位有效位,但是动态范围很窄,只能支持-9,8共 18 个二进制指数表达(包括 Subnormal);而 E5M2 设定了 5-bit 阶码和 2-bit 尾数,精度相对 E4M3 较低,只有 3 位有效位,但是动态范围相对较大,能支持-16, 15共 32 个二进制指数表达(包括 Subnormal)。通常 E4M3 用于神经网络前向传播的激活值 A 和权重 W,E5M2 用于神经网络后向传播的激活值梯度 dA。但近期业界认为 E5M2 精度过低,像 DeepSeek_V3 在训练的时候,dA 也用了 E4M3。
现有浮点格式分析
图 1 展示了 FP16、BF16 和 FP8 的域位宽结构。他们都包括三个域,符合 IEEE 754 标准的基本结构。其中阶码域决定基础动态范围,尾数域决定精度(有效位)。同时较宽的尾数域在 Subnormal 模式下能补充支持一定的二进制指数值,扩大一些动态范围。

如前所述,具有 40 个二进制指数支持的 FP16 在 LLM 训练竞争中,已经逐渐败给了具备超大指数范围的 BF16 格式。毕竟现在大模型的训练成本太高了,训练不稳定的成本,很多企业和机构都难以承受。而现有的 FP8-E4M3,最多只能支持 18 个二进制指数,远远落后于 FP16。这使得 FP8 训练的稳定性面临极大的挑战。为了解决这一问题,细粒度 scaling 和 current scaling(FP8 delayed scaling 训练因为极其不稳定,尚未看见成功案例)成为了稳定训练的常见手段。但这些技术方案会明显降低 8 位浮点的训练加速。比如 Ling-1T 是目前已知最大的 FP8 训练的基础模型,但其 FP8 混合精度训练仅仅只带来了 15%多的端到端加速,远远低于预期,毕竟 8-bit 浮点的矩阵乘算力,相对 16-bit 浮点是翻倍了的。
综上,LLM 训练对动态范围的诉求极大,导致 FP16 逐渐落败于 BF16。而 FP8-E4M3 的动态范围比 FP16 的一半还要小,这使得大家只能牺牲大量的训练性能提升,来换取训练稳定性和精度收敛。
HiF8 浮点数
FP8 困境的根源在于,对于 LLM 来说,精度很重要,动态范围也很重要,在 8-bit 位宽限制下,简单沿用传统 IEEE 754 的技术方案定义 8 比特数据格式,无法做到“既要又要”。为此,设计者提出了锥形精度的浮点数据格式 HiF8。
如图 2 所示,HiF8 在传统的符号域、阶码域和尾数域的基础上,引入了即时可译的变长前缀码编码的点位域 Dot,直接显示阶码存储的位宽以及作为 Denormal 标志。Dot 分别编码了 0~4 五个值,因此阶码位宽最少 0bit,最多 4bits。在已知符号位、点位域和阶码域位宽的基础上,并且格式总共只有 8-bit,尾数位宽可对应求出。
为确保不同位宽的阶码域所表达的指数值不重复,实现无冗余编码。HiF8 采用 Sign-Magnitude 的原码编码阶码域,并且固定幅值的最高位、不存储。比如说,当 Dot=0 时,说明阶码不占据位宽,并且 E 直接等于 0;而当 Dot=1~4 时,固定阶码幅值的最高位为 1(示意图中的红色数字),不占据存储位宽。基于这种规则,Dot=1,阶码 E 只能等于 ±1,不包含已经编码的 0;Dot=2 时,阶码 E 只能等于 ±2,3,不包含已经编码的-1,1。以此类推,Dot 域指示的 0~4 五种位宽的阶码,共编码了-15, 15的指数,且彼此之间不重复,实现了无冗余编码。

同时,设计者特意用大位宽的 Dot 域指示小位宽和小值的阶码域,实现了尾数精度的渐变,而不是跳变。可以看到,在 E=-3, 3时,有 3-bit 尾数。然后随着阶码幅值变大,Normal 模式下的尾数位宽逐渐减少到 1-bit。这是 HiF8 的老师、Posit 数据格式所不具备的。
Normal 模式下,HiF8 的数值解析式和传统 IEEE 754 格式一样,是标准的二进制科学计数法表示。为了支持更大的动态范围,HiF8 还采用了不同于 IEEE 754 风格的 Subnormal/Denormal 方案。如图 2 的 Denormal 表达式,当 Dot 域指示该数值为 Denromal 模式时,HiF8 没有指数域,多的 3-bit“尾数”(编码 0~7 八个数值),直接用于扩展 HiF8 的小值指数范围。HiF8 Denormal 模式在 Normal 模式支持的-15, 15共 31 个指数的基础上,额外扩展了-22,-16共 7 个指数(-23 用于表示特殊值 Zero 和 NaN),综合形成了-22,15共 38 个指数的大动态范围,非常接近 FP16 的-24,15的 40 个指数范围。并且由于-15,-8本身是 1-bit 尾数,扩展的-22,-16的 0-bit 尾数也属于精度渐变,并非跳变。

根据前述 HiF8 编码描述,和 FP8 的回顾,可以画出图 3 所示的 Float8 有效位-指数示意图。其中 HiF8 精度明显不同于域位宽固定的 E4M3 和 E5M2,具备一种锥形的精度特征。锥形精度的概念受启发于 Posit 数据格式——数据工程中的绝大多数数值分布,都具备类高斯分布的聚合特征。神经网络的训练和推理也不例外。只要众数数值能用高精度充分表达即可,两边占比较小的数据(幅值较大或者较小),精度可以逐渐降低一些,不会显著影响端到端的功能和效果。但 Posit 的编码方式,尾数精度在指数变化时存在严重跳变,不够均衡。在 8-bit 限制下,Posit 无法很好匹配当前神经网络的诉求。HiF8 作为 Posit 的学生,希望能将锥形精度的思想发扬光大。

除了常规数值编码,HiF8 也编码了 4 个特殊值,具体如图 4 所示。可以看到,HiF8 编码了 Zero、NaN 和正负无穷。其中 HiF8 不区分正 0 和负 0,或者可以理解为 HiF8 用单一 pattern 同时表示了(神经网络区分正负 0 意义不大,8-bit 表达空间十分有限,浪费不划算)。因此,HiF8 是一个数值表达完备的 8-bit 单数据格式。
总结与展望
表格 1 详细总结对比了 HiF8、FP8 和 FP16 的典型值和关键特征。可以看到,HiF8 利用匹配数据分布的锥形精度特征,成功地在 8-bit 限制下,在保证神经网络需求精度的前提下,显著扩大了格式的动态范围。进而为神经网络训推提供了能力更全面的 8-bit 单数据格式表达。

FP16 在和 BF16 的 LLM 训练竞争中,40 个指数的动态范围都显不足(LLM 训练真的太吃动态范围了!),HiF8 的 38 个指数表达显然也是不够的。但是相比于 FP8,尤其是 E4M3 的 18 个指数表达,其动态范围已经是大幅提升。有理由相信这种优势最终会转换到神经网络 E2E 性能或者精度上。在 8-bit 的极低开销限制下,HiF8 已经算是成功找到了一条“既要又要”的道路。
敬请锁定 GCC IP 栏目 CompuWave!
GCC 智算产业发展委员会将持续带来「HiF8」系列专题分享,后续将邀请技术专家与联创伙伴持续发掘并向大家呈现 HiF8 在训练和推理中的优势。
更多 HiF8 联创招募、进展等信息可联系 GCC 智算产发委执行秘书长熊华(xionghua@gccorg.com)获取。
汇聚全球专家洞见,碰撞多元思维火花
聚焦计算前沿突破,捕捉技术创新脉搏
这里既有深度产业观察、趋势研判,
也有前沿技术探索、创新路径解析
让每一份专业表达与先锋探索,
都能共振行业、影响未来现在,
加入 CompuWave
与全球计算先锋共探技术边界,共逐蓝海征程