浮点数精度:双精度(FP64)、单精度(FP32、TF32)、半精度(FP16、BF16)、8位精度(FP8)、4位精度(FP4、NF4) 量化精度:INT8、INT4 (也有INT3/INT5/INT6的)
精度高肯定更准确,但是也会带来更高的计算和存储成本。较低的精度会降低计算精度,但可以提高计算效率和性能。
双精度比单精度表达的更精确,但是存储占用多一倍,计算耗时也更高,如果单精度足够,就没必要双精度。 双精度和单精度是为了计算,而半精度更多是为了降低数据传输和存储成本。
在计算机中,浮点数存储方式,由由符号位(sign)、指数位(exponent)和小数位(fraction)三部分组成。符号位都是 1 位,指数位影响浮点数范围,小数位影响精度。
FP64,是 64 位浮点数,由 1 位符号位,11 位指数位和 52 位小数位组成。
FP32、FP16、FP8、FP4 都是类似组成,只是指数位和小数位不一样。
FP8 格式有两种变体,E4M3(4位指数和3位尾数)和 E5M2(5位指数和2位尾数)
英伟达针对机器学习设计的一种特殊的数值类型,用于替代 FP32。首次在 A100 GPU 中支持。
由 1 个符号位,8 位指数位(对齐 FP32 )和 10 位小数位(对齐 FP16 )组成,实际只有 19 位。
由 1 个符号位,8 位指数位(和 FP32 一致)和 7 位小数位(低于 FP16 )组成
精度低于 FP16,但是表示范围和 FP32 一致,和 FP32 之间很容易转换。
NF4 是建立在分位数量化技术的基础之上的一种信息理论上最优的数据类型。把 4 位的数字归一化到均值为 0,标准差为 [-1,1] 的正态分布的固定期望值上
Int4 取值范围是 -8 ~ 7
Int8 取值范围是 -128 ~ 127
Int16 意思是 16 位整数(16bit integer),相当于 short 占 2 个字节 -32768 ~ 32767
Int32 意思是 32 位整数(32bit integer), 相当于 int 占 4 个字节 -2147483648 ~ 2147483647
Int64 意思是 64 位整数(64bit interger), 相当于 long 占 8 个字节 -9223372036854775808 ~ 9223372036854775807
多精度计算,是指用不同精度进行计算,在需要使用高精度计算的部分使用双精度,其他部分使用半精度或单精度计算。
混合精度计算,是在单个操作中使用不同的精度级别,从而在不牺牲精度的情况下实现计算效率,减少运行所需的内存、时间和功耗