混合精度训练
最近刚好在做相关工作,所以花点时间对混合精度进行模型训练进行一下理解与总结.详细数据请参考百度与nvidia联合放在arxiv上的论文:https://arxiv.org/pdf/1710.03740.pdf
概述
深度学习模型的计算任务分为训练和推理.训练往往是放在云端或者超算集群中,利用GPU强大的浮点计算能力,来完成网络模型参数的学习过程.一般来说训练时,计算资源往往非常充足,基本上受限于显存资源/多节点扩展/通讯库效率的问题.相对于训练过程,推理往往被应用于终端设备,如手机,计算资源/功耗都收到严格的限制,为了解决这样的问题,提出了很多不同的方法来减少模型的大小以及所需的计算资源/存储资源.模型压缩除了剪枝以外,还有一个方法就是降低模型参数的数值精度.随着网络深度的加大,带来的参数数量也呈现指数级增长,如何将最终学习好的网络模型塞入到终端设备有限的空间中是目前很多性能优良的网络真正应用到日常生活中的一大阻碍.
本文主要讨论如何降低模型训练时的数值精度来加速训练过程.现在的模型训练过程基本上使用单精度和双精度,如果网络模型很大,那么受限于显存空间(最新的volta 100是16G),batch size就会非常小.