论文部分内容阅读
大数据为机器学习带来了机遇与挑战,一方面大数据允许机器学习训练更加复杂精确的模型进而发掘数据中的深度价值;另一方面功能强大的模型会产生109到1012数量级的参数,机器学习算法的迭代特性使得分布式节点之间需要频繁地传输这些参数,网络成为分布式机器学习系统的性能瓶颈。相比于传统以太网,高性能计算领域常用到的高速互联网络Infini Band及其提供的RDMA技术具有高带宽、低延迟、低CPU负载的优势,而如今像MXNet这些先进的分布机器学习系统还没利用这种性能优势。针对上述问题,本文主要工作如下:第一,测试与分析InfiniBand通信机制,确定了MXNet两种优化传输策略。通过分析InfiniBand架构,针对Infini Band所提供的通道语义和内存语义,实验测试SEND/RECEIVE操作、RDMA WRITE操作、RDMA READ操作在不同传输模式和不同传输消息大小下的性能表现。通过测试评估,发现UC模式下的SEND/RECEIVE更适合传输小数据,RDMA READ和UC模式下的RDMA WRITE更适合传输大数据。为MXNet确定了:SEND/RECEIVE+RDMA READ策略和SEND/RECEIVE+RDMA WRITE两种优化传输策略。第二,设计和实现了两种优化传输策略,替换MXNet系统本身传输模块使其支持RDMA。由于MXNet系统中的通信开销主要来源于迭代计算过程中ps-lite架构中worker节点和server节点之间的模型参数的交互,本文通过分析并改进系统中参数传递流程使其支持RDMA传输,具体设计和实现了之前提出的两种传输优化策略。实验结果表明两种优化策略改进后的ps-lite在传输操作push/pull上比未改进的ps-lite性能提升2~3倍。在MXNet上运行具体的机器学习应用时,改进的MXNet比未改进的MXNet的运行速度提升1~3倍。通过比较两种优化策略性能上的差异以及原因,为传输不同参数大小的应用如何选择两种优化策略提供了参考。第三,测试与分析RDMA管理内存的时间开销,设计并实现了高效的MXNet消息内存管理机制。从实验测试RDMA内存注册和解注册操作在不同内存大小的开销中发现,相比于传输操作,两种操作开销不容小觑。因此提出分开管理大小消息内存的方法:小消息所用内存只注册和解注册一次,并通过memcpy实现小消息内存的重用;大消息内存发送时再注册,通过实验确定了区分大小消息的内存阈值。最后,基于Boost库提供的fast_poll_allocator设计和实现了支持多线程的小消息内存池,能够实现内存重用和大大减少注册和解注册操作的频率,并且通过多个小消息内存池减缓多线程的竞争。