头图

作者:修玉同(音弦)

MNN 工作台是阿里淘系端智能团队构建并对外免费开放的一站式端侧 AI 研发平台,它基于已开源的 MNN 深度学习端侧推理引擎(开源地址:https://github.com/alibaba/MNN ),内嵌模型工具、单机预训练模版、开箱即用算法集、端侧真机断点调试以及独创的三端一体部署方案等一系列能力。自对外开放以来,MNN 工作台始终致力于解决 降低对 AI 感兴趣的开发者们的参与门槛提升算法与工程之间协作效率 两个端侧 AI 发展的核心问题,深受广大端侧开发者的好评。

但在好评之余,MNN 工作台团队仍在持续思考:在让迭代变得更加高效、部署验证更加连贯、模型生产更加简单这几点上,我们真的做到极致了吗?在面向不同分层的开发者时,我们真的解决了他们所有的核心诉求吗?

因此在和不同团队与开发者沟通交流后,我们将目光聚焦在了两大方面:

  1. MNN 工作台的部署调试体验非常流畅,但是缺乏杀手锏级别的训练能力,这会导致训练 - 部署的整体流程产生割裂;
  2. 算法逐渐产生复杂、多任务、多模型协作的趋势,如何针对这一问题提供更有效的解决方案,也是一个亟需攻克的难点。

构建强大专业的训练能力

MNN 工作台提供了开箱即用的算法模型市场以及内置的多项预训练模版,面向开发者提供极致简单的模型生产方式,这从一定程度上为端侧 AI 场景的普及打下了基础。但是随着越来越多专业级算法用户的加入使用,MNN 工作台现有的训练能力也暴露了诸多弊端:

图 1 - 过去的一站式工作流

  • 模型市场 / 预训练模版面向的是简单通用的场景,仅对外暴露了非常少的模型参数,无法按照专业算法的诉求进行个性化修改和定制;
  • MNN 工作台先前的训练流程都是基于 MNN 训练机制运行在单一设备上,这从一定程度上限制了数据集与训练参数,导致最终的模型效果无法满足复杂业务场景下的高质量要求。

基于此,在 MNN 工作台中嵌入专业级的训练能力融合成为推训一体的完整工作流迫在眉睫。考虑到训练需要大规模的集群资源及调度管理能力,我们选择和阿里云 PAI-DLC 团队合作,借力其强大的云端基础设施打造契合于端侧 AI 研发流程的训练能力。在整个实施过程中,MNN 工作台并不是简单的将云端训练概念照搬以及 API 联调,而是结合自身洞察到的端侧部署验证遇到的痛点,从用户视角出发进行的链路设计:

图 2 - 基于 PAI-DLC 的推理训练一体化工作流

  • PAI-DLC 是一个独立的训练集群,训练过程涉及的代码需要通过 Git 提交,数据、样本及模型等还需要通过 NAS / OSS 提供,这些环节都需要人为的进行配置,配置成本较高。因此 MNN 工作台整体串联了相关系统,仅需要用户简单点击几下鼠标,相关数据集等就会自动同步对应的位置,再配合相关自动化脚本协助用户完成繁琐重复性的工作;
  • 模型产出到部署到终端设备上还有一定距离。千万别小看这最后一公里,传统的端侧算法部署流程需要工程团队的介入支持,相关参数效果调整还需要不断沟通联调,消耗算法耐心和精力。而利用 MNN 工作台三端一体的特性,算法同学一键下载对应的模型文件、编写简短几行代码就可以完成真机效果验证,真正做到一站式训练部署的顺滑体验;
  • 针对端侧模型轻量化的特点,我们也在流程中融入了 MNN 量化稀疏算法能力,让算法可以高效对比不同模型参数计算量下的效果。

图 3 - 推理训练一体化工作流演示

功能精进:多窗口、联合调试与 Git Flow

随着推训一体工作流的逐步完善,一个全新的问题也随之浮出水面:云端训练的耗时冗长,为了节约时间如何同时训练多个模型?

在此之前,工作台仅支持单窗口“独占”的运行模式,即用户同一时刻只有一个工程能够享受到一站式工作的“红利”,为了操作其他工程,用户只能从当前工程切出,这像极了智能机之前的“老年机”交互,给用户带来了很大不便。此外,一些复杂的端计算场景也需要对多个工程进行联动开发和调试,将工作台改造为支持多开势在必行。

因此自推训一体平台萌芽之际,我们就开始了对工作台多开能力的改造,最终我们完成了工作台底层进程模型和 IPC 模型的改造,并在端侧 DebugSDK 支持了一对多连接的能力,让工作台实现了从“老年机”到“智能机”时代的跨越:

图 4 - MNN 工作台多窗口架构

工作台进入“智能机”时代为端侧的算法研发带来了更多可能,自此之后你不必再为使用其他功能要关掉当前工程而苦恼了:现在你可以同时打开多个工程,同时开发和提交多份训练代码,在同一台手机上调试多个端计算工程,在开发的同时使用模型工具等等:

图 5 - MNN 工作台多任务联合调试

图 6 - 利用多窗口能力同时访问多个模型工具

工作台从单窗口变成多窗口意味着用户需要管理的工程变多了,为了避免混乱,全链路的所有操作最好能够完全在其对应的工作台窗口中完成,通过梳理细节我们发现无论端计算发布还是远程训练都少不了基于 Git 的代码发布流程,如果工作台不能支持完备的 Git 操作那么整个工作流依然是割裂的因此我们在工作台中移植了可视化的 Git Flow,它支持通过 Diff Editor 检查变更,可视化编辑 Git 工作区,通过命令菜单执行 Pull / Push / Stash 等操作,通过 Git 组件你可以轻松完成代码检查和发布。推训一体平台配合 Git Flow 真正意义上实现了端侧算法工程全链路工作都在同一个工作区完成

图 7 - 通过 Git Flow 组件进行可视化版本控制

最佳实践

基于推训一体工作流和工作台完善的集成开发环境,我们可以快速实现从 0 到 1 的端侧算法工程构建,首先我们需要创建一个 PAI 训练工程,编写好训练代码,进行本地训练验证:

图 8 - 使用本地环境运行训练工程

本地验证无误后,我们可以一键推送到云端 PAI-DLC 容器中进行训练,训练结束后可一键将训练产物拉回本地:

图 9 - 云端训练和训练产物下载

云端训练产物往往要经过诸如转换、量化等模型工具的处理才能在端侧使用,借助于工作台多窗口能力你可以直接在模型上右键打开任意多个模型工具进行高效的模型处理:

图 10 - 一键执行多种模型工具

最后,我们可以切换到三端一体的端侧开发部署环境进行验证,如果在验证过程中遇到问题我们可以无缝切换回训练工程重复前面的步骤:

图 11 - 端侧部署与调试

推训一体工作流较为完整的解决了端侧算法训练与部署割裂的问题,其中训练部分通过端云结合的手段让开发者无需感知端和云的差异,推理验证部分借助三端一体和工作台强大的调试能力让算法可以在端侧独立进行调试和部署。目前这些能力均已开放,你可以在 https://www.mnn.zone 下载 1.6.0 及以后版本的 MNN 工作台进行体验,推训一体的操作方式可参考 MNN 工作台推训一体平台操作手册。

结语

在过去这半年,MNN 工作台始终秉持「解决用户真正的需求」的理念,不断与工程、算法同学深入交流,沟通其在端侧 AI 研发中遇到的种种问题。从调试、真机验证到实时性能评测,一系列功能的推出都展现了我们在解决端侧 AI 研发全链路问题上的决心和能力。而随着集成专业级训练能力的 MNN 工作台版本发布,相信会给大家带来更好的使用体验。

关注【阿里巴巴移动技术】微信公众号,每周 3 篇移动技术实践&干货给你思考!


阿里巴巴终端技术
336 声望1.3k 粉丝

阿里巴巴移动&终端技术官方账号。