介绍HiFloat8HiF8之前我们先回顾一下AI浮点数据格式的发展相应的基本概念并作简单的对比分析。以便读者更容易理解这篇技术分享的内容。传统16位浮点数计算机用IEEE 754标准存储数据其核心类似于十进制的科学计数法例如只不过是二进制版本。以半精度FP16浮点为例它用16比特2字节存储一个数。这16位被划分为3块符号位Sign bit1 bit1表述负0表示正阶码位Exponent Field5 bits编码[0, 31] – 15 [-15, 16]其中15是阶码偏置。E -15表示非常规数值Subnormal/DenormalE 16时编码无穷和NaNE等于其他值时表示常规数值。尾数位Mantissa Field10 bits都表示小数位小数位之前有1-bit值固定的隐藏位Normal模式是1Subnormal模式是0共11比特有效位因此FP16的二进制科学计数法表达式如下阶码E已经过偏置还原浮点数相比定点数通过二进制的阶码和尾数分离的科学计数法结构在有限的硬件位宽下实现了巨大的动态范围。比如INT16最多只能表示范围的非0数值等效支持的二进制指数为[0, 14]共15个而FP16却可以表达这么大范围的非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尾数直接砍掉。相比于FP16BF16虽然只有8位有效位但却能支持[-133, 127]的超大二进制指数范围包括Subnormal对LLM训练稳定性和精度收敛极其友好。FP8浮点数FP8通常包括E4M3和E5M2两种默认最高位存在1 bit符号位直接继承了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和权重WE5M2用于神经网络后向的激活值梯度dA。但近期业界认为E5M2精度过低像DeepSeek_V3在训练的时候dA也用了E4M3。现有浮点格式分析图1展示了FP16BF16和FP8的域位宽结构。他们都包括三个域符合IEEE 754的基本特征。其中阶码域决定基础动态范围尾数域决定精度有效位。同时较宽的尾数域在Subnormal模式下能补充支持一定的二进制指数值扩大一些动态范围。图1. Float16和Float8域位宽结构示意图如前所述具有40个二进制指数支持的FP16在LLM训练竞争中已经逐渐败给了具备超大动态范围的BF16格式。毕竟现在大模型的训练成本太高了训练不稳定的损失很多企业和机构都难以承受。而现有的FP8-E4M3最多只能支持18个二进制指数远远落后于FP16。这使得FP8训练的稳定性面临极大的挑战。为了解决这一问题极端细粒度scaling和current scalingFP8 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数据格式的技术方案无法做到“既要又要”。为此我们提出了锥形精度的浮点数据格式HiF8。如图2所示HiF8在传统的符号域阶码域和尾数域的基础上引入了即时可译的变长前缀码编码的点位域Dot直接显示指示阶码存储的位宽和Denormal标志。Dot分别编码了0~4五个值因此阶码位宽最少0 bit最多4 bits。在已知符号位点位域和阶码域位宽的基础上并且格式总共只有8-bit尾数位宽可对应求出。为了确保不同位宽的阶码域所表达的指数值不重复实现无冗余编码HiF8采用Sign-Magnitude的原码编码阶码域并且固定幅值的最高位为确定值不存储。比如说当Dot 0时说明阶码不占据位宽并且E直接等于0而当Dot 1~4时固定阶码幅值的最高位为1示意图中的红色数字不占据存储位宽。基于这种规则Dot 1阶码E只能等于不包含已经编码的0Dot 2时阶码E只能等于不包含已经编码的[-1, 1]。以此类推Dot域指示的0~4五种位宽的阶码共编码了[-15, 15]的指数且彼此之间不重复实现了无冗余编码。图2. HiF8编码示意图同时我们特意用大位宽的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尾数与之相邻也属于精度渐变并非跳变。图3. Float8有效位-指数示意图根据前述HiF8编码描述和FP8的回顾可以画出图3所示的Float8有效位-指数示意图。其中HiF8精度明显不同于域位宽固定的E4M3和E5M2具备一种锥形精度的特征。锥形精度的概念启发于Posit数据格式 —— 工程计算中的绝大多数数值分布都具备类高斯分布的聚合特征。神经网络的训练和推理也不例外。只要众数数值能用高精度充分表达即可两边占比较小的数据幅值较大或者较小精度可以逐渐降低一些不会显著影响端到端的功能和效果。但Posit的编码方式尾数精度在指数变化时存在严重跳变精度分配不够均衡。在8-bit限制下Posit无法很好匹配当前神经网络的诉求。HiF8作为Posit的学生希望能将锥形精度的思想发扬光大。图4. HiF8特殊值支持除了常规数值编码HiF8也编码了4个特殊值具体如图4所示。可以看到HiF8编码了ZeroNaN和正负无穷。其中HiF8不区分正0和负0或者可以理解为HiF8用单一pattern同时表示了神经网络区分正负0意义不大8-bit表达空间十分有限浪费不划算。因此HiF8是一个数值表达能力完备的8-bit单数据格式。总结和展望表格1详细总结对比了HiF8FP8和FP16的典型值和关键特征。可以看到HiF8利用匹配数据分布的锥形精度特征成功在8-bit限制下在保证神经网络需求精度的前提下显著扩大了格式的动态范围。进而为神经网络训练和推理提供了能力更全面的8-bit单数据格式表达。表1. HiF8FP8和FP16的典型值和关键特征由于FP16在和BF16的LLM训练竞争中40个指数的动态范围都日渐式微LLM训练太吃动态范围了! 。HiF8的38个指数表达显然还是不够的。但是相比于FP8尤其是E4M3的18个指数表达动态范围已经是成倍提升。我们相信这种优势最终会转换到神经网络E2E性能或者精度上。在8-bit的极低开销限制下HiF8已经算是成功找到了一条“既要有要”的道路。后续我们会继续发掘并向大家呈现HiF8在神经网络训练和推理中的优势。