MLSys-分布式机器学习系统学习笔记

Federated Learning

机器学习往往需要非常大的数据量以及非常大的计算能力才能完成,现在的市场环境需求对数据量和计算能力的要求有了进一步的提升,因此促使了分布式机器学习系统的蓬勃发展。

首先可以把分布式机器系统分成两个角度进行研究:

ML角度

从ML的角度做,主要是发明或改进分布式训练算法,保证在分布式加速的同时,仍然能达到原来的学习效果(loss/accuracy)。因此很多工作也被投在像ICML、NIPS这种专业ML会议上。主要用到的方法包括优化(optimization)和统计学习理论(statistical learning theory)。

还有一类工作涉及到如何把单机算法改造成分布式,比如同步/异步SGD等。这里主要涉及到的问题是如何降低分布式环境下的通信开销,提高加速比。

System角度

同时分布式机器学习系统的具体研究问题主要有以下几种:

分布式机器学习系统设计

最著名的就是几大分布式DL模型:Parameter Server / AllReduce等。

个人感觉这里面一个可以挖的坑是Decentralized Training。

边缘计算

很多ML模型是需要在手机上运行的(比如毁图秀秀)。针对这一场景,一个是要对手机这种低功耗设备对ML model进行裁剪加速(后面会提到),还有一个要做的就是运行在多个device上的分布式ML。

这里有个最近非常火的概念:Federated Learning。其实本质还是炒数据并行的冷饭,不过应用场景比较不一样。FL更多是为了Privacy的考虑,而分布式加速训练在这里倒是个次要目标。FL还涉及到了模型聚合[ch8],也就是如何把多个device本地训练出的模型合并到一起。

计算资源的分配

这里的计算资源的数量级是很大的……比如工业界会有万台CPU服务器 / 上千台GPU服务器搭建的DL平台。这个小方向要解决的问题就是如何充分利用它们的性能。比如在阿里PAI组的JD里就有这么一条:“设计探索高效的分布式Placement算法,以更系统化的方式来解决大规模深度学习高效训练的问题”。

这方面比较早的工作大概是这篇paper,说的是如何为TensorFlow计算图里的不同算子分配不同的device,最后用强化学习实现了这个目标。这个工作看起来有点prototype,但提出了一个新的思路。另外还有很多猛如虎的类似Train XX model in y minutes的工作。这种就不仅是placement好就能完成的了,还需要涉及系统拓扑的设计、降低communication开销等等。

对于集群调度,工业界的一个热点是使用容器平台(例如k8s)来运行分布式机器学习应用。虽然k8s本身就有容器集群调度的功能,但为了让它更好地适应ML的workload,人们开发了一些新的轮子,比如针对TensorFlow(Parameter Server模型)和PyTorchKubeFlow。还有用k8s来跑AutoML的katib。学术界对这方面的一个研究热点是GPU集群调度。

通信优化

传统搞网络/分布式系统的组比较契合这个小方向。主要是一些宏观的模型

数据库存储

  • 训练数据的规模是很大的。如何为ML设计一个专用的文件系统(类似大数据界的HDFS)或者数据库来加速读数据呢? 类似的工作有管理ML model的ModelDB.
  • 在ML framework中,以及Parameter Server中,需要用一个KV storage system来存储参数。可不可以针对ML的场景优化这个KV存储系统呢? 关于这个可以参考neopenx大神的blog

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注