采访嘉宾 | 何亮亮
AI 前线导读: 随着深度学习领域的快速发展,以及移动端芯片计算能力的逐步提升,设备端上的深度学习推理正在变成一个巨大的需求和趋势,一个好用的深度学习框架成为深度学习应用落地的关键。小米团队打造的 MACE (https://github.com/XiaoMi/mace),就是专门为移动端芯片优化的深度学习框架,且已开源供开发者使用。
开发这个移动端深度学习框架的过程并非一帆风顺,克服了一些困难之后,MACE 才诞生并逐渐被越来越的开发者采用。在开发过程中,小米有哪些经验和踩坑经验可以分享给开发者?AI 前线采访了小米深度学习框架负责人何亮亮来进行了深入的了解。
更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)
作为小米深度学习框架负责人,何亮亮目前负责服务端与移动端深度学习框架的研发工作。他在分布式系统、存储与数据库、异构计算、深度学习、计算机视觉等领域有丰富的实践经验。
何亮亮介绍道,他带领的团队的主要工作内容,包括移动端深度学习框架 MACE 的开发,服务端深度学习框架的定制与优化,图像处理与计算机视觉算法的开发与优化等工作。
MACE 创建背后的故事
相对于 PC,更加轻便、易于携带的移动端越来越普及,手机更是人手一部或者多部,这就让在移动端进行深度学习成为一个迫切的需求。鉴于此,专门为移动端而设计的深度学习框架——MACE 应运而生。
何亮亮告诉 AI 前线记者,MACE 最初是为了解决公司内部业务的落地而立项的。在 2017 年,为了落地拍照后处理的模型,小米曾考察了 SNPE 专有框架和主流的开源深度学习框架。结果,从性能角度看,仅有 SNPE 满足速度和功耗的要求,但因为 SNPE 是闭源软件,在部分特性和自定义算子的定制上有较大的制约,沟通成本影响了产品开发周期的可控性。为了同时满足性能和可控性两方面的要求,小米开始了 MACE 的自主研发。
在研发这个深度学习框架的过程中,遇见困难在所难免。在研发初期,MACE 的重点是 GPU 的性能优化,何亮亮回忆,开发过程中他们遇到的最大困难,无疑是 GPU 算子的性能优化,由于当时没有任何开源实现可以参考,这项研发工作的难度非常大。
但是,经过多方尝试以及与高通的一些交流,MACE 最终达到,甚至在内部私有模型上超过了 SNPE 的性能,同时还支持除 Adreno GPU 之外的芯片。后期,小米团队还对 CPU 和 DSP 也进行了支持和优化,也达到了较高的水平。
除了算子的性能之外,移动端框架还有其他的一些特有的问题。比如,相比服务端模型推理,移动端的推理对内存占用有着更苛刻的要求。为了优化计算节点间中间结果对内存的占用,小米借鉴了寄存器分配的图染色算法,通过提升内存缓冲区的复用效率,来达到减少内存占用的目标。对于权重的内存占用,小米则采用了半精度浮点和 8 比特整形量化的方法来进行压缩。另一个小米遇到问题是模型的推理计算对用户体验的影响,对于移动端的 GPU,除了可以用作通用计算之外,更重要的作用是图形界面的渲染。如何解决深度学习模型的推理计算对图形渲染的干扰带来的卡顿问题,小米则采用了离线 Tuning 并自动进行细粒度 Kernel 拆分的形式来解决。
那么,为什么小米后来决定将这个艰难开发出来的移动端深度学习框架开源给开发者使用呢?何亮亮表示,这是考虑到当时市面上没有成熟的支持异构计算的开源框架可用,为了帮助更广大的开发者提升手机 AI 方面的体验,小米决定将 MACE 开源。
如今,MACE 项目非常活跃,社区中有 200 多个 Issue 讨论和若干 Pull Request,用户交流群(756046893)用户有 1000 多,主要集中在手机应用开发和 IoT 硬件设备开发领域。
据了解,MACE 框架已经广泛应用到小米手机的各种场景和业务中,例如相机场景识别、人像模式、人脸解锁、行为预测、机器翻译、语音识别等。
MACE 架构设计-异构计算
对于深度学习框架,尤其是推理框架,最核心的部分是高性能的 kernel 实现。MACE 的 NEON, GPU 的 kernel 实现均达到较高水平,同时对于 Hexagon DSP 也进行了支持和优化。
目前,MACE 支持主流的 CNN 模型,同时也支持机器翻译、语音识别的部分模型。除此之外,与 MACE 一同开源的,还有 MACE Model Zoo 项目(https://github.com/XiaoMi/mace-models),这个项目聚合了了一些常用的深度学习模型。
何亮亮介绍道,MACE 的核心框架是 C++,算子分别设计为 OpenCL 和汇编语言,具体选择哪个取决于底层的硬件,而周边工具则采用了更灵活的 Python。
目前,MACE 还无法做到在安卓和苹果系统之间自由切换,只支持安卓和 Linux。
MACE 在易用性、资源调度和兼容性方面的表现究竟如何?据悉,MACE 提供了丰富的文档和 Model Zoo,让开发者可以快速入手,且兼容主流的 ARM CPU 和常见的移动端 GPU,开发者可以灵活地选择不同的 CPU/GPU/DSP 计算设备。
与三大移动端框架大比拼
当前移动端的三大框架 Caffe2、TensorFlow Lite、Core ML 无论是从知名度还是采用广度上都比 MACE 有很大的优势。但是,相比于这三大框架,MACE 也有自己独特的优势。
相对于 Caffe/Caffe2/TensorFlow Lite,MACE 最大的优势是对 GPU 和 DSP 等异构计算的支持,劣势则是知名度和生态有不小的差距;而 Core ML 作为不同平台的专有框架,应用场合目前没有与 MACE 重叠。
对于开发者来说,MACE 最大的吸引力在于它对 CPU/DSP 异构计算的支持,这让 MACE 具有其他开源框架不具备的性能优势。
另一方面,Caffe2、TensorFlow Lite、Core ML 均使用 offline 方式,可在无需网络连接的情况下确保用户数据的私密性。和其他框架一样,MACE 也采用端侧离线模式。
那这是否代表移动端深度学习框架的趋势会倾向于 offline 呢?对此,何亮亮表示,移动端深度学习框架存在的意义在于端侧的本地计算。至于深度学习的推理在未来主要是 online 还是 offline 模式,他认为主要取决于场景,并不会趋同到一个模式。
具体而言,这主要取决于业务模式、产品体验、成本、隐私法规等几个因素。
业务模式主要是指特征数据的源头以及推理结果的去向,不管是从成本还是用户体验来说,数据和计算的保持局部性大多是有益的,例如,对于特征来自服务端的场景,天然适合 online 模式,比如广告信息流的点击率预估;而特征来自端测,则适合 offline 模式,例如拍照的后处理。而未来芯片的发展,以及 5G 的普及,也会导致 online 和 offline 的成本变化,也会影响两种模式的选择。另外,隐私法规的出台也是一个很重要的决定因素。
跟其他技术一样,随着行业的发展和成熟,移动端深度学习框架也会逐渐成熟并成为标准化的基础设施,但在此之前,仍会存在百家争鸣的局面,选择适合的框架解决产品落地的问题是最重要的。
目前,在移动端深度学习领域,无论是深度学习的异构计算芯片,还是芯片之上的深度学习框架,都处在蓬勃发展的阶段。这不仅给开发者提供了众多的选择,同时也带来了碎片化的负担和困扰。小米作为智能手机和 IoT 设备厂商,同样面临着深度学习推理软硬件选型的问题。为了更好的评估不同供应商的芯片和框架软件的性能指标,小米发起了开源移动端深度学习基准测试项目Mobile AI Bench ,希望借助小米在手机和智能硬件供应链方面的优势,与广大芯片厂商和开发者共同努力,推动移动端深度学习推理领域的发展。
会议推荐:
12 月 20-21,AICon 全球人工智能与机器学习技术大会将于北京盛大开幕,学习来自 Google、微软、BAT、360、京东、美团等 40+AI 落地案例年终总结,与国内外一线技术大咖面对面交流,不见不散。
评论 1 条评论