深度学习入门(三十九)计算性能——分布式训练、参数服务器
- 前言
- 计算性能——分布式训练、参数服务器
- 课件(分布式训练)
- 分布式计算
- GPU机器架构
- 计算一个小批量
- 同步SGD
- 性能
- 性能的权衡
- 实践的建议
- 总结
- 教材(参数服务器)
- 1 数据并行训练
- 2 环同步(Ring Synchronization)
- 3 多机训练
- 4 键值存储
- 5 小结
前言
核心内容来自博客链接1博客连接2希望大家多多支持作者
本文记录用,防止遗忘
参数服务器未完成,感觉暂时用不到
计算性能——分布式训练、参数服务器
课件(分布式训练)
分布式计算
GPU机器架构
计算一个小批量
每个计算服务器读取小批量中的一块
进—步将数据切分到每个GPU上
每个worker从参数服务器那里获取模型参数
复制参数到每个GPU上
每个GPU计算梯度
将所有GPU上的梯度求和
梯度传回服务器
每个服务器对梯度求和,并更新参数
同步SGD
- 这里每个worker都是同步计算一个批量,称为同步SGD
- 假设有n个GPU,每个GPU每次处理b个样本,那么同步SGD等价于在单GPU运行批量大小为nb的SGD
- 在理想情况下,n 个GPU可以得到相对个单GPU的n倍加速
性能
在单GPU上计算个样本梯度时间
假设有个参数,一个worker每次发送和接收个参数、梯度
发送和接收所用时间
每个批量的计算时间为
·选取足够大的使得
·增加或导致更大的批量大小,导致需要更多计算来得到给定的模型精度
性能的权衡
实践的建议
1、使用一个大数据集
2、需要好的GPU-GPU和机器-机器
3、带宽高效的数据读取和预处理
4、模型需要有好的计算(FLOP)通讯(model size)比
lnception > ResNet > AlexNet
5、使用足够大的批量大小来得到好的系统性能
6、使用高效的优化算法对对应大批量大小
总结
1、分布式同步数据并行是多GPU数据并行在多机器上的拓展
2、网络通讯通常是瓶颈
3、需要注意使用特别大的批量大小时收敛效率
4、更复杂的分布式有异步、模型并行
教材(参数服务器)
当我们从一个GPU迁移到多个GPU时,以及再迁移到包含多个GPU的多个服务器时(可能所有服务器的分布跨越了多个机架和多个网络交换机),分布式并行训练算法也需要变得更加复杂。通过细节可以知道,一方面是不同的互连方式的带宽存在极大的区别(例如,NVLink可以通过设置实现跨6条链路的高达100GB/s的带宽,16通道的PCIe4.0提供32GB/s的带宽,而即使是高速100GbE以太网也只能提供大约10GB/s的带宽);另一方面是期望开发者既能完成统计学习建模还精通系统和网络也是不切实际的。
1 数据并行训练
让我们回顾一下在分布式架构中数据并行的训练方法,因为在实践中它的实现相对简单,因此本节将排除其他内容只对其进行介绍。由于当今的GPU拥有大量的显存,因此在实际场景中(不包括图深度学习)只有数据并行这种并行训练策略值得推荐。下图描述了在多GPU训练节中实现的数据并行的变体。其中的关键是梯度的聚合需要在GPU 0上完成,然后再将更新后的参数广播给所有GPU。
回顾来看,选择GPU 0进行聚合似乎是个很随便的决定,当然也可以选择CPU上聚合,事实上只要优化算法支持,在实际操作中甚至可以在某个GPU上聚合其中一些参数,而在另一个GPU上聚合另一些参数。例如,如果有四个与参数向量相关的梯度,还可以一个GPU对一个)地进行梯度聚合。
2 环同步(Ring Synchronization)
3 多机训练
4 键值存储
5 小结