外观
大模型浮点数精度与混合精度训练
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. FP32 和 FP16 的区别,混合精度的原理
FP32 vs FP16 对比
| 对比维度 | FP32(单精度) | FP16(半精度) |
|---|---|---|
| 位数 | 32位 | 16位 |
| 字节占用 | 4字节 | 2字节 |
| 精度 | 高精度 | 相对较低,但许多情况下仍足够 |
| 内存占用 | 较大 | 较小 |
| 计算速度 | 较慢 | 较快 |
混合精度原理
混合精度指的是在模型训练中同时使用 FP16 和 FP32,以在计算中提高效率。
| 组件 | 使用精度 |
|---|---|
| 模型参数 | FP16 |
| 梯度 | FP32 |
| 累积值 | FP32 |
优势:混合精度可以减少内存占用和计算开销,加速训练过程,同时通过 FP32 保持关键计算的精度。
2. 半精度是什么?
半精度是指使用 16位二进制浮点数(half-precision floating point)来表示数字的数据类型,可以加速计算和减小内存占用。
3. 半精度的理论原理是什么?
半精度使用 16 位二进制浮点数来表示数字,其位分配如下:
| 组成部分 | 位数 | 说明 |
|---|---|---|
| 符号位(Sign) | 1位 | 表示正负号 |
| 指数(Exponent) | 5位 | 表示数值的范围 |
| 尾数(Mantissa) | 10位 | 表示数值的精度 |
与其他精度的对比
| 类型 | 总位数 | 符号位 | 指数位 | 尾数位 | 表示范围 | 精度 |
|---|---|---|---|---|---|---|
| 半精度(FP16) | 16位 | 1位 | 5位 | 10位 | 较小 | 较低 |
| 单精度(FP32) | 32位 | 1位 | 8位 | 23位 | 较大 | 较高 |
| 双精度(FP64) | 64位 | 1位 | 11位 | 52位 | 最大 | 最高 |
总结:相比于单精度(32位)和双精度(64位)的浮点数,半精度的表示范围和精度更小,但可以通过降低内存占用和加速计算来实现高效的运算。