滴滴开源了一个终端侧 AI 集成运行时环境(IRE)—— AoE(AI on Edge)。AoE 以 “稳定性、易用性、安全性” 为设计原则,可以帮助开发者将不同框架的深度学习算法轻松部署到终端高效执行。
滴滴之所以要做这样一个运行时框架,原因有两个:
一是随着人工智能技术快速发展,这两年涌现出了许多运行在终端的推理框架,在给开发者带来更多选择的同时,也增加了将 AI 布署到终端的成本;
二是通过推理框架直接接入 AI 的流程比较繁琐,涉及到动态库接入、资源加载、前处理、后处理、资源释放、模型升级,以及如何保障稳定性等问题。
根据介绍,当前有以下 8 种终端运行的主流推理框架:
从本质上来说,无论是什么推理框架,都必然包含初始化、前处理、执行推理、后处理、释放资源这 5 个处理过程,对这些推理过程进行抽象,是 AoE 支持各种推理框架的基础。目前 AoE 实现了对两种推理框架 NCNN 和 TensorFlow Lite 的支持。
具体来说,AoE 集成运行环境最基本的便是抽象推理操作,通过依赖倒置的设计,使得业务只依赖 AoE 的上层抽象,而不用关心具体推理框架的接入实现。这种设计带来的最大的好处是开发者随时可以添加新的推理框架,而不用修改框架实现,做到了业务开发和 AoE SDK 开发完全解耦。
在 AoE SDK 中这一个抽象是:
InterpreterComponent:用来处理模型的初始化、执行推理和释放资源。
Convertor:用来处理模型输入的前处理和模型输出的后处理。
AoE 还有另一个特性是具有稳定性保障。众所周知,Android 平台开发的一个重要的问题是机型适配,尤其是包含大量 Native 操作的场景,机型适配的问题尤其重要,一旦应用在某款机型上面崩溃,造成的体验损害是巨大的。
有数据表明,因为性能问题,移动 App 每天流失的活跃用户占比 5%,这些流失的用户,6 成的用户选择了沉默,不再使用应用,3 成用户改投竞品,剩下的用户会直接卸载应用。因此,对于一个用户群庞大的移动应用来说,保证任何时候 App 主流程的可用性是一件最基本、最重要的事。
结合 AI 推理过程来看,不可避免地,会有大量的操作发生在 Native 过程中,不仅仅是推理操作,还有一些前处理和资源回收的操作也比较容易出现兼容问题。为此,AoE 运行时环境 SDK 为 Android 平台上开发了独立进程的机制,让 Native 操作运行在独立进程中,同时保证了推理的稳定性(偶然性的崩溃不会影响后续的推理操作)和主进程的稳定性(主进程任何时候不会崩溃)。
具体实现过程主要有三个部分:注册独立进程、异常重新绑定进程以及跨进程通信优化。
目前 AoE SDK 已经在滴滴银行卡 OCR 上应用使用,想更加清晰地理解 AoE 和推理框架、宿主 App 的关系,可以通过下面的业务集成示意图来了解它:
已经开源的运行时环境 SDK 包括 Android 和 iOS 平台,此外 Linux 平台运行时环境 SDK 正在紧锣密鼓地开发中,预计在 9 月底也会释出。
领取专属 10元无门槛券
私享最新 技术干货