分布式深度学习系统-资源调度
一. 为什么分布式训练
深度学习需要大量数据,实践证明多机多卡可以让算法研究人员更多的调整网络和参数已达到模型可用的状态(hyper parameters)。多数情况下我们会采用数据并行(更稳定的收敛)的训练方式,一个更好的理解数据并行和模型并行的文章来自李沐【谈谈你对"GPU/CPU集群下做到Data/Model Parallelism的区别"的理解?】
模型并行vs数据并行二.现有资源调度器对比
构建深度学习集群可以更好的利用gpu资源。在闲时可以使用多机多卡来快速训练网络。这其中的技术难点主要是资源调度器。细数国内外互联网巨头,他们都有自己的资源管理系统,比如Google的Borg,Twitter的Mesos,阿里巴巴的Fuxi,微软的Apollo等。
1. YARN是hadoop开源的第二代资源管理器,在分布式mr和spark都有应用。
YARN的架构如下图:
YARN架构
说明:
- ResourceManager包括Scheduler和ApplicationsManager,其中Scheduler负责汇总Node Manager上报的资源信息。ApplicationsManager调度资源给job,启动app master。Scheduler可以根据不同的应用场景使用不同的plugin,比如:FairScheduler和CapacityScheduler
- Node Manager 每个机器上一个,负责汇总本地资源信息,监控本地container执行情况
- App Mstr每个job一个,负责启动、恢复container的执行情况
YARN作为资源调度器,在实际使用中应该有的特性
- 份额限制(Quota)和进入控制(admission control)
支持不同的queue,权限控制 - 作业优先级与资源抢占
高优先级的抢占定期运行的job - 服务高可用问题
zookeeper集群 - 日志统一收集和滚动
mesos/YARN可通过上层框架解决,比如Mesos中的 aurora和Marathon,YARN中的Twill和Slider,这个对类似tensorboard可视化工具比较关键
2. 另一个使用较多的资源调度器是Mesos
Mesos架构图如下:
Mesos架构
说明
Mesos的架构更加简洁
- Agent负责收集node的资源使用信息给master
- framework 包含调度器和执行器2部分。调度器向Mesos master注册并申请资源。执行器会被分发运行在申请到的node上
Mesos vs YARN二者侧重点的区别,主要如下图:
Mesos vs YARN功能对比
值得说明的是:mesosphere,结合mesos和容器化等技术,实现了DataCenter的“操作系统”,能够快速搭建后端服务集群
三.业界深度机器学习平台使用调度器情况
Yahoo为了复用已经规模化成熟的hadoop,spark集群。引入了CaffeOnSpark。其另一个好处是:复用集群,大量数据不用在集群之间相互copy。相关新闻blog。CaffeOnSpark会作为spark的第三方包被安装部署到集群。
Server-to-server direct communication (Ethernet or InfiniBand) achieves faster learning and eliminates scalability bottleneck.
支持InfiniBand,rdma 更快速的通讯
Incremental learning is supported to leverage previously trained models or snapshots.
支持fine-tune
四.mpi on YARN的例子
分布式深度学习为了优化通讯一般会使用mpi,在YARN和Mesos上都可以运行mpi。其中mpi on YARN的一个例子mpich2-yarn
实现一个可以运行在YARN上的应用程序需要实现2各组件。
1.Client
其主要负责提交应用程序和管理应用程序
2.AppplicationMaster
其主要负责程序的任务切分,调度和监控等等