8 月底,在机器之心承办的 WAIC 2019 世界人工智能大会上,商汤科技联合创始人林达华教授首次对商汤自研的深度学习框架 SenseParrots 进行了系统性介绍,也畅谈了对 AI 技术未来发展的看法。
自 2015 年底谷歌开源深度框架 TensorFlow 以来,越来越多的科技巨头、创业公司注重框架的投入与研发。而商汤科技作为国内 AI 创业公司的代表,自创办开始就走在自研深度学习框架的道路上。
过去几年,我们能够或多或少的听到商汤深度学习框架 SenseParrots 的信息,但因为该框架并未开源而无法有系统性的了解。在不久之前的 WAIC 2019 开发者日深度学习框架分论坛上,商汤科技联合创始人林达华教授首次对外系统性的介绍 SenseParrots,解读了该自研框架的核心技术模块。
以下是机器之心对林达华老师演讲内容的梳理:
各位朋友,非常感谢机器之心今天举办这个论坛,让对深度学习框架感兴趣的朋友能够汇聚在黄浦江边一起共论深度学习未来发展。今天我也非常有幸在这里跟大家分享商汤科技这方面的工作。
今天,我想利用这个机会跟大家讲一个故事,一个关于商汤原创的故事。
在这个故事里,我将向大家分享我们如何走上自己研发深度学习框架的道路,如何一步步地把这样一个技术框架发展成为一个工业级的算法生产平台,为商汤以 AI 技术赋能百业的愿景提供有力的支撑。
在过去的这几年,人工智能技术突飞猛进地发展,给我们的社会、生活带来了巨大的变化。但是人工智能的成功,在我看来不是单一要素的结果。在这个成功的背后,它是深度学习算法的改进、GPU 提供的高性能算力,以及大数据这三个重要的要素历史性的汇聚在一起,所产生的爆发。
如果我们回顾深度学习在过去七八年波澜壮阔的发展历史,我们会看到这背后有一系列的标志性事件。
在 2012 年的时候,AlexNet 获得了 ImageNet 比赛的冠军,震惊了整个计算机视觉。在此之后,很多的研究小组投入到深度学习模型结构的研发,一系列更加先进的模型结构涌现出来,把图像识别的准确率提高到一个历史性的高度。到了 2017 年,深度学习在自然语言领域取得了新的突破性的进展。到了 2019 年,从头开始训练的 AlphaGo Zero 横空出世。
如果我们从一个更长的时间尺度来看,我们会看到,这一系列成功故事的背后还蕴含着另外一层重要的趋势,就是它们所需要的计算能力的指数式的增长。从 AlexNet 到 AlphaGo Zero,在短短的五六年时间里面,对算力需求增长了超过三十万倍,可以说这几年深度学习的成功,人工智能的爆发,在一定程度上就是把算力连接到有价值的产业应用所促成的结果。
而深度学习框架就是这种连接最核心的枢纽。
商汤也在这一个人工智能浪潮里面,取得了巨大的成功。在过去几年走到今天,成为了人工智能领域领先的企业,而这背后最重要的核心,在我看来就是两个字,原创。
在 2012 年的时候,当时 CVPR 总共只有两篇是关于深度学习的,而这两篇都来自于我们实验室。到了 2013 年,ICCV 有八篇 paper 关于深度学习,其中六篇来自于我们实验室。正因为我们实验室把深度学习引入计算机视觉的先驱性,我们在 GTC 2016 年被评为全世界深度学习十大先驱的实验室之一。我想这段小历史,也能够很好的诠释了商汤人所说的原创精神。
原创之路风光无限,但是它的背后也蕴含了无限的艰辛,在我们一开始做深度学习的时候,那时候的环境和现在非常不一样,没有 TensorFlow、没有 PyTorch、连 GPU 都没有。在那个时候,我们是依靠着人工手写的一行行 C++ 代码,完成整个神经网络的计算。每一个模型的训练都需要一两个月的时间。
正是在这样一个艰辛的环境下面,我们打开了把深度学习应用于计算机视觉的道路。也正是在这样一个艰辛的环境里面,我们深切的体会到一个好的框架对于 AI 基础核心性的作用。于是 2014 年,从商汤科技创办的第一天开始,我们就下定了决心要走自研深度学习框架的道路。
SenseParrots 发展历程
我们把自己研发的深度学习框架,命名为 Parrots,这背后寄托了我们对它良好的祝愿,聪明、美丽而又能够自由的飞翔。
从那时候开始,Parrots 跟商汤共同成长,经历了五年的发展。2015 年的时候,几乎与 TensorFlow 同时,我们发布了第一版的 SenseParrots。那时候它已经具备了多机多卡联合训练和多路径执行的领先业界的特性。之后又经过了三年的发展,我们于去年内部发布了 SenseParrots 的第二代。在这一代它不但具有了一系列更加重要的特性,具备了更丰富的能力和更高的性能,而且也逐渐成为了商汤赋能 AI 产业的战略支撑。
首先,简单的回顾一下我们第一代(三年前)SenseParrots。SenseParrots 在 2015 年出来的时候,已经具备了超越当时开源框架的卓越性能,它在业界率先实现了在 64 个 GPU 上接近线性的拓展。而且它通过极致的内存优化,允许一个超大型的模型在单个 GPU 上进行训练。
正是在这样一个框架上面,我们训练出了 1207 层的超大型卷积神经网络,这个网络就叫 PolyNet,取得了当时图像识别性能的世界记录,并且把这个记录保持了一年时间。在这样强有力的网络支持下,我们在一系列的比赛,包括 ImageNet、ActivityNet,取得了一系列的冠军。
虽然我们取得了一些成绩,但是我们说,深度学习、人工智能这个领域是一个快速发展的领域,如果我们不能够有效的把握这个领域发展的趋势,有一天我们会落后于时代发展的潮流。从 2015 年开始,我们继续观察深度学习的发展,发现这个领域有一个根本性的重要的变化,就是深度学习技术已经走出了实验室,走向了更广泛的产业落地。
与此同时,在技术层面,也发生了很多深刻的变化。
首先,越来越多的研究员,越来越多的工程师,开始使用动态模型来表达复杂的计算逻辑,而不再依赖于静态的网络结构;
深度学习模型开始走出了实验室的机房,落地到了越来越多样化的设备里面,包括车载设备、手机摄像头、机器人等;
我们对于算法的需求,从单一的追求大模型、高精度,变成了去追求更重要更有价值的事情,就是在真正的产品上落地,所以在这个时候我们会更加关注性能跟成本的平衡。这样新的追求下面,一系列新的成果,包括专门为移动端设计的 MobileNet,包括量化压缩等降低模型成本的技术,成为了热门的技术。
最后,我们的深度学习研发是通过研究员进行的。因此,研究员的生产力制约了我们这个领域的发展。为了提高研究员的研发效率,越来越多的自动化方法应运而生,包括网络结构搜索,包括自动设计损失函数。
所以归纳起来,在过去这几年的发展,一个很重要的趋势,就是我们从单一的性能追求变成了更加多元的价值追求。这样多元的价值追求,它给深度学习框架的发展提供了一个巨大的空间。与此同时我们也看到,国际主流的开源的平台,包括 TensorFlow、PyTorch,也逐渐成熟,形成了成熟的社区生态。而且它们的性能也能满足大部分常规应用的需求。
可是为什么在这样的情况下,我们依然要坚持自主研发深度学习框架的道路?这是因为我们在产业落地过程中发现,这些开源的框架主要是面向普及应用进行研发的。真正的 AI 工业化应用面前,它们依然有着巨大的差距。
在商汤内部的工业化的产业落地的业务里面,我们经常要表达逻辑非常复杂的模型,要把这个模型在数百张、上千张的 GPU 的大规模并行环境中进行训练。这样的环境里面,开源框架不能够为我们提供足够的性能。另外我们要把我们训练出来的模型,放在很多样化的设备里面,各种各样的手机、IoT 设备、机器人。而现有的开源框架,对于多元化的设备的支持是非常有限的,严重不足的。而且它们训练出来的模型,离投入具体的业务场景的部署依然有着非常长的路要走,中间要经历非常复杂的环节,而这种复杂的环节,从根本上制约了我们研发的效率和迭代的速度。
我们商汤的愿景,是要以 AI 技术赋能百业,所以我们别无选择,必然要面对这样的挑战。在这些问题对于我们来说是巨大的挑战,但是对于自研深度学习框架来说也是一个重要的机遇。
商汤经过过去将近五年的发展,已经把业务拓展到了十几个不同的业务线,我们给数以百计的大型的企业进行 AI 产业赋能,正是这样广泛而深度的落地实践给深度学习框架的研发提供了非常丰沃的土壤。在这个土壤上面,我们能深切的认识到 AI 产业化第一线的需求和最大的痛点是什么。在这样的土壤上面,我们走出了自己差异化发展的道路。所以产业落地的过程当中,我们为下一代深度学习框架,定义了新的发展目标。具体来说有三点。
第一,就是我们要支持商汤业务范畴里面的工业级的应用,其中包括很多具有非常复杂的动态逻辑的大规模模型的并行训练。
第二,我们在我们众多的多元化的落地场景里面,对我们的模型进行极致优化,构建我们在这些场景里面的核心竞争力,这不仅是算法精度,也包括模型运行的性能。
第三,就是刚刚说到的,我们也非常关注研究员的生产效率,所以在我们新一代的训练框架研发里面,非常重要的一个目标就是关注生产力的提升。通过把数据采集、模型的训练和部署,以及到最后在业务场景上面应用的全链条进行打通,联合优化。这样能够非常有效地提高研究员的生产效率,加快我们产品迭代的速度。
这就是现在商汤的整个的平台的技术架构。我们看到最底层是我们的基础系统,它提供包括存储、网络、虚拟化、调度等基础系统的能力。在这个系统基础之上,我们建立了我们新一代的 SenseParrots,它包含了从表达、编译与调度、计算、通信以及最终连接到模型部署的一系列的关键技术模块。
再往上,我们构建了算法工具链,它沉淀了商汤在这过去五年所凝练出来的很多业界最先进的算法。最上层是我们的垂直应用平台,通过对于这些算法进行组合、重构,我们构造出了适应各个行业落地的垂直平台,真正的赋能百业。
关键技术模块解读
接下来我将对 SenseParrots 的一些关键技术模块做一个简要的讲解。
动态编译与调度
SenseParrots 的核心是一个动态的编译与调度引擎,这也是 SenseParrots 最重要的技术特色。当一个计算过程进来的时候,我们通过这样一个引擎,首先把它动态地实时编译成为可以执行的中间代码,然后通过一个可以高并发的执行引擎,在大规模的并行环境中执行。
我们知道现在主流的训练框架有两种,一种是对于静态的网络结构进行预编译,让它能够真正大规模的并行;另外一种就以 PyTorch 为代表,对一个动态的计算过程进行解释性的运行。
而 SenseParrots 在这一点上面,有所不同,它走的是动态实时编译的道路。所有的代码,都是在运行过程当中即时编译,并且放到引擎上大规模地并行执行。这就让它具备了像传统的静态深度网络的伸缩性,同时也具备了当代的动态编程模型的灵活性。达到了这两者最佳的组合。
从上图我们可以看到,在很多的主流的模型上面,我们相比另外一个原生支持动态模型的框架 PyTorch,有了一个明显的性能提高,尤其是在 64 卡大规模并行的环境下。
核心计算库
对每一个算子的具体执行,有一个我们自己研发的核心计算库 PPL(Parrots Primitive Library)。在这个计算库里面,我们对于超过一百个算子在十多种不同的架构上进行了极致的优化,它们支持了很多商汤业务里面非常重要的算子。
我们可以在这里看到,在多个不同的架构上面,对多个不同的算子我们取得了比原厂提供的算子服务显著的高性能。经过过去几年的迭代,我们的计算库达到了真正的工业级的可靠性,正在支持商汤全线产品的落地。
算子编译工具链
刚才说到对这一百多个重点的算子,我们手工进行了极致的优化。但还有很多的算子我们没有足够的人力进行同样深入的优化,所以我们同时建设了一套算子编译工具链。通过这个链条,我们可以对于长尾的算子进行优化,这个链条集成了很多种不同的优化方式,保证了自动输出的算子依然具备了具有竞争力的高性能,而且也大大的提高了算子优化的效率。
核心通信引擎
除了计算以外,对于并行训练来说另一个重要的核心的组件,就是通信。
在商汤内部的训练框架里面,我们并不依赖外部提供的通信库。我们有自己的核心通信引擎,里面实现了一系列的领先的先进的性能,包括通过块状稀疏;还有通信的延时合并,能大大地节省通信量,提高了在大规模并行情况下的通信效率。
此外,我们通信库还提供了很多与生产环境紧密关联、非常有用的性能,包括我们对于两万个 GPU 的大型集群提供实时的性能检测。在这时候我们看到哪个 GPU 变慢哪个 GPU 变快了,实时地调节训练任务的部署;而且它允许动态的增删设备。大家可以想象,在一个超大规模的集群里面,各种单独的设备变慢或者故障,是时常发生的事情,我们不能让这样的故障让大型的训练任务被停下来,所以我们提供了动态设备调整的功能。
这样的通信引擎支持下,我们实现了在 512 卡同步进行训练的时候 86% 的并行效率。
部署工具链
在模型训练出来之后,最后的一个环节就是把训练出来的模型部署到业务场景。在这里面其实是有一系列工序的。如果在实验室发 paper,我们不需要做这样的事情,但是在一个工业生产环节,这里面每个环节都是必不可少、非常重要的。
所以 SenseParrots 还提供了一系列的工具,包括模型量化工具;部署模拟器,它能够在训练过程中模拟模型在各种设备上性能;还提供了专用的网络结构搜索的工具,在特定计算约束条件搜索下一个最高性能的模型;还提供了包括模型剪枝压缩、模型转换等工具,让训练出来的模型能够无缝的衔接到我们生产部署的环境中。
正是在这一系列的工具的支持下,我们建立起来了新一代的 Parrots。在这个上面,我们使用了 512 张 V100,获得了迄今为止业界最快的训练的速度,实现了 1.5 分钟训练达到 90 轮(epoch),在业界率先实现了每秒训练一轮的训练速度,这大大加快了我们内部大型模型的迭代速度,也提高了商汤的核心竞争力。
端上训练
除了技术性能的提升之外,我们也在多个层面、多个领域,进行积极的创新,走自己不同于别人的道路。比如现在主流的 AI 研发主要是把模型应用在这些设备上面进行推理。但是我们也开始了在端上进行训练的研发,在业界率先落地了我们第一个在端上进行训练的框架,现在已经投入到实际产品当中使用。
AI 集成研发环境
最后一个,这是一个上层应用框架,但是它对于提供 AI 研发的生产效率至关重要。正如刚才提到的,在工业化的 AI 生产环境里面流程非常复杂,需求多样。在这个时候,如果用传统的方式去运行整个 AI 研发的流程是非常低效的。所以我们也研发了这个 AI 集成研发环境,它具有全生命周期的管理能力,集成了很多模型生产的工具和组件,能够自动化地执行研发和业务流程。而且它为研究员提供了一个一站式的非常友好的研发环境,大大提高了他们的工作效率。
开源设想
正如我刚才所说,商汤内部的平台研发主要专注于工业级的产业化赋能。但是我们在研发的过程当中,也从社区里面获益。我们深信,跟开源社区的互动和紧密衔接,是商汤平台未来持续具有生命力的活力的源泉。
所以从去年开始,我们在逐步设想了一个开源的路线,整个开源路线可以分为三步,是一个从外到内三步走的过程。我们会首先在算法层面进行开源,然后逐渐深入到一系列的外围工具,最后我们在合适的时候,会把基础框架的一些技术开源出来。
刚才提到了开源,我们已经有了实实在在的工作,以商汤的联合实验室 MMLab 开始我们逐渐把这几年积累下来的很多业界学界领先的算法开源出来,包括我们开源了 MMCV、MMDetection 等一系列的开源库,这些融会了商汤以及联合实验室过去几年研究的精华。其中 MMDetection 目前已经有超过六千颗星,在学界已经形成了非常广泛的影响。
AI 模型生产的未来趋势
正如我刚才所说,技术的发展,最重要的就要把握未来的趋势。我们自己判断 AI 的发展,必然会经历三个主要的发展阶段,从实验室走向大规模的工业赋能,然后从工业赋能走向全社会。我们憧憬,未来十年 AI 的发展一定会让我们每一个行业每一个人都能从 AI 的技术赋能中获益,把整个社会连接起来,成为整个社会的基础设施,这就是我们所说的 AI 的普及。我们已经经历了从实验室到工业化的道路,我们面向未来就是从工业化到普及化迈进。
具体来说,我觉得有三个重要的趋势想向大家分享。
首先是随着隐私保护的加强与数据价值的彰显,AI 模型的生产形态将会从集中训练逐渐向多主体的形态演进,这里每个主体各自拥有自己的数据和模型,与其它主体进行交互,而联邦学习正是这个长期趋势的起点。
第二,现在商汤内部已经形成了企业内的 AI 生产链的分工,我们相信随着这个技术的发展,AI 将成为一个社会性的大规模分工产业。就像几十年前集成电路一样,当时只是一个小的实验室可以完成的一个流程,现在变成了非常大范围的社会分工。而 AI 同样将走这样的道路,每个环节都将孕育出一大批富有竞争力的企业,这些企业之间,将通过标准化的协议进行沟通。
第三,随着 AI 更加广泛的产业落地,它将进入到更多的设备,更多的场景,连接更多的人,从而构成一个更加丰富多彩的 AI 世界。
最后我们憧憬十年之后,在我们的世界里面,AI 将会无处不在。在这样的世界里面,AI 不会取代人类,但是它将在我们的生活,在我们的工作,在我们的世界的方方面面,成为我们最可信赖的助手。我们正在朝着这样的愿景,朝着这样的目标努力,也希望与在座的各位共勉,谢谢大家。
来源 | 机器之心
演讲 | 林达华