做者:字节跳动技术——白昆仑前端
AI技术如今已经覆盖到了互联网的方方面面,在云端的应用已经很是普遍和成熟。为了追随人工智能的浪潮,各大厂商也在不断增强移动设备的AI能力,主要体如今如下方面:算法
通过这几年的飞速发展,在终端部署AI能力渐渐步入了大众的视野,端智能的概念应运而生,旨在提供在终端设备上使用AI能力的完整框架。相比云端,端智能具有如下优点:安全
在端智能的应用方面,Google、Facebook、Apple等巨头已经走在了前列。Google提出了Recommendation Android App的概念,根据用户兴趣进行内容推荐。Apple的Face ID、Siri推荐也都是端智能应用的表明。markdown
在国内,阿里、腾讯等企业也前后进行了端智能的尝试。阿里在手淘中宝贝列表重排、智能刷新、跳失点预测、智能Push、拍立淘(以图搜图)等多个场景实现了端智能的落地,并推出了MNN神经网络深度学习框架。腾讯则推出自研的NCNN框架,并在医疗、翻译、游戏、智能音箱等领域普遍应用端智能技术。网络
一个典型的端智能开发流程如图2-2所示。首先在云端利用收集的数据进行算法设计和模型训练,并输出模型。此时的模型并不适用于移动设备,需经过模型转换和压缩转换为移动端推理引擎所支持的格式。最后经过云端配置,将算法和模型动态部署到目标设备上。在终端设备上,在合适的使用场景和时机触发推理流程,根据模型进行输入数据的整理并传递至推理引擎,获取并解析推理结果后进行相应的逻辑调整和反馈。架构
在移动设备部署端智能并不是易事,现阶段的开发流程存在诸多的问题须要咱们一一解决。框架
按照典型的端智能开发流程,首先须要算法工程师在云端训练和输出模型,模型决定了数据的输入、输出格式。下一阶段,客户端工程师需进行端侧的开发来适配当前模型,包括输入数据的收集和整理、输出数据的解析等。开发完毕后,再交由测试工程师进行后续的质量保障。这期间须要多个角色的协同和沟通,总体开发链路冗长且低效。机器学习
正如上面所提到的,一旦模型肯定后,其输入输出就遵循固定的格式。若是模型想调整输入数据的策略,就必定要同时修改客户端逻辑。所以,线上验证与功能迭代的灵活性受到了极大的限制,无形中拉长了整个功能上线周期。此外,不一样端智能应用场景(CV、推荐等)也存在着较大的需求差别,如何知足不一样的业务场景需求也是须要解决的头部问题。oop
构建一套完整的端智能运行环境并不是易事,除了在云端进行模型的训练和下发,还须要在客户端进行数据的收集、存储、处理,硬件资源的评估与调度,推理引擎的选择,操做系统的兼容,推理任务的管理与调度等等。这些问题无形之中提升了端智能应用的门槛,如何可以屏蔽这些复杂的端上环境也是端智能目前面临重要挑战。性能
为了解决上面的问题,Pitaya与MLX团队进行了深度合做,共建了一套从端(云端)到端(终端)的全链路动态部署方案。MLX是云端的模型训练开发平台,提供模型训练、转化、调试、发布、A/B等能力。客户端Pitaya SDK则提供特征工程、推理引擎、算法包管理、任务管理、监控等端上能力。二者深度整合,覆盖了端智能流程的各个环节,大大下降端智能的应用门槛。
在介绍Pitaya前,先着重介绍一下MLX平台。在进行模型训练的过程当中,咱们会碰到不少的环境差别,好比不一样的数据源的存储方结构、数据格式,不一样的机器学习框架,以及不一样操做系统环境和基础设施能力的搭建。MLX平台就是为了解决上面的问题而诞生的。它提供了一个在云端实现模型训练、转换并将其最终产品化的服务平台,经过普遍接入了各种计算框架和服务平台,省去了复杂的环境搭建工做。
MLX的架构如图3-1-1所示:
Pitaya将自身的工做流与MLX平台特性进行了深度的整合,以下图所示。在传统的端智能开发流程中,云端仅负责模型的输出,可以动态部署下模型。而在Pitaya工做流中,“算法包”是一个完整资源的集合。“算法包”包括推理过程当中使用到的模型,也包括算法逻辑及其依赖库信息,这些全部的内容被统一打包成为“算法包”。若是客户端同步了算法包内容,且具有算法包运行所需的各项能力,那么就能够在运行该算法包,实现一个完整的推理流程。
算法包的开发过程当中,能够临时生成测试算法包。经过扫码将宿主App与Pitaya-MLX平台创建数据通道,推送测试算法包到客户端,经过真机运行和调试算法包,输出的日志信息也会在MLX的IDE环境展现,从而实现云端调试的完总体验。得益于Pitaya与MLX深度融合,算法工程师再也不依赖客户端工程师进行任何开发,就能够独立完成算法在端上的运行与调试,极大的提高了算法开发的效率。
当算法工程师完成算法包的调试后就能够将当前项目打包成一个算法包。每一个业务场景都有一个当前App下的惟一Business标识,算法包与Business绑定。在Pitaya-MLX发布平台可针对某一Business业务,从App、App版本、OS版本、渠道等多个维度对算法包的下发进行配置与管理。发布平台还与A/B平台实现了数据打通,能够实现无缝的线上实验对比,大大加快业务线上效果的验证。
除了上面提到的常规配置能力,Pitaya-MLX发布平台还支持对当前设备机型进行性能打分,根据打分的结果来进行算法包的差别化下发。这种部署方式能够更加细粒度的对线上设备性能进行划分,针对高性能或支持某些AI加速的设备下发精度更高的模型,而针对性能较弱的设备为了追求更好的使用体验,则部署相对精简的模型。
Pitaya中一个核心能力就是“特征工程”。端上推理通常须要从原始数据生成输入到模型中的特征,再由模型推理获得结果。若是须要业务方自行收集和保存原始数据,其工做量是巨大的。特征工程的做用就是帮助业务方无侵入式的收集端上的用户特征数据,用于后续的推理预测。Pitaya特征工程与Applog SDK(事件统计SDK)打通,支持在算法包中对推理过程当中须要使用到的的Applog Event进行配置,当算法包在本地生效时,Pitaya就能够根据算法包的配置收集数据。同时,Pitaya也提供定制化的接口,用于关联用户行为上下文,例如:点击、曝光、滑动等。在算法包运行过程当中,能够经过特征工程的能力获取用户的原始数据,经过数据的处理生成模型须要的输入数据。这种数据收集的方式较传统链路具有更好的动态性和灵活性,让业务方从繁重的数据处理工做中解放了出来。
此外,特征工程还支持上传指定的数据至MLX平台,用于云端的模型训练,造成一个完整的数据闭环,如图3-2-1。
当一个算法包同步到了终端设备后,触发算法包的运行能够有两种方式。
- (void)runBusiness:(NSString *)business
input:(PTYInput *_Nullable)input
config:(PTYTaskConfig *_Nullable)config
taskCallback:(PTYTaskCallback _Nullable)taskCallback;
复制代码
每触发一个算法包的运行实际上就至关于建立了一个任务(Task),Pitaya内部的任务管理模块会对任务进行统一的接管与处理。算法包是在Pitaya的运行容器中执行的,该容器为每个任务提供独立的运行环境,并经过Pitaya提供的接口来进行特征工程数据的存取和模型推理等。Pitaya对推理流程和接口进行了高度的抽象,支持不一样类型的推理引擎的集成(ByteNN、ByteDT、TFLite),最大程度上的知足了不一样业务方的使用需求,下降项目迁移到Pitaya框架的成本。
为了实现一键集成的使用体验,Pitaya内部打造了一套对任务进行全面、细致的监控体系。监控内容涵盖如下几个方面:
Pitaya SDK将以上指标进行了分类整理,依托于Slardar平台的数据展示能力,每一个集成业务方均可以一键复制模板,在宿主App内创建完善的数据看板,真正作到开箱即用。
Pitaya是专门为移动端打造的端智能一体化方案,与传统方案相比,具有如下优点:
目前,字节跳动内已经有抖音、头条、西瓜等众多产品线基于Pitaya开始了端智能的实践和探索,在此过程当中咱们也与业务方持续沟通,不断打磨产品和使用体验,并对将来Pitaya的发展方向进行以下规划:
字节跳动移动平台团队(Client Infrastructure)是大前端基础技术行业领军者,负责整个字节跳动的中国区大前端基础设施建设,提高公司全产品线的性能、稳定性和工程效率,支持的产品包括但不限于抖音、今日头条、西瓜视频、火山小视频等,在移动端、Web、Desktop等各终端都有深刻研究。
就是如今!客户端/前端/服务端/测试开发 面向全球范围招聘!一块儿来用技术改变世界,感兴趣能够联系邮箱 chenxuwei.cxw@bytedance.com,邮件主题 简历-姓名-求职意向-电话。