赞
踩
核心内容来自博客链接1博客连接2希望大家多多支持作者
本文记录用,防止遗忘
参数服务器未完成,感觉暂时用不到
每个计算服务器读取小批量中的一块
进—步将数据切分到每个GPU上
每个worker从参数服务器那里获取模型参数
复制参数到每个GPU上
每个GPU计算梯度
将所有GPU上的梯度求和
梯度传回服务器
每个服务器对梯度求和,并更新参数
t
1
=
t_1=
t1=在单GPU上计算
b
b
b个样本梯度时间
假设有
m
m
m个参数,一个worker每次发送和接收
m
m
m个参数、梯度
t
2
=
t_2=
t2=发送和接收所用时间
每个批量的计算时间为
m
a
x
(
t
1
,
t
2
)
max(t_1,t_2)
max(t1,t2)
·选取足够大的
b
b
b使得
t
1
>
t
2
t_1>t_2
t1>t2
·增加
b
b
b或
n
n
n导致更大的批量大小,导致需要更多计算来得到给定的模型精度
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的带宽);另一方面是期望开发者既能完成统计学习建模还精通系统和网络也是不切实际的。
让我们回顾一下在分布式架构中数据并行的训练方法,因为在实践中它的实现相对简单,因此本节将排除其他内容只对其进行介绍。由于当今的GPU拥有大量的显存,因此在实际场景中(不包括图深度学习)只有数据并行这种并行训练策略值得推荐。下图描述了在多GPU训练节中实现的数据并行的变体。其中的关键是梯度的聚合需要在GPU 0上完成,然后再将更新后的参数广播给所有GPU。
回顾来看,选择GPU 0进行聚合似乎是个很随便的决定,当然也可以选择CPU上聚合,事实上只要优化算法支持,在实际操作中甚至可以在某个GPU上聚合其中一些参数,而在另一个GPU上聚合另一些参数。例如,如果有四个与参数向量相关的梯度
g
1
,
…
,
g
4
\mathbf{g}_1, \ldots, \mathbf{g}_4
g1,…,g4,还可以一个GPU对一个
g
i
(
i
=
1
,
…
,
4
\mathbf{g}_i (i = 1, \ldots, 4
gi(i=1,…,4)地进行梯度聚合。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。