百度深度学习实验室于洋:深度学习系统本身面临的一些挑战(2)
2017-03-23 编辑:
我看群里面大家基本上都是相关领域的研究者或者创业创新的人员。针对创业创新的人员,其实部署一个专用的AI集群成本是非常高的,然而使用率是非常低的。专用的AI集群在我们看来只适合于大型的互联网公司,而且这个互联网公司要有多种多样的AI业务,如果有少量的AI业务的公司或者是初创型企业,我们推荐使用通用集群去做深度学习的训练集群。
PaddlePaddle从专用集群到通用集群的改变
PaddlePaddle在去年9月份开源之前也是运行在百度内部的一个专用AI集群中。 在这个集群里面,它的机器都是同构的,也就是说大家的CPU型号包括显卡的型号都是一样的,也是基于MPI进行调度,内网运行环境也是隔离的,也是稳定的。所以在去年9月PaddlePaddle开源之前,百度对PaddlePaddle的要求只有一个,就是尽量快,在尽量短的时间内完成更多的任务。PaddlePaddle还有一个特点是因为百度本身是一个搜索企业,PaddlePaddle为了服务百度更多的产品线,它在自然语言处理方面打造得会更好。
PaddlePaddle的运行效率可谓是刻在PaddlePaddle基因里的一件东西,我们在开源之后,和Caffe还有TensorFlow做了一些benchmark,结果如下面三张图所示。PaddlePaddle和其他框架在单显卡上的速度都差不多,但是在多显卡的速度上,Caffe是明显要慢的,Tensorflow和PaddlePaddle其实在多显卡的聚合上也差不多,PaddlePaddle会稍微快一点。但是在LSTM上,PaddlePaddle可以显示出明显的优势,如下图可以看出,PaddlePaddle在单显卡的时候就已经比Tensorflow在LSTM网络结构里要快一些,LSTM在4GPU下,可以看到PaddlePaddle实际上比Tensorflow要快很多。
但是单纯的单机和集群跑得快,已经不是PaddlePaddle现阶段的目标。因为我们相信,只有在通用集群上跑得更快,才能服务更多的中小企业,也才能够让更多的人接受PaddlePaddle,也才能够给社会带来更大的价值。
通用AI集群应该怎么搭建?
专用集群其实是更常见的一种集群配置模式。比如说我们公司有存储的需求,我就配置一个Hadoop集群去使用HDFS,有线下处理的需求,我再用Hadoop的Map-Reduce集群去做线下处理。对于网站的话,网站前端大家会配置一个nginx集群,再使用kalfka将网站的一些日志收集下来,再给AI处理。
专用集群的架构就是把几个事情分别部署在不同的机器里,这些机器是相互隔离,不能互相访问的。这样做的好处其实是显而易见的,因为不同应用分别跑在不同的物理机里,可以避免不同应用之间的相互影响,但是坏处也很明显,就是成本会很高,每个集群其实物理硬件的利用率是不够的。
下面我以一个语音识别服务举例,说明一个通用AI集群应该怎么搭建。
下图是一个通用集群的简单示意图,这个集群里有很多GPU的服务器,也有很多CPU的服务器,他们都部署在一个集群里。在这个集群的机器之上运行着Kubernetes。Kubernetes是一个谷歌开源的分布式的操作系统。在2007年的时候,谷歌就使用集群操作系统Borg,通过混合部署各种来源的各种任务,将CPU的利用率一直维持在75%到80%左右。而Kubernetes开发之前是Borg开发团队中的一部分,Kubernetes的设计继承了Borg项目多年总结的经验,是目前最先进集群操作系统。
这对企业的成本是一个极大的降低。之前我们说过普遍专用集群的资源利用率大概在20%左右,如果我们使用一个集群操作系统去管理集群的任务,那么硬件利用率可以提升到75%到80%左右,这样一个通用集群就相当于普通的四个左右的专用集群。
通用集群数据还是存储在HDFS上,在HDFS上有一些有标签的数据,这些数据送给PaddlePaddle做线下训练。在这个系统的前端就是一个语音识别的服务,用户去提交自己的语音后返回一段文字。在这个前端语音识别API里用户实时提交的语音数据就形成了一个实时的日志,这个日志就会被其他的进程收集下来,比如使用Kalfka进行收集,再去做一些线上的预处理,进而将这些数据继续传递给PaddlePaddle做训练。这样PaddlePaddle既可以支持线下的大批量的数据训练,也可以支持线上的实时的数据训练。
在目前众多的深度学习平台里似乎没有一个平台再去考虑如何在通用集群里更好地进行训练。这是因为大部分的深度学习平台都是大企业开发的,在大企业中,通用集群的训练对他们来讲并不重要,但这对初创企业是至关重要的。
通用集群对深度学习系统的挑战
挑战主要有这么几方面:
(以下全文仅限钛媒体专业用户开放,点击链接:注册钛媒体专业版)
……
……
……
以上内容希望能够让大家明白,PaddlePaddle为什么要做通用集群下的可伸缩训练。
PaddlePaddle的规划和目标
PaddlePaddle开源了以后,和作为百度内部的一个项目有非常大的差别,我们从原来只追求高性能和功能,渐渐的要过渡到下图所示的几个目标。我们所有的事情只有一个最重要的点,也就是中间的那个橘色的方块,我们希望让大家的业务变得awesome,变得非常炫,非常给力。我们评价PaddlePaddle“给力”的标准不是发了多少论文、被多少媒体提及,而是解决用户痛点,让用户爽。
通用集群下的可伸缩PaddlePaddle只是我们目标里的一部分,希望大家能够持续关注PaddlePaddle的进一步发展。