目录
Automatic Mixed Precision(AMP)
双/单/半精度浮点数
以下简单对比双/单/半精度浮点数:
双精度浮点数:FP64(64bits=8bytes)
单精度浮点数:FP32 (32bits=4bytes)
半精度浮点数:FP16 (16bits=4bytes)
可以看到,双/单/半精度浮点数表示的范围不同,因此存储它们所需要的硬件内存也不同了。
其中,一个FP16浮点数占用内存是FP32的一半,但是它所表示的范围也大大减少,因此,纯粹使用FP16进行模型训练,会带来严重的精度损失,甚至造成梯度underflow(下溢出)。
比较FP32&FP16
FP32的动态表示范围更大,在小数累积上有更高的精度;FP16的动态表示范围小,小数累加会丢失精度,但模型训练更快,且内存使用更高效。
某些OP要求有FP32的精度范围,比如:reductions, exponentiation.
对于V100来说,
FP32 | FP16 with Tensor Cores |
1 x compute throughput | 8 x compute throughput |
1 x memory throughput | 2 x memory throughput |
1 x memory storage | 1/2 x memory storage |