|
目录
一、fp16和fp32介绍
二、为什么应用fp16训练:
三、应用fp16存在问题
四、实践对比
引用:
一、fp16和fp32介绍
- fp16是指采用2字节(16位)进行编码存储的一种数据类型;同理fp32是指采用4字节(32位);
 - 如上图,fp16第一位表示+-符号,接着5位表示指数,最后10位表示分数;
- 公式:
 - 其中,sign位表示正负,exponent位表示指数( ),fraction位表示的是分数( )。其中当指数为零的时候,下图加号左边为0,其他情况为1。
- 具体计算情况可分为下面三种:
 - Exp:
 - 所以可以计算出,fp16值动态区间
:精度其实为 - fp32值动态区间:

二、为什么应用fp16训练:
- fp16和fp32相比对训练的优化:
- 1.内存占用减少:很明显,应用fp16内存占用比原来更小,可以设置更大的batch_size
- 2.加速计算:加速计算只在最近的一些新gpu中,这一块我还没有体验到好处...有论文指出fp16训练速度可以是fp32的2-8倍
三、应用fp16存在问题
四、实践对比
实践代码:
from apex import amp
model, optimizer = amp.initialize(model, optimizer, opt_level="O1") # 这里是“欧一”,不是“零一”
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
- 这里我直接应用fairseq代码的fp16参数:gpu用1080Ti简单试验了下
- fp16:
   - fp32:
   - 总结:1080Ti应用fp16确实可以省内存,但是理论上是不能加速的啊,这里小朋友有比较多问号???
- 混合精度加速,需要用到 Volta 结构的GPU,只有V100 和 TITAN V 系列是支持 TensorCore 加速计算

引用:
|