Resnet训练性能优化
1 训练
可以从三个维度展开优化:1. 深度神经网络结构优化2. 分布式训练框架优化 3. 深度学习训练算法优化。
1.1 深度神经网络结构优化
网络结构是基于经典的ResNet50结构,在训练中使用128*128的低分辨率输入图片来提升训练的速度,对训练精度产生了一定影响,原始模型无法在维持训练epoch数的情况下将模型训练到指定的top5 93%精度。通过对ResNet50中的BottleNeck卷积结构进行了优化,针对低分辨率的输入图片优化了其中的降采样方法,使得模型前向计算中的降采样信息损失更小,从而在低分辨率训练模式下也能够稳定达到目标精度。
1.2 分布式训练框架优化
深度学习训练过程涉及大规模的参数的网络间传递。Tensorflow使用中心化的网络参数服务器(Parameter Server)来承担梯度的收集、平均和分发工作,对server节点的访问会成为瓶颈,带宽利用率低。为此使用double binary tree模式的AllReduce算法来进行梯度聚合来优化带宽。
同时对传输的梯度进行融合,对小于阈值大小的梯度多次传输合并为一次,提升了带宽利用率;另外在通信底层采用NVIDIA的NvLink、P2P、GDR技术来提升节点内和节点间通信带宽,降低通信时延。
1.3 深度学习训练算法优化
大规模分布式训练过程中使用的全局batch size会很大,比如32768,这样的超大batch size提升了训练的并行度,但也导致了收敛精度降低的问题。为此可以使用由You et al.在《Large Batch Training of Convolutional Networks》中提出的层次自适应速率缩放(LARS)算法,并在此基础上需要针对Batch Normalization和Bias不做正则化的情况对LARS算法进行了对应的优化。
在全局学习率调度方面,可以使用带warmup的linear cosine decay scheduler,训练优化器则可以采用与学习率相适应的动态momentum算法。
- 点赞
- 收藏
- 关注作者
评论(0)