以下是 Safertensor 模型权重文件中常见数据格式(fp32/fp16/fp8/int4)的对比表格,包含存储形式、精度、应用场景等核心信息:
数据类型 | 存储形式 | 位宽 | 指数位 | 尾数位 | 数值范围 | 计算精度 | 存储空间节省 | 典型应用场景 |
---|---|---|---|---|---|---|---|---|
FP32 | 单精度浮点数(IEEE 754标准) | 32-bit | 8 | 23 | ±1.7e38 | 最高 | - | 全精度训练/推理 |
FP16 | 半精度浮点数(IEEE 754标准) | 16-bit | 5 | 10 | ±65504 | 中等 | 约50% | 混合精度训练/推理(GPU支持) |
FP8 | 8位浮点数(多种变体) | 8-bit | 4或5 | 3或2 | E4M3: ±448, E5M2: ±57344 | 低 | 约75% | 高性能推理(NVIDIA Hopper等) |
INT4 | 4位整数(通常以打包形式存储) | 4-bit | - | - | 有符号:-8~7 无符号:0~15 | 极低(需反量化) | 约87.5% | 边缘设备/超低比特量化推理 |
关键说明
-
FP32
- 标准浮点格式:全精度计算,适合模型训练和高精度推理。
- 存储形式:直接存储为32位二进制浮点值。
-
FP16
- 混合精度训练:通过降低精度减少显存占用,需结合梯度缩放(Grad Scaling)避免下溢出。
- 硬件支持:现代GPU(如NVIDIA Tensor Core)原生支持FP16加速。
-
FP8
- 变体差异:
- E4M3(4指数位 + 3尾数位):范围小,适合小数值范围计算。
- E5M2(5指数位 + 2尾数位):范围大,精度更低。
- 硬件依赖:需专用硬件支持(如NVIDIA H100 GPU)。
- 变体差异:
-
INT4
- 量化与打包:通常将多个INT4值压缩到单个字节中(如2个4-bit值存为1个8-bit字节)。
- 推理优化:需反量化(Dequantization)恢复为FP32/FP16后再计算,牺牲精度换取速度和存储效率。
Safetensors 中的实际存储
- 文件格式无关性:Safetensors仅定义安全的存储协议,不限制具体数值格式(支持任意
dtype
)。 - 混合存储:同一文件中可包含多种精度权重(如部分层用FP16,其他用INT4)。
- 加载与转换:需框架(PyTorch/TensorFlow等)支持对应数据类型的反序列化。
选择建议
场景 | 推荐格式 | 原因 |
---|---|---|
模型训练 | FP32/FP16 | 保证数值稳定性 |
云端GPU推理 | FP16 | 平衡速度与显存占用 |
边缘设备部署 | INT4 | 极致压缩模型体积 |
新一代GPU推理(H100等) | FP8 | 硬件原生支持,吞吐量最大化 |