推荐序一
在过去的十年,人工智能技术尤其是深度学习(Deep Learning)技术得到了飞速发展,从理论到实践都取得了长足的进步,成为解决很多学术和工程问题的利器。在自然语言处理、语音识别、图像识别等领域,利用深度学习技术训练出了堪比人类、甚至超越人类的学习能力。人工智能的成功离不开算法、算力和数据三个要素的协同推进,而这些要素在不同的领域和场景下有不同的表现形式,吸引着人工智能领域的学者、工程师和各个行业的专家们不断探索。
在过去的十年,智能手机快速普及。根据《工业和信息化部关于电信服务质量的通告(2019年第2号)》,我国移动电话用户数量已达到15.97亿户。智能手机成为连接人和信息的重要设备,对于很多人来说,甚至是唯一的设备。在智能手机的底层能力支持下,智能手机上的各类应用(App)蓬勃发展,以苹果的App Store为例,截至2019年第二季度,App Store中可下载的App数量已经超过196万个(数据来自Statista)。硬件和应用程序的共同发展极大地拓展、增强了人类感知、认知世界的能力,这使得智能手机成为人类的“新感官”。
人工智能技术的进步和智能手机的普及是紧密结合、相得益彰的。人工智能技术为智能手机赋能,极大地拓展了智能手机的能力边界;智能手机为人工智能技术提供了丰富的应用场景,为人工智能技术的发展提供了动力。但是,二者的结合也充满了挑战。用户对体验有极致的追求,这就需要智能手机及其上的应用程序能够快速、准确地响应用户的需求。然而,智能手机在计算、存储、续航等方面与电脑等设备的差异巨大,这使得很多人工智能技术无法在智能手机上直接应用,而手机端和服务器端的频繁通信又必然会导致延时和带宽消耗。这些问题在智能手机之外的其他移动设备上也同样存在。
这些富有挑战性的问题正是工程师们的动力源泉。本书作者正是在这样的背景下与同事们一起做了大量探索,以期让人工智能技术在移动端的有限资源下充分发挥价值,并且已经在百度App上取得了非常好的效果。永会把他们团队多年积累的经验凝聚成此书,以飨读者。
本书以百度App中的一些实际案例为线索,简要介绍了理解深度学习的一些必要知识,包括线性代数、卷积神经网络和其他网络结构,然后把更多的笔墨放在了移动设备的内部结构、汇编指令、CPU性能优化、GPU编程以及百度的移动端深度学习框架Paddle-Lite上。书中提供的一些优化技巧具有很好的启发性,希望能够对更多优秀的工程师起到引路作用,帮助大家投身这一领域,充分发挥移动端深度学习的价值,为广大用户提供极致的用户体验。
沈 抖
百度高级副总裁
推荐序二
收到永会的书稿,非常惊喜。永会在移动端深度学习技术的开发和应用领域深耕多年,积累了丰富的经验,也是飞桨(PaddlePaddle)端侧推测推理引擎的核心建设者之一。我想永会的这本书不论是对移动端的框架开发者,还是对应用开发者来说,都是很有价值的。
深度学习凭借其突出的效果和良好的通用性,正推动着人工智能技术迈进工业化阶段。深度学习早已不局限于学术研究,它正在越来越广阔的实际应用中发挥着重要作用。我们也注意到,深度学习应用已从云端扩展到边缘和终端设备。智能手机的普及使得移动端的深度学习技术引起了广泛关注,当然,用户体验和数据隐私等问题是需要考虑的。
百度作为国内深度学习技术研发和应用的领跑者,早在几年之前就已经开始移动端深度学习计算的框架开发和应用工作了。永会作为最早的开发者之一,见证了百度移动端深度学习框架开发和应用的历史,也收获了丰硕的成果,他所做的工作极大地提升了百度App等诸多产品的体验效果,相关技术沉淀也促使了飞桨端侧推测推理引擎的发展和成熟。
虽然永会及其团队所做的很多工作已经通过开源代码展示出来,但是代码库无法全面展示开发者的开发经验和思考感悟。移动端的深度学习开发有很强的特殊性,并且这个领域相对较新,目前还没有太多讲解深入的书籍和资料。这本书正当其时,很有意义。
永会既是底层框架开发者,也是上层应用开发者,这样的双重经验非常难得,而本书的内容也充分体现了这一特质。本书从移动端深度学习应用讲起,从实际应用需求讲到驱动底层技术的优化,最终又通过产品落地收尾,展示移动端深度学习技术的研发对应用的推动。这样的顺序应该是便于大家阅读和理解的。
在移动端应用深度学习技术,既要考虑深度学习技术应用的一般性问题,又要考虑移动端硬件平台和应用的特殊性,想讲好其实挺不容易的。本书的主体内容全面而又精要,显然是下了功夫的。例如,书中对移动端常用算法和硬件存储计算特点的介绍很清晰,能够帮助没有移动端开发和应用经验的读者快速入门,而对于有经验的开发者,也不失为一次系统学习和思考的机会;后面关于移动端CPU和GPU的性能优化部分,则介绍了作者积累的很多实战经验;此外,关于通用矩阵计算加速、快速卷积算法、模型或框架体积优化、内存分析、编译优化等各方面的描述也都做到了深入浅出、细致周到。可以说,本书凝聚了永会长期在一线开发的心得体会,值得仔细品味。
移动端深度学习应用方兴未艾,硬件平台和算法应用都在快速发展,并且正在向广泛的终端设备和边缘计算设备普及。端侧深度学习的机会更多,挑战也更大。最近,在之前移动端预测引擎的基础上,百度飞桨发布了Paddle-Lite,旨在通过高扩展性架构支持更多硬件平台,提供更高性能的计算,目前还有很多工作要做。可以预见,未来会有更多的端侧AI应用走进我们的生活,这将是非常激动人心的。
期待永会对Paddle-Lite做出更多的贡献,当然也期待永会有更多的技术心得和大家分享。
于佃海
百度深度学习平台飞桨总架构师
前言
深度学习技术在近两年飞速发展,对互联网的诸多方面产生了影响。各种互联网产品都争相应用深度学习技术,这将进一步影响人们的生活。随着移动设备被广泛使用,在移动互联网产品中应用深度学习和神经网络技术已经成为必然趋势。
一直以来,由于技术门槛和硬件条件的限制,在移动端应用深度学习的成功案例不多。传统移动端UI工程师在编写神经网络代码时,可以查阅的移动端深度学习资料也很少。而另一方面,时下的互联网竞争又颇为激烈,率先将深度学习技术在移动端应用起来,可以取得先发制人的优势。
移动端设备的运算能力比PC端弱很多。移动端的CPU要将功耗指标维持在很低的水平,这就给性能指标的提升带来了限制。在App中做神经网络运算,会使CPU的运算量猛增。如何协调好用户功耗指标和性能指标就显得至关重要。另外,App的体积限制也是重大考验,如果为了让用户体验一个深度学习功能而要求其下载200MB甚至更大的模型文件,想必用户是不会愉快接受的。这些都是在移动端应用深度学习技术必须解决的问题。
笔者从2015年开始尝试将深度学习技术应用在移动端,在这个过程中遇到的很多问题是关于性能和功耗的,这些问题最终被逐一解决。现在相关项目代码已经在很多App上运行,这些App有日PV达亿级的产品,也有创业期的产品。2017年9月,笔者所带领的团队在GitHub上开源了该项目的全部代码及脚本,项目名称是mobile-deep-learning,希望它在社区的带动下能够得到更好的发展。本书也是以该项目的代码作为示例进行讲解的。
我们已经在多个重要会议上分享了该方向的成果,听众非常感兴趣,会后和我们讨论了很多问题,我也感觉到这些成果值得分享给更多人,于是产生了撰写本书的想法。
目前,国内外已经有很多关于深度学习的书籍,其中一些对算法的讲述非常精辟且有深度。然而这些书籍基本上都是介绍如何在服务器端使用深度学习技术的,针对在移动端应用深度学习技术的书籍还相对较少。
本书内容
本书力求系统而全面地描绘移动端深度学习技术的实践细节和全景,对iOS和Android两个平台的神经网络实践都会详细讲述。需求不同的读者可以根据自己的情况有重点地阅读。精妙的算法必须加上良好的工业实现,才能给用户提供极致的体验,本书以代码实现为主线讲述工程实践,由浅入深,逐步增加难度,最终会将体系结构和汇编知识应用到实践案例中。
这里需要说明两点:
l笔者将书中出现的Paddle-Lite代码压缩并放到了博文视点的官网,读者可以扫描“读者服务”中的二维码查看。如果想体验最新版本的Paddle-Lite,可以直接到GitHub上搜索查看。
l笔者将书中的链接列在表格中并放在了博文视点的官网,读者同样可以扫描“读者服务”中的二维码查看表格,并点击其中的链接直接访问。
本书可以作为移动端研发工程师的前沿读物,读者阅读本书后,完全可以将所学知识应用到自己的产品中去;同时本书也适合对移动端运算领域感兴趣的朋友阅读。
致谢
特别感谢我的同事在本书编写过程中提供的巨大帮助,由于本书涉猎的技术方向较广——从体系结构到框架程序设计,从CPU到GPU编程,所以有些内容请教了在相关方向更资深的同事。感谢赵家英和秦雨两位同事对CPU性能优化部分提供的帮助,感谢刘瑞龙和谢柏渊两位同事对深度学习框架和GPU部分提供的帮助,有了你们的帮助,本书的内容才更完善、有深度,在此深表谢意。
李永会
2019年7月于北京