文/当下君
无论是最近在上海车展引发轰动的百度Apollo自动驾驶技术,还是荣获2020世界人工智能大会最高荣誉SAIL奖、在全球GLUE新排名中以90.9的分数再登榜首的百度文心ERNIE、抑或是你每天都在使用的小度助手,其实身后都有一个坚实的支撑,那就是飞桨。
更准确的说,是飞桨深度学习框架支撑下的深度学习。
当然,即使如此描述,对于大多人来说,“深度学习框架”仍然是一个太技术化的表达,它因何出生、为何存在、能做什么,其实就是这篇小文想传达的信息。
当然,也有很多人对“飞桨”这个词感到好奇,认为指的是“飞机的螺旋桨”,其实,对于“最像文科生的理科生”的百度来说,公司名称固然来自宋词里的“众里寻他千百度”,深度学习框架的名称其实也来自于宋代文人朱熹的“闻说双飞桨,翩然下广津”,“飞桨”直意其实是“很快的快船”,表达了人们希望借助飞桨助推AI走得更快更远的梦想。
这样一说,你是否对飞桨开始有了兴趣呢?
01
为中国智能产业革命而生
A
何为深度学习
要了解何为“深度学习框架”,就必须要解释何为“深度学习”。
这本身是一个巨大的挑战,比如,在李开复博士的《人工智能》一书中,尽管使用了大量的譬喻和图表,也用了足足6页共12面纸的篇幅,来试图让普通读者了解何为“深度学习”,可见这是一个多么难以阐释的概念。
还是举个例子吧,如果我们要在街头寻找流浪猫——通常有两个办法:
方法之一,是设定“何为流浪猫”的具体条件,而且越细越好,比如“体型瘦弱”、”毛发凌乱”“身上带伤”等,为了精准识别,可能还要设定“毛发长度超过多少mm就算凌乱”等颗粒度越来越细的规则,直到规则可以覆盖大多数识别条件。
用这个方法训练出的算法,最大的瓶颈在于要人为设定足够多的规则和标注足够多的数据,才能尽量让结果精准。
方法之二,是不设定“何为流浪猫”的具体条件,让计算机自己去识别,系统只会告诉计算机“识别对了”或“错了”,那么在无数次的试错后,系统就会通过算法自己沉淀一套经验,即“选择什么样的特征是对的”,从而让机器自己去学习和创造“流浪猫的特征是什么”的规则。
随着数据的不断累加,识别率会越来越精准;更重要的是,这个过程不是人为设定规则来进行的,是机器“自己在学”,这就是“深度学习”,更符合我们人类的学习习惯。
这个譬喻,对专业人士绝对谈不上准确,但是大致可以让人们对深度学习有个相对明确的感知。
在人工智能的发展历史上,深度学习的起源可以追溯到好几十年前,比如深度学习的核心计算模型——人工神经网络概念的诞生(1943年),甚至比通用计算机的出现(1946年)更早……经过无数天才的完善,2006年深度学习大师杰弗里.辛顿用一篇名为《一种深度置信网络的快速学习算法》宣告了深度学习浪潮的掀起,2010年后,随着算法、算力以及广泛的实践,深度学习被认为是目前实现人工智能的最主要的路径之一。
让机器具备智能的道路有千万条,深度学习绝不是唯一的一条,但却是目前走的人最多、趟的最远的一条路。也可以说,在被新的革命性范式替代之前,深度学习,是我们目前大规模建设智能社会的必由之路。
B
百度为什么要做深度学习框架?
大家都知道,计算机编程的产品是“程序”,深度学习工作的产品是“模型”,其实“模型”就是一种程序,创造AI能力的过程就是一种编程。
比如,绝大多数人都知道,人类最早的编程语言是“机器语言”,就是用带有小孔的纸带来编写程序,让计算机开始工作的。
但这样带来的一个问题就是,使用机器语言的门槛高、难度大。
笔者曾经采访过物理学家杨振宁教授,他回忆过一个很有趣的细节,上世纪50年代他有机会使用IBM的大型计算机进行理论物理研究,但随即发现使用机器语言来编程实在是太难了,为此他不得不发明一种专门给自己的语言。
换句话说,一种生产工具是否能够流行,主要取决于它是否能提高工作效率。
在深度学习的早期,使用者大都是真正的高级研究人员,他们可以自己直接编写深度学习模型。然而,尽管如此,这些聪明人仍然发现,每个深度学习模型的编写,都需要做大量的重复性工作,写无数重复的代码。
因此,这些研究者为了提高工作效率,就把编写深度学习模型的几个必要过程,逐个提炼出来,然后把前人的研究成果不断的沉淀在其中,使得后来人可以直接调用某些成果,从而大幅度的降低了编写深度学习模型的门槛。
这些模块的组合过程中,渐渐产生了一个相对稳定、通用程度相对高的“最优组合”,这就是我们所说的“深度学习框架”。
而随着历史的演进,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量的人使用,从而流行了起来,全世界最为流行的深度学习框架有PaddlePaddle(飞桨)、Tensorflow、PyTorch、Caffe、Theano、MXNet、Torch等,前三者号称三大主流框架。
于是这里面就涉及一个问题,为什么全世界最主流的三个框架——PaddlePaddle(来自百度)、Tensorflow(来自谷歌)、PyTorch(来自Facebook)都是来自于巨头企业,而不是科研院所或小公司呢?
简单说,开发一个深度学习框架并不难,但要开发一个能让世界范围内开发者广泛使用的产业级深度学习框架,需要投入的人力和资源是极其巨大的,而且还需要海量的数据和强大的算力基础,后者更是大公司优势非常集中的领域。
接下来说一点关于飞桨的问题,大家可能注意到,飞桨对外开源的时间是2016年。
这一年发生了什么呢?对AI行业来说,最重要的就是阿尔法Go战胜李世石,掀起了全球对于人工智能的第三波浪潮,而且,和上世纪60年代和90年代的两波浪潮相比,这一波浪潮有了算力、基础设施和应用场景的支持,是最接近于走入工业界,彻底改变数字世界运行规则的一次。
而深度学习框架被认为在AI领域的重要性,就相当于PC时代的操作系统。
从微观角度来看,对于百度这样量级的企业,通过开源框架牢牢吸引开发者,在自身平台上不断产生生态效应,孕育未来的AI时代现象级产品与应用,是建立AI生态型企业的必由之路。
而从宏观角度来看,在飞桨出现之前,中国的AI界在深度学习框架方面应用的基本都是舶来品。
而就在飞桨开源后不到1年的时间,国务院印发了《新一代人工智能发展框架》,明确提出在2030年中国要成为世界主要人工智能创新中心。
对于这一目标,飞桨就是基石和土壤,而且,绝不是一块贫瘠的土壤。
在深度学习模型开发、训练、预测和部署等方面,飞桨已可比肩TensorFlow、PyTorch等国际主流框架,并在多项技术上有优于后者的表现,而且,在中国市场范围来看,PaddlePaddle有三个突出优势。
第一,飞桨拥有唯一提供适用中文文档与数据集的开发全栈服务;
第二,飞桨的后发优势,使得其模型库、开发套件、工具集甚至包括低代码开发工具都是最全的,这个对降低开发难度的价值极大;
第三,也是我们后面还要着重讲到的是,飞桨是基于在中国的千行百业中的产业实践而诞生的,它从基因上和中国的智能化浪潮是同源的,也能够更直接的适配中国的AI产业实践。
今天的飞桨,已经深深扎根于产业环境和开发生态当中,并且和产业形成了良性互动,开发者面对的问题,就是飞桨立刻会去解决的问题。
因此,中国需要有自己的AI创新基础,有庞大的中国AI产业与开发集群,这些产业和开发者都需要适用于本土的框架体系,也自然会被飞桨的社区氛围吸引。
这些年,中国的建设以前所未见的速度进行,这也是中国之所以被称作“基建狂魔”的原因。
而在AI时代,中国同样也是“基建狂魔”,只不过这里的“基建”,已经成了“新基建”,中国已经错过了历史上三次工业革命,显然,“新基建”将帮助我们在第四次工业革命开始的时候,成为赛道里的头部选手。
在过去30年里,中国制造解决了中国经济总量进入世界前列的问题,但在今天,传统制造业的“动能”已经开始减退,我们迫切需要改造千行百业,不但升级制造业,也通过通讯、AI与计算底层设施等的建造,更新整个社会的技术底座。
以深度学习为代表的第三代AI技术,是中国引领第四次工业革命的重要推力,而飞桨则是这一切的基石之一,未来的产业智能应用,需要高度可用的“操作系统”作为底层算力、算法与行业应用的协同枢纽——因此,无论是今天还是未来,飞桨的战略价值都与中国的发展期待紧密相连。
02
深度学习平台的全景图
A
深度学习平台里有什么?
在2012年,百度将深度学习技术应用于语音识别、OCR等领域,因为应用了AI技术,百度“在语音识别准确率方面,2012年一年的提升就比过去15年提升的总和还要多,也成为语音产品厚积薄发的最好机会。同样,图像识别技术应用于全网搜索以后,以图搜图的准确率一下子从20%提升到80%”,这两个数字让百度大为振奋。
深度学习的框架说复杂也复杂,说简单也简单,用一张图就可以看明白,但弄懂就需要做些解释。
简单的说,一切深度学习框架的共性,都是降低了开发的门槛,不需要开发者从复杂的神经网络开始编代码,可以根据需要选择模型库已有的模型,再通过训练得到模型参数,当然,开发者也可以在已有模型的基础上增加自己的优化。
平台最底层是被称为“核心框架”的三大件,分别是开发、训练和推理部署,所有的深度学习模型也都包含这三块。
开发最容易理解,其实就是编程。但是又不这么简单,这里涉及两个小概念——动态图和静态图。
不论是动态图还是静态图,它们都属于计算图,本质都是在描述运算流程,过于技术化的差别在这里就不展开了,但可以记住一点,飞桨对于两种模式都支持,还支持一键互转,这对于开发者来说很友好。
开发完成的模型只是一个“半成品”,需要在数据上进行学习,这个过程就叫“训练”,这既是对开发结果的检验,也是机器开始产生“智能”的过程,因为训练的过程,既要关注如何搜索和求解模型参数,又要发现训练数据中的规律,再反向优化模型。
就好像一个设计师设计好了一套衣服,先手工缝纫,打出一些样品,然后找些身形不同的模特来试穿,找到一些共性的问题,然后不断修正样板,使之越来越“合身”。
这个过程是充满挑战的,因为伴随着大量的参数调整,而“调参”被认为是能要开发者半条命的难事儿。
但掌握了调参,更难的等在后面,那就是“模型部署”。
还是延续上面的例子,衣服“打样”是手工的,主要是考虑是否合身、美观,但要是上了生产线,那就是另一个问题——这个模型到底适不适合大规模部署呢?
比如你给衣服设计了铜纽扣,但这个纽扣要安装到服装上特别耗时,还容易脱落,那么它可能就不适合制衣厂的大规模流水线生产,需要临时修改设计,改成塑料扣子。
人工智能模型也是,训练时你使用的是一套专有的硬件环境,但部署时可能是完全不一样的另一套,那这里就有一个问题——如何快速的、正确的把你辛辛苦苦训练得到的模型,部署到实际应用环境中去。
我们在谈到飞桨的时候,有一个词其实很容易被忽略,那就是“产业级”深度学习平台。
深度学习框架本身并不难,一个大学的实验室就可以搞出来一个,但对于真正的产业级部署来说,要求的条件往往非常繁多而且苛刻,比如要适应不同的硬件组合,所以真正的产业级,都有一个硬标准——源于产业实践。
换句话说,只有你参与过千行百业的AI模型部署的实践,见过无数种千奇百怪的硬件组合,最后把和各种情况都能搭配的方案汇集起来,产生一种类似于USB插口“即插即用”的特征,使得让模型上线工作事半功倍,才能叫“产业级”。
飞桨在部署方面,就充分考虑到了这个问题。比如,如果你的模型用于本地的服务器部署,那么Paddle Inference作为飞桨深度学习框架原生的高性能推理库,就可以做到即训即用。
有时候,模型并不部署在本地,而是在云端,飞桨就提供了Paddle Serving部署方案,允许把推理模块放在云服务器上,客户端发出请求,服务端返回推理结果。
还有的情况下,模型是部署在有一定计算能力的硬件如智能手机、智能摄像头上,那飞桨就提供Paddle Lite部署方案,满足高性能、轻量化的部署需求。
前面我们说到了部署,其实这个问题很复杂。如果你用过早期的电脑,你会发现一个问题——每装一个硬件,就要重新装一遍驱动程序。最后,微软的Windows解决了这个问题……怎么解决的呢,其实是用最笨的办法,把市面上所有的主流硬件的驱动程序都搜集起来,装在一个库里,这样你往电脑里添加任何主流硬件,都可以自动安装驱动程序了。
AI模型的开发也有这个问题,因为围绕着提供AI算力这个问题,有各种各样的解决方案,有用CPU的、有GPU的、用专用AI加速芯片的、用手机上集成的超小型AI加速模块的……而一个足够专业的学习框架,就是要重复前面说到的微软干过的事情,把每种主流硬件都找来,一款款的适配,最终可以使得硬件可以高效运行框架上的“算子”。
所谓算子(operator), 简单说来就是进行某种“操作“,比如做一次加法;与之对应的,就是被操作的对象,称之为操作数(operand),两者的结合就是“算法”,算法则是“模型”的核心。
按照最新数据,到2020年,飞桨共携手20多家硬件厂商,适配芯片与IP型号29款。这个数字听起来不高,但是要考虑到每种硬件都要与基础模型库里的数百个模型适配,其实是极大的工作量。
为什么这么说呢?因为适配不是只有一块CPU或GPU就可以,它需要芯片厂商提供专业的团队和工具,而这些团队和工具总是优先提供给开发者多的框架的。所以,飞桨近年来适配硬件的直线上升,是这个框架越来越主流的一种外在表现。
值得一提的还有,在2020年里主动提出要和飞桨适配的,有不少来自国产芯片企业,原因也很简单,他们很担心被迫与某些国际主流的框架脱钩……而在这一刻,飞桨“自主可控”的深层次价值,显露无疑。
总之,开发、训练和部署,飞桨都一以贯之一个宗旨——从服务于实践出发,尽量的适合产业级开发者真正的实战级开发,有效、有用。
B
藏满尖端武器的弹药库
深度学习框架存在的终极意义是什么呢?其实就是降低开发的门槛,而要降低这个门槛,有两个办法——第一个是提供各种成熟的模型,让你拿来改改就能用;另一个—-咱们稍后再说。
所以,对于绝大多数不需要关注框架底层的开发者来说,最关心的其实不是我们上面说到的那些,而是关心一个深度学习框架究竟提供多少种模型。
而且,在底层框架上,飞桨提供了基础模型库、端到端开发套件、工具组件以及飞桨企业版AI开发双平台,它们都是围绕开发而提供的“利器”,而且一个比一个具体和聚焦。
这里面的相互关系是怎么样的呢?
基础模型库提供的是最基础的模型,比如面对某个大领域,如NLP(自然语言处理),CV(图像识别),这里面提供的就是最基础、最必要的模型。打个比方说,如果你要开个火锅店,首先你要先去“基础模型库”,选择一个基本模型,这个模型就叫《川菜大全》。
基础模型库上,是飞桨针对AI的某些热门应用门类,在基础模型库之上,更具体、指向性更强的某类模型和开发工具。如果你需要进阶的、更专门的模型,就可以去端到端开发套件里去找,比如,这里面可能可以找到《川菜火锅配料大全》。
而工具组件针对是某些开放式的领域,开发者需要的不是固定的模型,而是某些研发的工具集的组合。这时候,要开火锅店的你,就可以去“工具组件”里转一转,看能不能找到《火锅店经营技巧》、《海底捞服务十四条》之类的参考书。
当然,这个比喻又不免不太严密,但这里可以讲一个数据,基础模型库里有多少模型呢?真的不多,大概是270多种。
是的,飞桨官方支持超过270个的主流算法模型,涵盖计算机视觉、自然语言处理、语音、推荐等多个领域,并且在动态图的训练效率和部署效率方面都有所提升。
也许你会说,太少了吧,不是某某平台都说自己有几十万个模型么?
这里面需要注意的是,飞桨提出的是“基础模型”,也就是最底层、覆盖某一细分领域的“总纲”,而且这些模型都是经过产业实践长期打磨、非常成熟、通用性非常强的;而有些平台说的十几万、几十万个模型,指的是开发者基于这些基础模型之上累计开发过的具体模型。
因此,如果从更广域的角度去看,2020年,飞桨带来了全平台的升级更新,已凝聚265万开发者,基于飞桨平台创建了超过34万个模型;服务企业超10万家,覆盖金融、交通、物流等数十个行业。
△截图自飞桨官网的部分服务行业
这一切都是中国在2030年成为世界级AI创新中心的基础。