CUDA的数据类型
低精度float(fp8/fp4)
fp8/fp4都是低精度浮点数格式(floating point formats),用于加速推理过程、降低内存带宽和显存占用
从存储位数角度,它们的确就占8位/4位
| 格式 | 总位数 | 结构(通常) | 是否浮点数 |
| FP32 | 32 | 1位符号 + 8位指数 + 23位尾数 | 是 |
| FP16 | 16 | 1 + 5 + 10 | 是 |
| FP8 | 8 | 常见有两种格式(E5M2和E4M3) | 是 |
| FP4 | 4 | 通常是1位符号 + 3位数值/指数 | 是/伪浮点或量化近似 |
存在的意义是什么?
训练的时候不会用这么低的精度,但是推理的时候可以转化成这种低精度使用:
不是直接训练用FP8/FP4,而是使用称为量化(Quantization)的方式,把FP16/FP32训练好的模型“压缩”成FP8或FP4;
推理中会用更复杂的 量化感知技巧(如GPTQ、AWQ、SmoothQuant等),尽可能保留原始数值的分布特性;
一些关键层(如注意力的缩放因子)会保留为FP16或INT8,提高稳定性;
最新的GPU(如NVIDIA Hopper架构)支持原生FP8硬件加速(如NVIDIA H100支持FP8 TensorCore),处理速度非常快;
TF32
为什么TF32这么「奇怪」?
AI回答:
TF32 只用了 19 个 bit 来表示有效信息(1 符号 + 8 指数 + 10 尾数);
但它依然占 32 bit 的存储和数据通道带宽;
这是为了:
兼容 FP32 数据格式(硬件级);
充分复用 NVIDIA Tensor Cores 上的 FP32 乘加矩阵路径;
在牺牲部分精度的同时,大幅提升速度和吞吐量(训练更快)。