Adam:大规模分布式机器学习框架

引子

转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/46676515

又是好久没写博客,记得有一次看Ng大神的访谈录,如果每周读三篇论文,那么经年以后,必然成为对某个领域非常熟悉的人。

可惜,在忙忙碌碌中,我竟然做不到这一点。但是,我目前的打算是尽心尽力的去做,哪怕一周只读一篇呢。胡适先生曾说过:“怕什么真理无穷,进一步有进一步的欢喜”。然而,这其中的区别在于,我还没有达到追求真理的高度,我就是想看看这个技术是咋子回事塞。

我想,对于很多像我这样非科班出身自己学ML的人来说,肯定有很多时候感觉自己对ML的理论推导之类的事情捉襟见肘,虽然很多时候想下狠心自己去恶补一下数学啥的,然而却并没有什么卵用。不得不承认,有些东西还是得有人指点才能一步一步扎实的往下学,自己无头苍蝇般瞎学很快便会耗尽精力与热情,我想这恐怕就是读博的必要性了吧。

然而对于只想安静的做一个程序员的我来说,换一个角度思考一下,如果要做一个出色的程序员的话,其实过多的理论恐怕也是不需要的,多了解一些算法的实现或许更有好处。所以,我觉得本片博客更偏向于实用,因为它并非在理论上做了大的改进而提高的效果,而是一个分布式机器学习算法的实现。

Adam

关于Adam的报道,参见[3].

本片博客是阅读论文所得的笔记,论文中得配图均来自与论文,论文名称见参考文献[1].

Adam是微软研究院的深度学习项目,该项目仍然是应用卷积神经网络进行图像分类,效果提高了很多,但从我读论文的角度看,adam更偏向于分布式框架的实现,而非理论的创新,自Alex和Hinton在2012年发出[2]以后,其实卷积神经网络的核心并没有大改,然而将卷积神经网络从学术界引领到工业界,我觉得adam的贡献匪浅。

那么,为什么需要adam这样的框架呢?

  1. 机器学习方法一箩筐,但只有卷积神经网络可以hold住图像,因为图像语音类的数据太难提取特征所致。
  2. 卷积神经网络早就出现,为何现在才发挥威力,主要得益与计算能力的提升。
  3. 要想得到好效果,想在的计算能力还不够,必须得大数据+大模型才好,所以为了解决大模型日益增长的计算能力需求和现在挫挫的计算机之间的矛盾,adam横空出世,没有条件创造条件也要上,把数十上百台机器有效的连接起来,形成强大的计算能力。

ok,话不多说,软话说完,开始说技术吧,如有纰漏,还望指正。

Architecture

Adam框架仍然基于Multi-Spert架构,这个架构的大体含义就是将集群分为如下几个部分:

  1. 数据服务类。存储数据,数据备份。向计算节点提供数据。
  2. 训练模型类。训练模型,然后更新参数。
  3. 参数服务器。维护一个共享的模型,计算节点计算完成后,可以向参数服务器发送请求更新参数。

Data Serving

有专门的服务器用作提供数据,这些服务器在提供数据的同时还会提前对图像做一些变换(反转、倾斜等)。

在提供数据的时候,使用预载入内存的方式进行加速,使用后台进程进行异步I/O把将被访问的图像预先成批载入进内存,使得将被访问的图像一直处于内存中。

Model Training

adam训练的仍然是Alex提出的那个模型,五个卷积层搭配三个全连接层。在adam中,将这些模型垂直切分。如下所示:

Multi-threaded Training

单台机器上的模型都是多线程训练的,这些线程共享一个模型参数。

在运行过程中,每个线程被分配不同的图片进行训练。

然而每个线程的上下文的运算环境(包括正向计算和反向传播)都是单独的,上下文运算环境被预先分配好来防止堆锁。

上下文环境和每个线程的中间结果的缓存都使用NUMA-aware分配空间来减少cross-memory bus traffic。

Fast Weight Updates

为了加速训练,对共享的模型参数的局部更新是不加锁的。每个线程都计算权重更新值然后直接更新模型。

当然,这会导致不一致性,但实验证明,这样的更新方式仍然可以收敛。

收敛的原因可能是因为神经网络的弹性可以hold住这样的不一致所带来的噪声。后面还会提到,可能正是因为这样的噪声,使得模型的泛化能力更加强大。

Reducing Memory Copies

因为模型的数据需要在层与层之间传递,而模型又是被切分的,故而很多数据的传送是非本地的。

对于本地传送,传递指针而非值。

对于非本地传送,构建了基于windows socket API的网络库,加速数据传送,具体信息不详。

使用了静态模型切分来优化模型间需要传递的信息量。(静态模型切分是啥?)

使用引用计数来保证异步网络IO的安全性。

Memory System Optimization

对模型进行切分,直到单次训练的内存可以Fit到L3缓存中。 L3缓存比主存在浮点数单元上的使用上更不受内存带宽的影响。

前向计算和反向传播的计算都有很好的计算上的局部性需求,因而,将数据打包然后使用矩阵运算更容易利用局部性和浮点计算单元。

Mitigating the Impact of Slow Machines

即便机器的配置是一样的,在模型运算过程中仍然会有快慢之分。

为了避免快机器上的线程被慢机器上的线程拖累,允许线程并行的处理多张图像,使用一个数据流框架,当数据到来时,触发一张图像上的处理流程。

每次迭代结束的时候,往往需要等待所有图像都处理完然后再在验证集上计算错误率再决定下次迭代是否需要。然而这就麻烦了,需要等待最慢的机器也跑完。故而,设计了一种策略,在75%的图像处理完之后,就开始评测模型,并觉决定是否有下次迭代。在75%设定之后,使用随机化方法保证同样的集合下次不能被跳过。这种策略可以加速20%以上。

Parameter Server Communication

设计了两种模型更新方法:

  • 本地计算参数更新值,当处理k张图像后,向parameter server发送更新请求,然后parameter server直接更新参数。这种方法对卷积层比较适合,因为卷积层的参数有很多都是共享的。对于全连接层,有太多的权重需要更新了,这种方式消耗太大。需要采用下面的方法。
  • 与其传送参数更新,不如传送激活值和错误梯度向量,然后激活值和错误梯度向量在parameter server上进行矩阵计算得到权重更新。这样就将M×N的数据传送量变为k×(M+N),这样做的第二个好处就是将有些计算搬到parameter server上来,增强了系统的平衡性。

Global Parameter Server

Parameter Server的架构如下,这是一个标准的传统分布式的k-v存储结构,但是对于要训练卷积神经网络来说,参数的更新速度太快了,还需要优化。

Throughput Optimizations

模型的参数被切分成1M大小的shards,这些shards被哈希到不同的存储桶中,然后平均的分到各个参数服务器中。这样的方法增加了空间局部性,更新时也易于负载均衡。

批量更新参数。有益于局部性,缓解了L3的压力。

参数服务器使用SSE/AVX指令。所有的处理都是NUMA aware。(这条我并不清楚说的是啥,和硬件相关)。

使用无锁的队列结构和哈希表结构来加速网络传输、更新和硬盘IO处理。

通过内存池实现了无锁内存分配。

Delayed Persistence

为了增大吞吐量,将持久化从更新过程中去耦合划分出来。参数存储被建模成为一个回写缓存,脏数据块被后台异步的回写回去。

部分的数据丢失也是可容忍的,因为DNN模型有弹性嘛。然而,对于丢失的数据,很容易可以重新训练出来。

延迟持久化还可以允许压缩回写,由于参数更新的可加性,缓存更新很多轮后,才有一次回写也是可以的。

Fault Tolerant Operation

每个参数都是三份缓存。这些参数服务器的分配信息保存在一个参数服务器控制器的机器上。控制器和参数服务器通过心跳同步。

在参数更新时,备份服务器和主服务器通过心跳同步。

当有一台机器丢失心跳后,控制器重新选择主服务器。

Evaluation

在ImageNet所有的22000个类上进行实验,使用top-1准确率进行评估。

Model Training

在没有参数服务器的情况下,训练模型,看看每秒钟可以训练多少链接。可以看到,加速比是超线性的,因为机器越多,内存越大,数据在内存中,自然快。

Parameter Server

加上参数服务器后,再看看加速比情况。可以发现,加速比比纯本地计算要少,但克服了8机器时的权重更新方法遇到的瓶颈。

Scaling with more workers

将用于训练的机器增多,查看加速比。用于训练的机器增多,保证每台机器上的参数数目不变,增大模型大小,从而机器数目增多,但由图可见,网络上的通信并未影响加速。

Scaling with more Replicas

模型大小不变,但增大参数的副本数目,也就是说,数据的并行化变大了。看看加速情况。

performance

效果如下,提升大大滴。随着模型变大,效果也变得越好。

总结

论文的主要贡献:

  1. 通过设计系统,优化和平衡计算和通信。最小化分布式模型的内存带宽使用和机器间的通信。
  2. 利用机器学习训练过程对不一致性的容忍,提高效果和集群扩展性。使用多线程模型、无锁更新、异步批量更新技术等提高可扩展性。另外,异步训练也有助于提高算法效果。
  3. 证明了系统性能、可扩展性和异步训练都有助于提高模型准确率。使用少于30台机器训练了一个20亿连接的模型,在ImageNet的22000类数据上达到两倍于之前的准确率,数据足够的情况下,模型越大,效果越好。

参考资料

[1]. Chilimbi T, Suzue Y, Apacible J, et al. Project adam: Building an efficient and scalable deep learning training system[C]//11th USENIX Symposium on Operating Systems Design and Implementation (OSDI 14). 2014: 571-582.

[2]. Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.

[3]. http://www.tuicool.com/articles/IbAZFb

时间: 2024-08-11 15:38:19

Adam:大规模分布式机器学习框架的相关文章

分布式机器学习的集群方案介绍之HPC实现

机器学习的基本概念 机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法.目前机器学习广泛应用于广告投放.趋势预测.图像识别.语音识别.自动驾驶和产品推荐等众多领域. 在确定了问题模型之后,根据已知数据寻找模型参数的过程就是训练,训练过程就是不断依据训练数据来调整参数的迭代,从而使依据模型作出的预测结果更加准确. HPC的基本概念 HPC就是高性能计算或高性能计算集群的简写.为了追求高性能,HPC的工作负载一般直接运行在Linux系

《分布式机器学习:算法、理论与实践》PDF+刘铁岩+资料学习

<分布式机器学习:算法.理论与实践>旨在全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 下载:https://pan.baidu.com/s/1XeOGCQK5qWCba8VK0KU21w<分布式机器学习:算法.理论与实践>PDF,273页,带书签目录,文字可以复制. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>旨在全面介绍分布式机器学习的现状,深入分析其中的核心技术

机器学习资料《分布式机器学习算法理论与实践》+《白话机器学习算法》+《Python机器学习基础教程》

机器学习正在迅速改变我们的世界.我们几乎每天都会读到机器学习如何改变日常的生活. 人工智能和大数据时代,解决最有挑战性问题的主流方案是分布式机器学习! <分布式机器学习:算法.理论与实践>电子书资料全面介绍分布式机器学习的现状,深入分析其中的核心技术问题,并且讨论该领域未来的发展方向. 我认为第3章到第8章是核心,讲解分布式机器学习的框架及其各个功能,分别针对其中的数据与模型划分模块.单机优化模块.通信模块.数据与模型聚合模块加以介绍.最有用的是第9章,学习由分布式机器学习框架中不同选项所组合

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

DMLC:最大开源分布式机器学习项目

为了实现分布式机器学习领域中代码的共享与共同开发,分布式机器学习社区(DMLC)近日正式发布.作为一个开源项目,DMLC的相关代码直接托管在GitHub中,并采用Apache2.0协议进行维护.DMLC项目的发起者陈天奇怪(网名)表示,项目最初的想法是减少分布式机器学习开发的成本以及新算法被大家接受测试的时间.目前,该项目已经集成了XGBoost.CXXNET及Minerva等机器学习库与rabit和参数服务器等系统组件.接下来,本文就对这些基础库及组件进行简单介绍. XGBoost是一个大规模

最牛逼的开源机器学习框架,你知道几个

最牛逼的开源机器学习框架,你知道几个 机器学习毫无疑问是当今最热的话题,它已经渗透到生活的方方面面,在移动互联网中混不懂点机器学习都不好意思,说几个能看的到的,经常用邮箱吧,是不是感觉垃圾邮件比N年前变少了,无聊了和siri聊过天不,想坐一下无人驾驶汽车吗,手累了用脸解个锁,智能化产品推荐是不是让你更懒了.看不到的就更多了:信用卡欺诈监测保证你的交易安全,股票交易/量化投资(知道你的高收益理财怎么来的吗?),手势识别(用过海豚浏览器的手势吗),还有医学分析等等,巨头们为了在未来占领先机,前仆后继

我的分布式机器学习故事

我的分布式机器学习故事 从毕业加入Google开始做分布式机器学习,到后来转战腾讯广告业务,至今已经七年了.我想说说我见到的故事和我自己的实践经历.这段经历给我的感觉是:虽然在验证一个新的并行算法的正确性的时候,我们可以利用现有框架,尽量快速实现,但是任何一个有价值的机器学习思路,都值得拥有自己独特的架构.所以重点在有一个分布式操作系统,方便大家开发自己需要的架构(框架),来支持相应的算法.如果你关注大数据,听完我说的故事,应该会有感触. 大数据和分布式机器学习 特点 说故事之前,先提纲挈领的描

分布式机器学习的故事

王益博士,称得上机器学习领域的资深从业者,本人之前有幸拜读过王益博士的一些paper和slides,对其从事的"分布式机器学习"方向尤感兴趣. 王益博士之前写过一篇<分布式机器学习的故事>,总结了自己从业多年的经验和感悟.可惜的是,这篇原始博文已经删除了,现在能找到的是原始的六篇讲稿素材:A New Era:Infrequent itemset mining:Application Driven:Implement Your MapReduce:Deep Learning:

横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow

2017-08-04 11:47 程序设计/谷歌/对比 选自muratbuffalo 作者:Murat Demirbas 参与:Panda 分布式机器学习是机器学习领域的一大主要研究方向.近日纽约州立大学布法罗分校计算机科学与工程教授.Petuum Inc. 顾问 Murat Demirbas 和他的两位学生一起发表了一篇对比现有分布式机器学习平台的论文,对 Spark.PMLS 和 TensorFlow 等平台的架构和性能进行了比较和介绍.Murat Demirbas 教授在论文公布后还发表了