在深度学习中,几乎所有的运算都基于浮点数。计算机中常见的浮点数格式通常为单精度浮点和双精度浮点。
单精度浮点总共32位,由1位浮点数、8位指数位、23位尾数位构成。
这是Pytorch的默认数据类型 torch.float32, 其可表示的范围覆盖-3.4e+38~3.4e+38,精度高,动态范围大,几乎不会出现溢出或下溢。
64位,更高精度,由1位浮点数、11位指数位,32位尾数位构成。
因为成本太高,很少在深度学习中使用。
16位,由1位浮点数、5位指数位,10位尾数位构成。
动态范围比FP32小很多,但尾数精度仍然不错。
也是16位,不过是由1位符号数、8位指数位、7位尾数位构成。
与FP16不同的是,通过牺牲一些尾数精度,喊来与FP32几乎相同的动态范围(指数位同为8位)。
这是目前大模型训练中最常用的格式(尤其是混合精度训练)。
混合精度训练(AMP)让训练速度提升2-3倍,同时精度几乎无损。
NVIDIA A100及以后的GPU原生支持。