存储 频道

演讲实录:百度大规模深度学习应用实践和开源AI框架PaddlePaddle

  导语:本文根据PaddlePaddle技术负责人、百度NLP技术委员会主席于佃海在今年英特尔人工智能大会上的演讲——《百度大规模深度学习应用实践和开源AI框架PaddlePaddle》整理而成。

PaddlePaddle技术负责人、百度NLP技术委员会主席于佃海

  正文:

  很高兴能有机会来介绍百度AI相关的工作,我们知道,此次AI浪潮主要由深度学习来推动的,深度学习的崛起也可以认为是神经网络技术的再次重新崛起。这一次不同的是,工业界在其中发挥了相当重要的作用。此外深度学习的成功和大数据,以及计算力密切相关。对于工业界而言,在数据资源和硬件资源方面都占有优势。

  今天首先介绍一下百度在大规模深度学习应用方面的实践,之后会介绍一下我们的深度学习开源框架PaddlePaddle。

  时至今日,深度学习已经不是一个新的话题。不过我们可以看到深度学习依然保持一个火爆的局面。对于老牌的机器学习神经网络的会议NIPS,这两年的门票销售相当火爆,今年在12分钟之内就销售完毕。深度学习也催生了一些新兴的会议,像ICLR,它的投稿数量也是指数级增长,今年又创最新高度。对于产业界,当然应用也非常火爆,我们也可以看到国内也是在制定相关的技术标准、人才的认证等等。

  百度的AI之路

  对于百度而言,其实一直走在深度学习研究和应用的前沿。百度拥抱机器学习并不算太晚,但从世界范围内对比来看也不算是特别早,对于深度学习而言,我们可以说百度在一开始就把握住了机遇,紧紧走在前沿。早在2012年百度就成功将深度学习DNN模型应用到语音识别、OCR任务中,随后的2013年在百度的核心业务凤巢和搜索排序中我们就上线了深度学习模型,这在业内都是第一次。在此之后,百度基本上可以说全面进入深度学习的阶段。在深度学习的框架开发、平台建设以及应用创新方面都走在行业前列,在企业内的应用具有很高实用性、很大规模化的特色。下面我会介绍一下百度几个典型场景的深度学习应用,会讲一下它的规模特点,也会提到我们最新的工作。

  首先我们从深度学习最相关的语音、视觉和自然语言处理这些基础AI领域谈起。

  ·语音

  在语音方面,百度是最早在深度学习的领域取得突破的公司之一,从2012年开始我们持续在语音基础上有深度研究和突破,2016年,百度语音在深度学习上的工作被MIT科技评论评为当年十大技术突破之一。在今年初我们也发布了最新的语音识别系统Deep Peark2,在技术和效果上又实现了新的飞跃,大家可以用百度手机输入法来体验我们的语音输入效果。值得一提的是现在的语音识别深度学习训练的规模已经非常巨大,我们一般的训练都会使用十万小时级别以上的数据。TTS这一块,在合成领域我们也做了很多的工作,去年我们知道听说过百度语音合成的Deep Voice 今年我们又新发布了CLariNet。

  ·视觉

  对于视觉而言,大家可能对之前百度参加最强大脑人脸识别有一些印象,在当时的系统中,我们利用了200万的人脸数据来进行预训练,最近我们也是更多的将研究投入到三维人脸活体识别技术方向,其实百度也一直在构建一个超大规模的图像分类系统,到现在我们已经实现拥有10万类Tag、近亿图片的大规模识别系统,支持百度的广泛应用。除了刚才说的规模化的特点之外,我们在视觉的各个领域技术创新上做了很多工作,仅在2018年我们在参加的三项国际评测比赛任务中,都崭获桂冠,大家可以看到这些任务它的难度和规模都是非常大的。

  ·自然语言处理

  对于自然语言处理任务,其中最典型的可能要数机器翻译。很多人并不知道,全球先进个深度学习神经网络机器翻译系统的线上系统是百度首先在2015年发布的。这几年百度在翻译领域一直持续深耕,我们现在的训练系统所基于的语料也是相当大的规模,我们也针对不同的产品场景进行定制的优化,打造最好的翻译效果。我们最近有一个工作可以给大家介绍一下,类似于同声传译的同步翻译,它的意思是当原语言的输入还没有结束的时候,目标语言的翻译同步进行,这里面也有技术上的困难,因为不同语言之间的语序是有所差别的。

  除了翻译之外,自然语言处理方向上我们也是在各个方向都有很多的技术创新,比如在开放领域对话和机器阅读理解方面。我们实际的自然语言处理系统的后台所依赖的数据比这些评测集合规模更大,可以看到我们开放领域的对话系统,我们实际用于训练的数据达到千万级别以上,上亿的语料库。基于机器阅读理解我们发布中文大规模阅读理解数据集合,规模达到150万的文档集合和30万的问题集合。

  百度的深度学习应用场景

  前面主要回顾一下在AI几个基础方向的深度学习应用,下面我会特别讲一下百度在几个重要产品线上深度学习的应用状况,和前面所说的几个基础方向上的深度学习应用还是有很大差别的。

  ·语义匹配计算

  对于搜索这个产品,我们现在最重要的深度学习应用场景是语义匹配计算。语义匹配计算是用深度学习来建模Query和网页的相关性,从2013年我们在业内首次上线深度学习模型之后,我们持续的优化创新到现在深度学习语义匹配的特征已经占到百度搜索相关性特征权重的一半以上,这非常好的打破了以前依赖关键词匹配的一些弊端。当然这个任务的训练规模也是非常巨大的,我们实际的训练语料是达到千亿级的规模,对于参数的规模也有上亿级别。我们对这个任务下的单个模型都是用了数十台CPU机器离线并行的训练,得到这样一个产出。

  ·广告CTR预估

  对于广告而言,最核心的应用场景是CTR预估,预测广告的点击率。它和搜索应用的差异在于,我们引入了更多的离散特征,包括一些组合特征,一些ID特征,使得它的记忆能力更强。在这样的设计之下,我们可以看到,它整个的参数规模达到了千亿级别,模型的大小达到TB的规模,使得普通的单机都无法加载,这对并行训练带来很大的挑战,我们在这类任务上都使用百亿级别以上的机器进行训练,我们的训练系统已经打造成了在线训练系统,实时数据进行输入,模型再实时更新。

  ·信息流

  对于信息流,这是百度一个相对较新的产品。在策略架构构建开始,我们就全流程的使用到深度学习技术,包含从语义召回和排序序列生成、评估等各个阶段,信息流的场景和搜索、广告有相通之处。相对于广告而言,我们在建模的时候更多的考虑了历史的这种序列点击信息,整体上也使得它的模型更加复杂,它的参数量也比我们广告上的模型更加庞大,对于它的训练难度也是进一步有了更大的挑战。我们现在也是采用这样一个在线上百台机器进行并行训练的方式进行深度学习的训练和预测。

  从前面的介绍,我们也可以看到不同场景下深度学习的特点和规模化都存在着一定的差异。比如像图像这类的任务,很多模型的特色是非常的深,对于文本任务而言,它的特点在于基本上是通过一个Word Embedding的机制来支持深度学习建模,每个词语有几十到上千维的向量表示,这就给文本的任务带来了很大的差异性,因为光Word Embedding这个参数量就会达到非常大的规模。到实际应用任务场景下,像刚才我们讲到的Feed信息流和广告搜索的场景,我们可以设计使得这个模型的参数量更加巨大,在我们的实际应用当中,刚才讲到我们可以达到千亿级别这样的特征,再加上这样一个Embedding的表示,整个的模型是非常巨大的,给并行带来了更大的挑战。

  我们考虑大规模深度学习的问题不只是说数据量大,网络比较复杂,其实我们要同时考虑特征量以及计算特异性的问题。可以看到虽然有这样的一些差异,这些给深度学习框架的设计带来了挑战,但是整体上而言,神经网络的计算模式相对还是统一的,所以我们可以通过精巧的设计来打造更好的深度学习框架,支持广泛的深度学习应用任务。

  百度深度学习框架PaddlePaddle

  下面我介绍一下百度打造的深度学习框架PaddlePaddle,首先回顾一下,PaddlePaddle的原形要追溯到2013年,当时的它的名字叫做Paddle,这个名字表示是一个并行分布式深度学习。2013年的时候,工业界的深度学习框架还并不多见,我们当时也是刚刚在几个大产品线上成功应用了深度学习技术,在这样一个时刻,我们决定去打造一个通用的深度学习框架,就看到了这个框架对未来深度学习发展和应用的巨大意义。另一方面,在我们建设Paddle之初就提出了并行分布式这样的概念,也注意到在工业界大规模训练的重要性。

  在2016年我们进行了开源,当时这个品牌名字升级为PaddlePaddle,希望大家一起来共建这样深度学习框架。到了今年我们Paddle整体在公司的战略地位更加明确,我们进行更多的投入,在前些天百度事业大会上我们发布了PaddlePaddle的套件。

  下面我会更详细的来介绍Paddle框架。对于PaddlePaddle而言,从开源之初我们就希望它能够具有易学易用、安全高效这样的特色。我们分别制定了相应的策略来使得这样的目标可以达成,希望能够提供更灵活、更快捷的Modeling,能够更高效并行的训练,以及广泛快速的部署能力。

  关于Paddle框架,我们可以回顾一下,最早的深度学习框架是基于Layer的概念,后来出现了Graph of Operators的组合,对于Paddle而言,保留了底层基于Tensor的表示和基于Operator的计算单元,但是我们在网络的定义上使用了Program的概念,希望能够比Graph在定义阶段可以更加简洁,让编程的同学可以使用深度学习。

  我们一开始就把Paddle定位为真正支持实际应用的深度学习框架,非常重视它的预测和部署能力,我们现在实现了多平台预测部署的能力,包括Paddle Serving和Paddle Mobile,我们分别针对服务器端和移动端做了不同的优化,然后在移动端我们现在支持广泛的硬件平台,我们未来也希望Paddle能够部署到更多的场景当中。

  除了框架之外,从利于开发者的角度,我们建立了一个平台层面的设施,也包含了像底层的模型库,像自动的AutoDL的网络搜索技术。进一步,我们又开发了和深度学习相关的组件,形成全功能的套件。对于PaddlePaddle整个套件的布局大体是这样的结构,分为核心框架、服务平台和模块组件三个部分。

  ·特色模型库,我们把它作为核心框架的一个特色功能。Paddle支持的官方模型在同类框架模型中支持数量最多,也是希望通过我们持续的维护,一些经典高频模型能够给开发者带来更大的便利。

  另外,是我们最近做的一个深度强化学习的框架PARL,它的意思是PaddlePaddle强化学习框架,它主要是两个功能:一是大规模的深度学习+强化学习的训练框架,二是提供了计算任务模型和算法的丰富组件。

  在NIPS 2018的强化学习评测中,百度参赛队伍使用基于PARL的系统获得第一名,比第二名领先非常多的分数。这个任务还是非常困难的,是戴假肢人体运动的控制,计算量非常大,竞争也非常激烈,前五名的队伍都是非常强的竞争对手。PARL在这个框架的支持下,我们通过算法优化和近千台CPU和GPU组合并行训练的框架下,非常出色地完成了这个任务。

  ·配套组件,我们也进行了丰富的建设,包括VisualDL这种看得见的深度学习,以及EDL作为Linux Foundation的深度学习基因会的创始项目而实现容错可伸缩的弹性的深度学习。

  ·服务平台,我们针对不同的场景需求,也是打造了不同特色的一些服务平台,像针对小白用户更零成本的EasyDL和针对更全面的一站式开发的开发平台。在平台层面之上我们着力建设了AutoDL,希望能进一步降低大家在网络建模这方面的工作难度。我们希望AutoDL实现三个目标:一是可以自动的设计学习网络,二是进行数据迁移建模,三是能够适配边缘计算,可以自动进行模型的裁减压缩来适配移动端的场景。可以看到在图像分类的Benchmark上,我们用AutoDL来自动设计的网络效果已经全面超越了专家手工设计的网络效果。

  前面我对PaddlePaddle整个套件的关键部分做了一个介绍,最后我还是想强调一下,对于PaddlePaddle,我们立志打造一个支撑工业级应用的高性能AI框架

  最近很多人提到算力就是生产力,对于机器学习框架而言,它的性能优化是非常重要的,因为对于算力而言,不只是丰富的硬件资源,还需要软硬结合来更好的发挥硬件资源的能力以实现更好的计算能力。对于PaddlePaddle,我们是采用了自上而下的推进策略,除了通用的技术框架的高效设计之外,我们会投入比较多的精力在底层的优化包括通用底层优化,以及和硬件相关的一些优化。

  与英特尔强强联手,优化深度学习

  英特尔拥有丰富的强大的芯片能力,在芯片能力之上他们也在自下而上构建他们的AI栈,特别是在AI高性能计算库指令集合这一块非常有特色。在这个层次上,我们的合作空间非常的广泛。过去一段时间,我们也是和英特尔多地团队在多个方向上进行了深入的工作配合,截至目前,英特尔工程师对PaddlePaddle的代码贡献已经超过了一万行。

  下面我们可以看一下,回想一下我前面讲过的内容,可以看到CPU在实际业务场景当中现在的作用还是非常重要的。一方面对很多的场景而言,CPU的性价比是非常好的,另外特别是对我们刚才讲到的一些超大规模数据特征的训练,CPU集群的优势还是比较明显,当然很重要的一方面是英特尔也是更加重视深度学习这个方向,英特尔的芯片也是在变得越来越强大,越来越适配深度学习。

  下面我会简单展示一下英特尔在Paddle上工作的部分成果。在性能优化这一块,我们进行了广泛的配合工作,英特尔同事进行了深入的支持,我们在图像、文本好多任务上从训练到推理性能都有了很大的提升,相比我们之前线上自己手写的系统,性能都有了很好的改进。比较重要的是MKLDNN底层库,它的优化效果确实比较突出,除了在最新的像类似6148芯片上加速比确实非常高之外,在一些更传统的芯片上也有提升的作用。

  我们和英特尔在低树脂精度计算方面的工作,英特尔下一代指令集合VNNI提供强大的INT8乘加运算的效率,我们也和英特尔基于Paddle之上对一些模型进行尝试的验证工作,这也体现了英特尔对深度学习计算任务的重视,因为对于深度学习而言,它确实有很多的特色,除了我们经常感受到的它的向量矩阵运算之外,其实对于深度学习而言,它并不是追求一个精确的数值计算的结果,在某些情况下,低精度的运算在不损失效果的前提下,它的加速效果是非常的可观。英特尔这方面的工作我们也是非常期待。

  还有一个重要的合作就是nGraph,nGraph可以认为是英特尔针对深度学习做的中间表示或者编译器,无缝的衔接不同的硬件后端和上层的框架,Paddle和nGraph的对接非常简洁,通过nGraph Bridge,可以把拍到的一些OP转化成nGraph后台更高效的计算。英特尔的工程师也是基于PaddlePaddle之上做了初步的实验,我们可以看到在ResNet-50上的效果的提升比较明显,英特尔最新的PR也被集成到PaddlePaddle上。

  构建大规模分布式深度学习集群

  除了单机之外,对我们的业务而言,大规模分布式并行式是非常重要的。我们构建了一个大规模分布式深度学习集群,从最底层的硬件到资源的管理调度都做了大量的工作,有数万台机器在这样的环境下可以提供内部各个业务的训练的支持。当然我们也会通过公有云结合PaddlePaddle对外来提供更多的服务。

  对于Paddle框架本身而言,我们在并行上做了很多特色工作,除了同步、异构并行之外,我们特别对稀疏参数的支持进行优化,我们支持千亿级别稀疏特征,在百余节点上的并行训练。今天主要是讲这些,希望大家能够多多试用、支持PaddlePaddle,可以给PaddlePaddle做一些贡献,让我们共建PaddlePaddle,打造更好的深度学习框架。谢谢大家!

  关于PaddlePaddle的更多信息,可前往http://www.paddlepaddle.org/zh了解。

0
相关文章