1. 数值精度
1. FP8/FP16/FP32,浮点数是如何在硬件表示的?
计算机中的浮点数通过 符号位、指数位、尾数位 三部分组合表示,遵循 IEEE 754标准。
- 符号位(S):表示正负(0为正,1为负)。
- 指数位:决定数值的“放大或缩小倍数”。(可以放大,存储一个极大的数,可以缩小,表示一个小数点后极小的数。表示数值的级别)
- 指数位存储的是无符号整数(比如8位指数,范围0~255),但实际指数可能是正数或负数。解决方法:定义一个偏移量(Bias),让实际指数 = 存储值 - 偏移量。
- 尾数位:存储具体的有效数字。
2. FP8相较于FP32有何优势?
DeepGEMM在GitHub的描述表面上是什么1350TFlops,实际上暗藏的是控制精度的秘密(很多其他公司FP8训不出来这里关系很大)
- 内存效率:存储空间节省75%
- FP32:每个数值占32位(4字节),存储大型模型(如GPT-3的1750亿参数)需要数百GB显存。
- FP8:每个数值仅占8位(1字节),相同数据量下,显存占用减少至1/4。
- 计算加速:吞吐量提升2~4倍
- 矩阵乘法(GEMM)FP8的运算单元更小,单指令可处理更多数据。FP32:1次操作处理1个数值;FP8:1次操作处理4个数值(8位×4=32位)
- 训练速度提升30%~50%,推理速度提升2倍以上(如LLM生成文本)。
- 能耗优化:更低的功耗与散热需求
- 内存读写占AI计算总功耗的60%以上。FP8数据量减少75%,显著降低能耗。
精度损失如何解决?
- 量化感知训练(QAT):训练时模拟FP8量化,让模型适应低精度。
- 分组缩放(Group-wise Scaling):对权重分组,每组独立调整缩放因子。
- 稀疏性补偿:利用FP8的稀疏性(部分数值为0),跳过无效计算。