CrabNote螃蟹笔记

[算法学习] Deepseek的UE8M0 FP8是个啥

[算法学习] Deepseek的UE8M0 FP8是个啥

[算法学习] Deepseek的UE8M0 FP8是个啥 [算法学习] Deepseek的UE8M0 FP8是个啥 Modified November 18, 2025 338 381 FP的计算公式为: FP值=(−1) Sign ×(1+M/2 3 )×2 E−bias ∗bias(偏置)=2 E−1 −1 , 如果是4位指数,bias一般 = 7 带入数值 举个上面的例子,在FP8 E4M3的条件下,00101101这个浮点数字换算成实数 FP值=(−1) 0 ×(1+5/2 3 )×2 5−7 =1×1.625×2 −2 =0.40625 性能与成本的平衡 在过往的行业里,很长一段时间FP32都是最优标准(精度够高,范围也够广),在大部分场景里都可以通用。但随着大模型参数量的提升,FP32对算力的压力越来越大,训练时间,算力成本成为入坑的最大门槛。于是训练方开始尝试降低精度,从FP32到FP16,再到FP8,甚至INT4。在降低精度的过程中会损失很多细节,导致性能下降,但性能和成本之间取得平衡,是这几年大模型普适度提升的重要因素。 2022年英伟达的论文 FP8 FORMATS FOR DEEP LEARNING 提出了FP8 E4M3和E5M2两种结构,FP8在175B的大参数模型上,在不改变超参数的前提下,也能保持和FP16相当的性能,但训练速度远低于FP16。 在传统的FP8结构基础上,Google提出的MXFP8(Matrix eXtended Floating Point 8 bit)是一种专为AI加速器和低精度神经网络计算设计的8位浮点格式。它的目标是在保持较低比特宽度的同时,通过动态缩放机制(per tensor 或 per block 缩放)来提升低精度计算的精度和模型质量,从而在推理和训练中实现接近 FP16 的性能。在英伟达的Blackwell架构中,原生支持MXFP8,MXFP6和MXFP4,可以很方便让模型厂商提升训练和推理效率。 UE8M0 FP8 Deepseek提到的UE8M0 FP8并不属于英伟达的FP8标准。国产芯片厂商并没有类似的Blackwell架构,直接抄过来有知识产权风险,而且也可能因为没有抄干净,导致数据不稳定,出现梯度爆炸等事故导致训练崩溃。相比传统的FP8结构,UE8M0采用了“范围优先”的策略,舍弃了小数精度,获取更大的动态范围。选择这种架构可能有几种原因: 降低硬件实现难度 相比传统FP8格式,UE8M0极大降低了芯片硬件实现的复杂度和难度 。其硬件代价低,关键路径短、功耗低,对于没有完整FP8乘加单元的芯片,落地门槛更低 。 解决数值问题 UE8M0可以解决单尺度FP8无法同时顾及大/小值而导致的溢出或被压成0的问题 。比如一个值1000.0001,包含了极大值和极小值。为了用 FP8 表示,需要一个缩放因子,将所有值除以1000,那么极小值就会被压缩成0。而UE8M0 是一种无尾数、无符号、纯指数的格式,就可以变相避免这种问题。 软硬协同 这是一种软件算法与硬件设计之间的互相成就和协同优化。通过算法强化鲁棒性和抗噪能力来适配这种极致精度,从而获得硬件设计上的巨大便利性收益 。这标志着国产芯片和大模型正走向更深层次的软硬协同阶段 。 兼容性考量 英伟达的FP8标准深度绑定其自家硬件,国产GPU难以直接兼容,因此需要发展自己的标准 。 潜在风险 但UE8M0并不是想象中的那么容易“完美适配”,下面举几个简单例子,可以很明显对比出,UE8M0虽然有很强的动态范围,但在精度表示上有非常明显的短板。在处理复杂神经网络时可能会丢失重要细节。但Deepseek照理没这么拉,具体还需要等实际任务测试和相关论文出来再下决定。 第一张图:显示三种格式对连续输入的量化结果。越贴近对角线(原始值),精度越高。 第二张图:以对数刻度显示量化误差。误差越小越好。 第三张图:展示每种格式能表示的数值分布密度。密度值越高,分布越稠密。 由于UE8M0的分布特性,只能表示2的次幂实数,所以分布非常稀疏,尤其是在大动态区间里,这个在单个神经元中的梯度表示精确度是挺要命的 FP8 FORMATS FOR DEEP LEARNING FP的计算公式为: FP值=(−1) Sign ×(1+M/2 3 )×2 E−bias ∗bias(偏置)=2 E−1 −1 , 如果是4位指数,bias一般 = 7 带入数值 举个上面的例子,在FP8 E4M3的条件下,00101101这个浮点数字换算成实数 FP值=(−1) 0 ×(1+5/2 3 )×2 5−7 =1×1.625×2 −2 =0.40625 性能与成本的平衡 在过往的行业里,很长一段时间FP32都是最优标准(精度够高,范围也够广),在大部分场景里都可以通用。但随着大模型参数量的提升,FP32对算力的压力越来越大,训练时间,算力成本成为入坑的最大门槛。于是训练方开始尝试降低精度,从FP32到FP16,再到FP8,甚至INT4。在降低精度的过程中会损失很多细节,导致性能下降,但性能和成本之间取得平衡,是这几年大模型普适度提升的重要因素。 2022年英伟达的论文 FP8 FORMATS FOR DEEP LEARNING 提出了FP8 E4M3和E5M2两种结构,FP8在175B的大参数模型上,在不改变超参数的前提下,也能保持和FP16相当的性能,但训练速度远低于FP16。 FP8 FORMATS FOR DEEP LEARNING 在传统的FP8结构基础上,Google提出的MXFP8(Matrix eXtended Floating Point 8 bit)是一种专为AI加速器和低精度神经网络计算设计的8位浮点格式。它的目标是在保持较低比特宽度的同时,通过动态缩放机制(per tensor 或 per block 缩放)来提升低精度计算的精度和模型质量,从而在推理和训练中实现接近 FP16 的性能。在英伟达的Blackwell架构中,原生支持MXFP8,MXFP6和MXFP4,可以很方便让模型厂商提升训练和推理效率。 UE8M0 FP8 Deepseek提到的UE8M0 FP8并不属于英伟达的FP8标准。国产芯片厂商并没有类似的Blackwell架构,直接抄过来有知识产权风险,而且也可能因为没有抄干净,导致数据不稳定,出现梯度爆炸等事故导致训练崩溃。相比传统的FP8结构,UE8M0采用了“范围优先”的策略,舍弃了小数精度,获取更大的动态范围。选择这种架构可能有几种原因: 降低硬件实现难度 相比传统FP8格式,UE8M0极大降低了芯片硬件实现的复杂度和难度 。其硬件代价低,关键路径短、功耗低,对于没有完整FP8乘加单元的芯片,落地门槛更低 。 解决数值问题 UE8M0可以解决单尺度FP8无法同时顾及大/小值而导致的溢出或被压成0的问题 。比如一个值1000.0001,包含了极大值和极小值。为了用 FP8 表示,需要一个缩放因子,将所有值除以1000,那么极小值就会被压缩成0。而UE8M0 是一种无尾数、无符号、纯指数的格式,就可以变相避免这种问题。 软硬协同 这是一种软件算法与硬件设计之间的互相成就和协同优化。通过算法强化鲁棒性和抗噪能力来适配这种极致精度,从而获得硬件设计上的巨大便利性收益 。这标志着国产芯片和大模型正走向更深层次的软硬协同阶段 。 兼容性考量 英伟达的FP8标准深度绑定其自家硬件,国产GPU难以直接兼容,因此需要发展自己的标准 。 潜在风险 但UE8M0并不是想象中的那么容易“完美适配”,下面举几个简单例子,可以很明显对比出,UE8M0虽然有很强的动态范围,但在精度表示上有非常明显的短板。在处理复杂神经网络时可能会丢失重要细节。但Deepseek照理没这么拉,具体还需要等实际任务测试和相关论文出来再下决定。 第一张图:显示三种格式对连续输入的量化结果。越贴近对角线(原始值),精度越高。 第二张图:以对数刻度显示量化误差。误差越小越好。 第三张图:展示每种格式能表示的数值分布密度。密度值越高,分布越稠密。 由于UE8M0的分布特性,只能表示2的次幂实数,所以分布非常稀疏,尤其是在大动态区间里,这个在单个神经元中的梯度表示精确度是挺要命的 👥 大家应该都被Deepseek的V3.1刷过屏了,但这次刷屏不光是模型发布,还有一个关键的提及要素: "Deepseek V3.1 使用了UE8M0 FP8 Scale 的参数精度。 然后今天各大媒体开始报道,Deepseek助力国产芯片加速追赶。A股暴涨,还有大家热议的寒王 直接一飞冲天,甚至还啥也没发布 大家应该都被Deepseek的V3.1刷过屏了,但这次刷屏不光是模型发布,还有一个关键的提及要素: "Deepseek V3.1 使用了UE8M0 FP8 Scale 的参数精度。 "Deepseek V3.1 使用了UE8M0 FP8 Scale 的参数精度。 然后今天各大媒体开始报道,Deepseek助力国产芯片加速追赶。A股暴涨,还有大家热议的寒王 直接一飞冲天,甚至还啥也没发布 什么是FP FP的全称是Floating point(浮点数),通常用于在计算机中表示实数(包含小数),可以用来表示非常大或非常小的数值。包括整数,小数,科学计数法等等。在采用FP前,记录实数通常用的是INT(整数),但INT无法表示小数(比如3.1415926),也很难处理极大或者极小的数值(比如科学计数法 6×10 23 ) 之所以叫做浮点数,是因为小数点的位置不是固定的。这样的机制可以让FP可以用来表达很大范围的数字。比如: 3.14159 0.0000000001 6e23 浮点数的结构包含: 符号位(Sign,用于区分正负) 指数位(Exponent,表示数的大小) 小数位(Mantissa / Fraction, 表示数的精度) 浮点数可以表示绝大部分的数字。同样的内存位数,用得越多,数字表示越精确;用得越少,数字越粗糙。但也有一些特殊例子,比如0.1在二进制里就是一个无限循环数。在深度学习里,模型参数就是大模型每个神经元之间连接的“权重”,而精度就是用多少位二进制数值来记录这些参数。精度越高,模型计算的损失值越少,性能上限就越高,反之性能就会受到权重值影响产生损失。有兴趣可以看看基础算法的文章 [算法学习] 从0开始掌握反向传播算法 [算法学习] Forward forward (FF) 双重前馈算法 [[算法学习] 从0开始掌握反向传播算法](https://uspen5wvmk.feishu.cn/docx/XcEodd8Inoa0aKxhgkFc0V4Unmh) [[算法学习] Forward forward (FF) 双重前馈算法](https://waytoagi.feishu.cn/wiki/HzPvwCu3wipPUBkk0jicRu1Bndf)