提高运算速度,减少GPU占用内存的方法有很多,其中减少精度的方法对大多数实验结果都没有太大影响。在这里使用Apex比使用pytorch的half靠谱多了.
Apex
Apex具体的介绍可以看这篇文章:基于Apex的混合精度加速
安装
如果直接使用pip install apex安装,可能在运行的时候得到下面的错误:
1 | TypeError: Class advice impossible in Python3. Use the @Implementer class decorator instead |
这时候你需要使用下面的方式安装:
1 | pip uninstall apex |
使用方法
使用方法只有简单的三行代码:
1 | from apex import amp |
多网络,bn同步,多卡等情况:
1 | from apex import amp |
opt_level参数设置
O0:纯FP32训练,可以作为accuracy的baselineO1:混合精度训练(推荐使用),根据黑白名单自动决定使用FP16(GEMM, 卷积)还是FP32(Softmax进行计算。O2:“几乎FP16”混合精度训练,不存在黑白名单,除了Batch norm,几乎都是用FP16计算。O3:纯FP16训练,很不稳定,但是可以作为speed的baseline
结果
没有使用前,在1080上使用GPU的内存大小为12G,用了之后降到7.8G。可见效果还是好的。不过计算速度方面没有统计。
