『机器学习』MLSys提前看 | 机器学习的分布式优化方法( 三 )



『机器学习』MLSys提前看 | 机器学习的分布式优化方法
本文插图

其中 , k 由 MWU 过程返回的树的数目控制 , 因此比图中的生成树的总数小得多 。
3、推广到多对多的情况
为了处理多对多的操作 , 作者利用了这样一个事实:在这些机器中发现的所有链接本质上都是双向的 , 因此可以创建一个无向图 , 用链接的一个方向运行多对一原语 , 并相应地在另一个方向运行一对多原语 。 这种使用两个无向树的策略也与 AllReduce 操作所需的消息数下限相匹配 。
AllReduce 的进程需要发送的最小消息数是 2x|(N-1)/N| 。 N 个顶点上的生成树包含 N-1 条边 , 并考虑了两个方向上的树(一个用于 Reduce , 一个用于 Broadcast) , 类似的 , 本文方法同样有 2x(N-1)条消息 。
4、处理复杂通信问题
处理复杂问题重点探讨的是处理复杂的 PCIe 和 NVLink 拓扑 。 使用 PCIe 和 NVLink 的主要挑战来自 NVIDIA 驱动程序不允许用户直接控制对两个链路的访问 , 如果检测到 NVLinks , 系统将自动启用使用 NVLinks 的 GPU 之间的 P2P 数据传输 。 作者通过实验发现 , 使用 cudaDeviceDisablePeerAccess 会禁用 NVLinks 并强制通过 PCIe 链路传输数据 。 然而 , 这仍然有一个局限性 , 即不能用这两组链接构造一个统一的拓扑 。 作者通过构造两个独立的树集来解决这个问题 , 一个在 PCIe 链路上 , 另一个在 NVLinks 上 。 这种方法的难点之一是平衡在每种链路类型上传输的数据量 , 作者使用的方法是最小化每个传输所花费的最大时间 , 即最小化 MAX(T_pCIe, T_NVL) , 其中 T_pCIe 和 T_NVL 表示每条链路上的数据总数 。 定义 D_total 为待传输的数据总量 , T_dpa 为调用 disable_peer_access()的延迟 , BW_PCIe 和 BW_NVL 表示为 PCIe 和 NVLink 树的带宽 , 通过使 T_PCIe=T_NVL 可以实现最佳的数据分割 。

『机器学习』MLSys提前看 | 机器学习的分布式优化方法
本文插图

其中 , T_dpa 由经验性测量得到并可能根据 GPU 的数量而变化 。
5、应对多服务器设置
【『机器学习』MLSys提前看 | 机器学习的分布式优化方法】最后 , 作者以 DGX-2 和多机训练为例 , 讨论如何应对多服务器设置 。 DGX-2 由 16 个通过 NVSwitch 连接的 V100 GPU 组成;每个 GPU 通过 6x NVLink 连接到 switch 。 在 DGX-2 上 , Blink 为 AllReduce(reduce broadcast)生成的生成树为:对于 mGPU , 每个 GPU 充当 1/m 个数据块的根 , 每个根直接连接到(m-1)个叶节点 , 从而生成 m 个一跳(one-hop)树 。 当训练任务的 GPU 跨越多个服务器、通过交换机或交换机层次结构连接时 , Blink 使用三相协议 , 如图 4 所示 。 其中 , 第一个阶段对本地生成树上的每台服务器进行缩减—每台服务器中的每棵树的根会像以前一样聚合来自其子级的数据 。 第二个阶段跨服务器进行 reduce 广播(类似于 DGX-2 中的内容)–跨 n 个服务器 , 有 n 个单跳跨服务器树 , 每个服务器的本地根连接到其他服务器上的(n-1)个根 。 第三阶段根据每个服务器的本地根目录 , 将第二阶段的结果广播给服务器中的所有节点 。

『机器学习』MLSys提前看 | 机器学习的分布式优化方法
本文插图

图 4. 用于跨服务器设置的三相 AllReduce 协议 , 其中 X_m,g 表示服务器 m、GPU g 上的数据分区
【实验分析】
首先 , 作者给出了本文提出的包装生成树的理论效益 。 在 V100 和 P100 机器上 , 实验比较了 NCCL 在给定拓扑中创建的环的数量和 Blink 打包的所有可能分配的生成树的总重量(从 3GPU 到 8GPU) 。 我们使用广播和 AllReduce 所需消息的下限(分别为 [(N-1)/N] 和 [2x(N-1)/N])将其转换为广播速率 。 对于 8GPU 的情况给出了 4 个环 , 每个环将在 8/14 的链路带宽下工作 , 对于 4 个这样的环 , 有效速率是 32/14 。 实验中 , 近似 PCIe 环的带宽为 NVLink 环带宽的一半 。 实验结果如图 5 , 在所有情况下包装生成树的速度与使用环一样快 , 而在某些情况下(即环必须通过 PCIe) , 包装生成树的速度达到了环的 6 倍 。


推荐阅读