深度学习工业界应用-加速-训练-MPI和RDMA

一. MPI要解决的问题

MPI是一门比较老的技术,在高性能计算界(特别是成熟的科学计算软件中)几乎是标配,其对高性能通信(特别是rdma)优化较好。
特定于机器学习任务,MPI最大的优势有两点。一是 MPI有一个高性能 allreduce的实现,底层实现了 tree aggregation。 二是程序可以无缝移植到异构高性能计算环境,例如 infiniband.

二. RDMA要解决的问题

Remote Direct Memory Access (RDMA)提供了一种跨过cpu,os和TCP/IP 协议栈直接访问远端内存到本地内存的方式。其有低延迟,低cpu使用率的有点,原理如下图。

深度学习工业界应用-加速-训练-MPI和RDMA_第1张图片
rdma2

RDMA 技术有好几种规范来达到:
InfiniBand: 这是正统,InfiniBand 设计之初就考虑了 RDMA,InfiniBand 从硬件级别保证可靠传输;
iWARP: 基于 TCP or SCTP 做 RDMA,利用 TCP or SCTP 达到可靠传输,对网络设备的要求比较少;
RoCE: 基于 Ethernet 做 RDMA,消耗的资源比 iWARP 少,支持的特性比 iWARP 多,需要FCoE做可靠传输。从wikipedia的评价看 RoCE 还是比正统的 InfiniBand 差点。
上面三种实现都是需要硬件支持的,IB 需要支持 IB 规范的网卡和交换机,iWARP 和 RoCE 都可以使用普通的以太网交换机,但是需要 支持 iWARP 或者 RoCE 的网卡
业界使用的比较多的MPI版本是mvapich2-2.2(基于MPICH-3.1.4)和MPICH-3

三. 机器学习平台中会用到的MPI的操作

深度学习工业界应用-加速-训练-MPI和RDMA_第2张图片
MPI常用操作
深度学习工业界应用-加速-训练-MPI和RDMA_第3张图片
操作的具体含义

另外的实现了如上操作,可以选择的技术是

  • Gloo: a collective communications library from facebook
  • 基于tcp的协议(如:zeromq)
  • 基于java的一个通讯库实现: ytk-mp4j

四. 结论

如果你训练的模型比较大,需要多机多卡的训练。如果你的训练通讯/计算的占比较高。这时候就需要针对通讯做优化。一个比较好的方式就是mpi + rdma on infiniband。一个具体的例子就是PaddlePaddle的实现RDMANetwork.h

五. 参考

1. 知乎:MPI 在大规模机器学习领域的前景如何?
2. MPI Tutorial
3. MPI Collective

你可能感兴趣的:(深度学习工业界应用-加速-训练-MPI和RDMA)