作家
登录

大规模机器学习系统中的No Free Lunch

作者: 来源: 2017-10-10 09:08:51 阅读 我要评论

机械进修的分布式模式,又分为数据分布式和模型分布式。数据分布式是指将练习数据切成很多份,不合的机械处理一部分数据。但对于一些较大年夜的模型,单机可能没有办法完成全部模型的运算,于是把模型切成很多份,不合机械计算模型的不合部分。在实际应用过程中,根据不合的场景须要,二者一般是并存的。

数据分布式和模型分布式

机械进修模型练习中常见的分布式并行计算模型

数据流计算模型中的模型参数困惑

另一个常见的分布式并行计算模型就是基于参数办事器的分布式计算模型。参数办事器就是对机械进修模型练习计算中的共享状况——模型参数治理的一种直不雅的抽象,对模型参数的读写竽暌股同一的参数办事器治理,参数办事器本质上就是一个支撑多种一致性模型的高机能Key-Value存储办事。基于参数办事器可以实现不合的一致性模型,一个极端就是BSP(Bulk Synchronous Parallel,同步并行),所有的计算节点在计算过程中都获取一致的模型参数,对于算法实现而言有一致性的保障,然则价值是同步造成的资本浪费;另一个极端是ASP(Asynchronous Parallel,异步并行),所有的计算节点在计算过程中彼此之间的模型参数没有任何的一致性包管,计算节点之间完全异步履行,这种一致性模性萃C效力很高,然则模型参数没有一致性包管,不合节点获取到的是不合版本的模型,练习过程不稳定,影响算法效不雅;CMU的Erix Xing传授提出了介于BSP和ASP两者之间的SSP(Stale Synchronous Parallel),经由过程限制最大年夜不一致的参数版本数来控制整体的同步节拍,如许既能缓解因为同步带来的履行效力问题,又使得算法相对于ASP在收敛性质上有更好的包管。基于不合的一致性模许可以很好地在运行速度和算法效不雅长进行衡量。

其实,数据流计算模型和参数办事器计算模型描述了机械进修模型练习计算过程的不合方面,机械进修的样本数据的流动用数据流来描述就很天然,模型练习过程中的中心状况可以被参数办事器计算模型天然的描述。是以,这两者进行结合是整体的成长趋势:在数据流中对参数办事器进行读写操作,比如Intel就开辟了Spark上的参数办事器。然则数据流计算模型和参数办事器计算模型的一致性模型不尽雷同,参数办事器的一致性模型比如BSP或者SSP都邑打破数据流原有的异步计算逻辑。参数办事器和数据流浇忧⒛灾备策略和一致性治理策略须要细心的设计才能很好地同一和融合。

数据流和参数办事器浇忧⒛架构

编程模型和编程说话的选择

编程范式可以分为两种,敕令式与声明式。敕令式编程经由过程显式指定具体履行流程来进行编程,常见的敕令式说话是C/C++等;与敕令式编程不合,声明式编程不显示指定具体履行流程,只定义描述计算义务目标,将具体履行交由底层计算框架决定。敕令式编程因为显式指定具体履行流程会显得加倍灵活,而声明式编程底层计算框架可以针对履行流程进行更深刻的优化大年夜而可能会加倍高效。在实际的机械进修模型练习计算框架中,两者其实一般是并存的,比如MxNet、Tensorflow等。

乞降运算的敕令式实现和声明式实现比较

为了兼顾运行效力和易用性,机械进修模型练习计算框架的编程说话的选择一般采取前后端分别的方法:以C/C++、Java/Scala等作为后端以包管体系运行效力,应用Python、R等作为前端以供给更为易用的编程接口。对于后端说话的选择上,主流的就是Java和C++,这两者各有好坏:

在生态上,Java因为易于开辟使得其生态要远远好于C++,很多大年夜数据计算框架都基于Java或者类Java说话开辟;

最常见的就是分布式数据流计算模型。数据流模型是一种数据驱动的并行计算履行模型。数据流计算逻辑基于数据流图表达。 用户经由过程描述一个计算流图来完成计算,对计算流图中的计算节点进行定义,用户一般不须要指定具体履行流程。数据流图内部不合数据的计算一般是异步完成的,个中的计算节点只要上游ready就可以履行计算逻辑。今朝主流的ETL(Extract-Transform-Load)数据处理框架比如Hadoop、Spark、Flink等都是基于数据流计算模型。然则机械进修计算义务有一个共享的赓续被擦写的中心状况:模型参数,计算过程会赓续的读写中心状况。数据流的计算模型在履行过程一一般是异步的,所以很难对共享中心状况——模型参数,进行很好的一致性控制。所以基于数据流计算模型的一致性模型一般都是同步的,在数据流内部包管强一致性,然则基于同步的体系履行机能取决于最慢的计算节点,枷⒚效力比较低。

在可移植性上,因为JVM樊篱了很多底层差别性,所以Java要优于C++;

在内存治理上,基于GC的Java在大年夜数据、同步分布式并行的情况下,效力要远低于优化过的C++的效力,因为大年夜数据情况下,GC的概率会很高,而一旦一台办事器开端GC其计算才能将受很大年夜影响,整体集群尤其在同步情况下的枷⒚效力也会大年夜打扣头,而机械数增长的情况下,在一准时刻触发GC的概率也会大年夜大年夜增长;

在说话抽象上,C++的模板机制在编译时?绝行展开,可以做更多的编译优化,在实际履行时除了产生的法度榜样文件更大年夜一些之外,整体履行效力异常高,而与之对应的Java泛型采取类型擦除方法实现,在实际运行时髦数据类型cast,会带来很多额外的开销,使得颇┞符体履行效力受到很大年夜影响。


  推荐阅读

  机器人和人工智能:软件测试和开发的未来

今朝,你必须保持在任何数例的情况下,软件测试的聊天机械人或框架在预期情况下可以区分缺点与亮点。"智能机械人"不再只是一个风行的术语。这是实际。这在主动化测试世比赛是有效的,因为它在其他处所>>>详细阅读


本文标题:大规模机器学习系统中的No Free Lunch

地址:http://www.17bianji.com/lsqh/37748.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)