百度技术平台部高级总监马艳军:开源深度学习框架,生态构建是核心,产业赋能是试金石
雷锋网按:8 月 7 日 - 9 日,由中国计算机学会(CCF)主办,香港中文大学(深圳)、雷锋网 (公众号:雷锋网) 联合承办,鹏城实验室、深圳市人工智能与机器人研究院协办的第五届 CCF-GAIR 2020 全球人工智能与机器人峰会如期落地。
8 日,大会与 AI 研习社、OpenI 启智社区联合举办“AI 源创专场”,重点讨论了新基建背景下,国内开源创新建设将催生的新势能,以及其将引发和促进的新产业机会。
会上,百度深度学习技术平台部高级总监马艳军做了主题为《开源深度学习平台助力产业智能化:百度飞桨的实践》的分享,他从开源如何为产业赋能的角度切入,结合飞桨四年来的成长与实践案例,就开源深度学习框架如何进行生态构建、深度学习如何赋能产业、飞桨的智能化落地案例等给出了清晰的解读。雷锋网将马艳军的演讲进行了不改变原意的编辑,以下为全文:
我跟大家分享的主题是“开源深度学习平台助力产业智能化”,我会从开源如何给产业赋能这个角度分享。
飞桨在 2016 年已经开源了,时间是比较早的,在这个过程中,我们一直认为,技术的迭代有两个方面:
首先,在百度内部会有大量的应用,并且非常注重配合大量的落地场景,这会驱动我们做一些事情,比如速度做得更快,部署做得更好。
然后,在这个循环过程中持续打磨开源项目。开源以后,我们社区里的开发者非常多,他们的要求非常苛刻。社区里开源的工程师把代码亮出来以后,大家都能知道你是如何设计的,以及你的代码、文档有没有问题。这就对整个编程的易用性、API 的完备性提出了新的要求,这些要求以前在公司内不做开源时就不会考虑太多。
这两个循环同时进行,就形成了一个产品。
现在的飞桨框架部分已经满 70 万行代码,是工程量非常大的工作。如果再加上围绕核心框架的周边一系列的模型、工具,现在飞桨有 200 万行代码。这样规模的工程量,要想真正让它打磨得比较顺畅,需要慢慢做,确实没办法一下子放出一个跑起来不出问题的大型的工程系统。
飞桨经过这么长时间,已经形成完整的体系,现在有一些能力可以直接在平台上使用。
开源深度学习框架的建设和很多开源项目有一定的差异性。很多开源项目是把这个开源项目做好,其他人拿去用就可以了。但深度学习框架上下游的生态比较复杂,我们经常说,它是一个生态系统的问题。生态系统里要和很多芯片做对接,因为要基于它做算法研发,再被集成解决方案,形成比较深的产业链条,由此就形成了生态。
所以,开源深度学习框架和一般开源项目的差异性就在于,它的生态体系构建非常关键,比如说 飞桨放在这儿没人用那它就挂了,因为没有生态体系和它一起联动。没有生态的构建很成问题,现在国内的深度学习框架一直朝着生态构建的方向发展,开源就是帮助构建生态的很好的方式。
飞桨发展了这么长时间,在很多行业中已经被应用,使用的场景也很多。AI 在应用时和行业绑定非常紧密,需要结合很多行业专家的知识,并和 AI 技术平台一起设计可在企业中应用的更完整方案。
另一方面,深度学习框架需要和芯片做深度的对接适配才能达到高性能。现在芯片的种类还是蛮多的,把芯片设计好需要非常大的工作量,芯片企业要做更多的贡献才能把能力提升上来。
现在真实应用中使用的芯片类型也是不一样的,环境差别很大。真正要让深度学习框架在芯片上跑起来,是非常大的工程,可能得投入不小的工程团队开发一年左右,才能把整个硬件的功能进行很好的适配。
咱们国家做开源很重要,需要时间投入,耐心把这事儿做了,没有巧妙的办法把工程开发的时间绕过去。一定要投入时间,把这些工程开发做了才有更好的发展基础。
飞桨一直和国内外的芯片企业都有非常紧密的合作,做软硬件的适配,社区也有快速的成长。到现在,整个飞桨在 Github 共有 45000 的 Star。
做项目的过程中,第三方的生态贡献增长非常重要。第三方生态贡献增长是指什么?比如飞桨这个项目,很多的开发不是百度工程师做的,还有一些其他人在基于这个做出新的项目和更多的贡献,这就是第三方的贡献。我们很高兴地看到,今年上半年,由于疫情原因,大家的时间变多了,贡献也非常踊跃,Star 数增长速度非常快,整个生态也在快速成长。这说明国内的开发者也在积极主动做这样的事情。
飞桨也有一个开发者专家计划(PPDE),希望不同层次的开发者都能够加入到这里面做贡献,可以给框架做贡献,也可以贡献算法库,贡献各种各样的应用工具,由此形成整套开发体系。非常欢迎开发者加入这个项目来。
飞桨核心技术
我们常常说飞桨有几个特点:
一是框架层,我们是动态图和静态图统一设计的框架,希望可以从动态图编程转成静态图部署,并做到极致。
另外是训练。百度做大规模的数据处理,天然需要有大规模训练能力。这个大规模训练也有很大的挑战,包括真正做了大规模、分布式,飞桨的大规模分布式训练已经经过了实践验证,比如速度提上来了,收敛性怎么样,精度是否有保证,这些都需要在实践检验中持续打磨。
再就是部署,对多种硬件的支持。飞桨目前已经支持非常多的硬件,尤其对国产芯片也进行了深入的适配融合。
最后是模型算法。飞桨开放了很多的算法,这上面的算法有 146 个,工业界使用比较广泛的基本都涵盖了。
动态图的编程是飞桨主推的,代码的行数、编程灵活性都提升很多,语义理解的算法现在都是动态图实现。
大规模分布式训练在 CPU 和 GPU 上都有做,并且支持异构硬件的训练,我们也做了大规模的稀疏参数训练,这些在公司内用得很多,多种大规模的分布式训练模式都能支持。
大家可以看到,部署是多种平台、多种操作系统都支持。这就是部署麻烦的地方,要适配的环境很多、很复杂,需要很多的工程化工作才能把部署做上去。
现在飞桨的模型库算法很多,涵盖的任务也很多,这些算法我们都做了比较多的调优工作,把算法的速度、训练的速度、参数本身设计到最优。
飞桨助力产业智能化:案例剖析
互联网行业对深度学习的拥抱是非常明显的,但要进一步扩展到更多的行业,还有非常大的空间。今天的案例不是互联网行业,而是实体经济——无人巡检的场景。
我们是制造业大国,制造在我们国家占的 GDP 比重非常大。在真实的生活中,很多事情需要检测,比如设备是否可以正常运转;工厂里也常常有很多检查,比如听到设备发生异响,这些都是真实场景里遇到的。
深度学习在真实场景中的应用面临的挑战非常多,比如它有可能算力非常低,不像很多互联网公司有大型的服务器。在很多真实的行业场景,不仅很多算力很低,也没那么多的内存,这种情况下,要把深度学习技术真正应用到行业中就需要克服很多不一样的挑战。
举一个例子,要监测哪儿有没有着火,需要在某个位置架设一个摄像头,把深度学习影像拍到。这是挺复杂的系统,深度学习的模型训练只是其中一环,行业里的业务系统是比较复杂的,即使设计了一个系统,跟业务系统再对接也是非常复杂的工作。这个过程就需要后台的训练,从数据标注到模型训练,通过摄像头、相机、光源一系列的因素,包括无人机的配合,在边缘端进行计算,和后台形成联动,最后形成预警系统。
整个系统搭建需要很复杂的设计,这个理念会涉及比较难的技术点,比如检测有没有着火,需要目标检测技术。飞桨开源的目标检测工具 PaddleDetection 里面有一些非常经典和实用的算法,结合真实的场景、少量的数据,效果基本上足够你用。内存要求有限,ARM 算力有限,可以通过 PaddleSlim 把模型变小。
另外需要部署,要部署在 ARM 架构的芯片上面,快速运行,这其中的技术选型就非常关键。
我们通过技术使得很小的模型识别的精度也可以非常高。烟雾检测一方面要有高准确率,再就是推理速度,比如着火这种应急场景下,对性能的要求非常高。
这是今年在淄博发生的一件真实的事情。高压线底下着火,通过刚刚的技术方案,可以真正发现并解决问题。
目标检测在真实场景中应用非常多,是复杂的技术,里面涉及到的组件非常丰富,另外还需要把压缩能力和部署能力打通,涉及到的工程化工作非常多。这些都是通过 PaddleDetection 开源的。我们提供了一系列的算法,开发者可以非常灵活地组合自己想要的算法。当然我们也提供了在什么场景下用什么最好的组合方案,直接给出了几款应用最多、效果最好的算法。
算法丰富性、精度、速度以及一系列的验证,这个套件已经在很多场景下做了很多工作,基本上可以放心用到工业、企业里。
训练完这些模型以后,我们需要做一些压缩工作。算力毕竟有限,部署的场景非常复杂,有可能是服务器,有可能是边缘端、网页端的程序,也有可能集成到软件上或是做服务,部署的环节是非常复杂的流程,需要做非常多的工作。
我们把主流的压缩方案都做了,跟检测、分割算法库结合可以直接实现模型的压缩和使用。通过 Paddle Lite,可以实现的算法适用比较多,现在在飞腾、寒武纪、百度昆仑、RK、华为NPU、MTK APU 等多种芯片都可以实现端到端的使用。
飞桨在百度 AI 中是基础底座,对于整个 AI 平台而言是底层技术,这个基础上会有一系列的定制化开发以及 AI 能力,比如语音、语言、视觉,再结合一些场景化的方案,最终会形成一整套具备 AI 能力的完整方案。
。