端智能:面向手机计算环境的端云协同AI技术创新
近年来,随着移动端设备软硬件能力的进步,移动端的算力有了很大提升,同时面向移动端的机器学习框架和模型轻量化技术越来越成熟,端上的AI能力逐渐进入大众视野,端智能在电商领域也开始逐步走向规模化应用。通过持续探索,京东零售技数中心团队创新突破了端侧高性能推理引擎、端侧模型分发、异构环境及复杂任务兼容等技术卡点,完成了多个业务应用和落地,并获得信通院边缘计算产业全景图行业认证。目前,京东众多业务已集成至端智能SDK,流量分发、图像识别等算法场景运行情况良好,日推理计算量已经达数亿次,为用户带来了更好的购物体验。
1、什么是端智能
目前,大多数的模型服务主要基于云服务端进行计算。模型的训练和推理都在云端,使用时移动端用户通过向云服务器发送请求,包含用户的原始数据。云服务器在接收到请求后,进行数据预处理和推理计算等操作,并将结果返回给移动端用户。云服务器承担了几乎所有的计算负载,而移动端仅作为用户交互的界面。所以云端智能面临着一些瓶颈,包括高延迟、高成本,以及隐私安全风险。

为了打破云端智能的瓶颈,端智能应运而生。端智能技术是将模型推理计算过程迁移至移动端,供移动端直接调用。使用时用户在端上触发推理计算,将原始数据给到模型进行特征加工和推理计算,最后将结果返回给用户。相比云端智能,端智能有三大优势:
•实时性高:端上实时响应用户请求,为用户提供实时AI反馈,提升用户体验;
•隐私合规性强:端上数据端上消费,无需上传云端,隐私合规性强;
•具备离线服务能力:推理服务无需请求云端,在无网或者弱网环境下也可以使用;
2、问题与挑战
受限于移动端设备的性能和多样性,在移动端设备上部署端智能并非易事,在端智能开发过程中,遇到了各种挑战,这些挑战会一直伴随着端智能开发过程,需要一直去优化解决,才能将端智能的体验做到极致。
- 计算性能
由于使用移动设备的计算资源有限,要兼顾用户体验与计算效率的平衡,需要针对移动端设备 的CPU/GPU使用率、内存使用率、耗电量、数据获取、任务调度等影响推理耗时的问题进行持续优化。
- 灵活性
业务算法模型确定后,其输入输出就得遵循固定的格式。不同端智能应用场景需要的模型和特征数据处理格式存在着较大的差异,如果想调整就需要改客户端逻辑,功能验证和迭代效率受到极大的限制。如何在不发版的情况下解决不同业务场景需求,也是需要优先解决的问题。
- 稳定性
端智能需要在客户端进行数据的收集、存储、处理,推理任务的管理与调度,推理引擎和操作系统的兼容等处理,这些环节均可能引起APP的崩溃。作为一家客户为先的公司,因为端智能的不稳定性导致影响用户体验,这是不被允许的,如何在复杂的端上环境做到零崩溃是非常大的挑战。
- 安全性
端上存在大量的数据,端智能的数据处理逻辑和推理逻辑都是在端上进行,防止数据泄露、数据篡改、保证数据的隐私合规是非常重要的。
3、京东端智能系统架构
京东零售端智能系统整体系统架构设计如下:

京东端智能系统架构遵循通用性和可规模化应用的设计原则,主要为云-边-端三层,分别对应着算法模型的生产、部署和执行三个环节。
云对应的是由京东零售-技术研发与数据中心研发的九数算法中台,负责模型训练、模型编译、模型调试。端智能模型生产和训练在云端进行,在九数算法中台训练好模型后,需要对模型进行裁剪和压缩,实现模型的轻量化,再对轻量化的模型进行编译转换,以生成在端上可执行的模型文件。
边对应的是由京东零售-技术研发与数据中心研发的端智能平台,负责模型的管理和模型部署分发。端智能管理平台提供了业务接入、模型管理、配置管理、模型部署、模型分发等一系列的框架能力。端智能平台模型支持A/B Test,以验证算法策略的效果;同时支持分级部署,针对不同机型部署不同的算法模型。
端对应端智能SDK,负责端上用户行为感知、数据加工,以及推理任务的调度和计算。端智能SDK包含数据管道和基础容器两部分,数据管道负责端上用户行为感知、数据加工、数据存储和数据上报,为端智能推理提供原始数据和特征数据,基础容器为端智能算法模型提供了端上的运行环境,支持不同推理任务并行处理,让端上推理计算高效地运转起来。
4、主要工作
4.1超实时端数据流处理
数据存储
端上的数据存储高性能移动端数据库,支持数据加密,支持并发数据读写,满足端上数据的安全要求和高频数据读写。
端上数据的存储和获取作为推理计算的前置环节,如果耗时偏高必然会增加整个端智能推理的耗时。为了最大提升数据库的性能,前置了数据库路由,根据数据类型,需要加密的数据会存储到加密数据库,不需要加密的数据会存储到非加密数据库,数据库设计上采用单库单表的设计模型,可以减少单个数据库文件的大小,降低文件锁的竞争概率,提高并发性能。同时引入了数据库的自管理机制,长时间不被使用的旧数据会被删除,降低数据库存储量,提升数据库的读写性能。
数据处理
端上用户的原始行为通常不能直接作为模型输入进行计算,京东搭建了一套数据流框架,用来进行模型特征生产和特征计算。端侧模型用到的数据源大致可分为3类:云端下发、端侧批量存储数据、端侧实时行为感知。云端下发是通过请求后端服务获取到的,通常会在云端处理好,APP内无需额外的处理,可以直接使用。端侧批量存储数据指对不会实时发生变化的数据进行定期存储更新,端侧实时行为感知指用户在使用APP过程中的实时行为,经过加工处理后再进入模型计算。
端侧批量存储数据采用非实时批量处理模式,使用数据库SQL能力进行粗粒度加工,也可以在Python脚本中执行个性化处理逻辑。端侧实时行为感知采用实时计算的模式,实时对用户行为进行过滤、规则匹配、关联聚合等操作,生产为模型输入需要的特征数据。生产好的特征会再进一步经过特征计算,包括离散特征编码、连续特征归一化等操作,计算好的特征即可输入模型进行推理计算。
4.2高效端事件触发和调度
基础容器为端智能提供轻量化、高性能的执行环境,同时支持模型频繁的实验和部署,支持端智能在不同设备上高效运行。当算法模型下发到移动端设备后,触发推理计算有两种方式:API触发和事件触发。

API触发: 算法工程师通过调用端智能提供的推理触发API进行触发,调用方式如代码示例如下。API使用Router协议,使用时传入systemCode和businessCode业务标识,支持自定义输入数据,在回调方法中获取推理计算结果。
JDRouter.to("JDEdgeAI", "infer").putString("systemCode", "xxx").putString("businessCode", "xxx").extraObject("extData",HashMap).callBackListener(new CallBackWithReturnListener() {@Overridepublic void onComplete(Object value) {android.util.Log.d(TAG, "onCompleteWithValue " + value.toString());}@Overridepublic void onComplete() {android.util.Log.d(TAG, "onComplete");}@Overridepublic void onError(int errorCode) {android.util.Log.d(TAG, "onError errorCode = " + errorCode);}}).jump(this.getContext());
事件触发: 算法工程师可以在算法模型资源包中配置需要触发推理计算的埋点事件ID,当基础容器监测到有对应的埋点事件时,则会触发推理计算执行。基础容器中的功能均已任务化,事件触发的方式不仅可以触发模型推理,也可以触发特征数据计算、模型预加载等操作。触发配置如下所示,taskName是任务类型,events是任务触发的事件。
{"triggers": [{"taskName": "InferTask","events": [{"type": "mta","pageId": "JD_XXXX","needPv": false,"clickIds": ["JD_XXXX",]}]},{"taskName": "CalcTask","events": [{"type": "mta","pageId": "JD_XXXX","needPv": false,"clickIds": ["JD_XXXX","JD_XXXX"]}]}]
}
触发器每触发一次即创建一个任务,基础容器内部的任务调度模块会对任务进行统一的编排与处理。一次推理过程会产生多个任务,每个任务都包含唯一ID、前置依赖、任务优先级、后置依赖等属性。
为了高效执行任务,降低推理计算耗时,京东采用多任务队列,按任务优先级并行执行的策略。基础容器内部预置了三个任务队列,分别核心任务队列、常规任务队列、低优任务队列,按照任务类型分别放入对应的任务队列中,每个任务队列都有自己的执行线程,执行线程会轮询执行任务队列中的任务,直到产生推理计算结果,本次推理任务链路结束。

为了使任务调度执行频率更高,执行速度更快,京东支持了多种能力:
•高并发: 支持多任务并发、多线程调度的任务管理模式;
•优先调度: 支持设置任务优先级,保证高优任务优先执行;
•熔断保护: 对于连续 N 次运行失败或者崩溃,会暂时阻止其运行;
•防卡死: 推理链路某环节超时,会立即停止当前任务。
基础容器为每一个任务提供独立的运行环境,并通过对外提供API来进行模型推理等。基础容器还对推理流程和任务链路进行了高度的抽象,最大程度上的满足了不同算法场景的使用需求。
4.3高兼容性PythonVM端计算容器
为了在端侧APP满足算法模型快速迭代的需求,同时降低算法工程师参与APP移动端开发的门槛,我们上线了Python VM的计算容器。Python VM容器提供了一定的动态执行的能力,在不依赖APP发版的情况下,可以随时更新由Python编写的AI算法服务逻辑,调整业务策略,优化业务效果。
选用Python语言主要考量其与AI技术栈的契合,Python是算法工程师最熟悉和熟练使用的语言。算法工程师在训练好模型以后,将整个模型服务逻辑通过Python脚本部署在APP中,无需使用JAVA、Object-C等APP开发语言,显著提升算法开发效率。此外,Python VM与原生APP开发环境解耦的方式,使得我们可以在安卓、iOS双端使用同一套方案,无需分别兼容和适配。将Python VM集成至APP中,我们针对性地解决了以下3个问题:
•包体积缩减:只保留了Python核心执行器功能,非核心的三方库也做了裁剪,编译功能前置至云端完成,移动端直接执行字节码;
•字节码加密:对动态下发的字节码采用自定义加密,防止下发过程中被篡改,保障安全;
•线程级并行:移除GIL锁的限制,在APP单进程环境内,使用多个线程并行执行多个任务。

4.4高性能端推理引擎
AI模型对计算和存储资源都有较高的要求,因此,高性能推理引擎是AI模型能在手机侧运行的核心要素。端侧推理引擎的架构与云侧推理框架整体类似,包括计算图、算子的抽象等。但由于移动端资源受限,一方面对引擎包体积有一定约束,端侧推理引擎的算子种类需要尽量收敛,实现原子算子,通过原子算子组合出高阶功能算子。另一方面,移动端设备硬件差异性较大,CPU、GPU、NPU都包含多种型号,推理引擎需要兼容各类设备。在这些通用能力之外,为了保障复杂模型性能,我们重点优化了以下2个维度:
•算子内核:针对热点算子及部分算子的低精度实现,定向分析性能瓶颈,利用向量化指令优化内核实现,提升算子性能。
•多硬件混合调度:将模型计算图拆分为多个子图,不同子图可拆分至CPU、GPU、NPU多种硬件分别执行,建模寻优最佳拆图方案,充分挖掘利用所有硬件的算力;

此外,为了支持原生APP之外的场景,例如H5页面、小程序等场景,我们还拓展了JavaScript版本的推理引擎。JavaScript引擎提供与原生APP一致的计算接口,在JS环境中自闭环使用,是一套更为轻量和灵活的解决方案。
5、业务实践
端智能技术目前已经在京东流量分发、图像识别等多种算法业务场景落地。

流量分发:通过用户实时浏览行为,理解用户意图,增强实时商品分发效果,提升用户购物体验。
图像识别:端上实时识别用户拍摄图片的合规性,降低算法计算延时,提升实时识别效果。
由于数据与模型的计算均发生在端上,不依赖网络,没有网络延迟。因此端智能相比云端智能的耗时有显著的降低,推理效率有数十倍的提升。通过实践发现对于实时性要求高,计算相对简单的场景适合端上执行。
6、总结与展望
端智能建设过程围绕计算性能、灵活性、稳定性、安全性展开,动态预加载、任务调度、高性能数据存取提升了推理链路性能,模型动态下发、策略配置、数据动态处理为端智能业务开发带来充足的灵活性,异常监控、控制开关、兼容处理保证了端智能在线上运行的稳定性,加密传输,隐私合规为端智能提供了安全性保障。目前,京东众多业务已集成至端智能SDK,流量分发、图像识别等算法场景运行情况良好,日推理计算量已经达数亿次,为用户带来了更好的购物体验。
端智能的出现,弥补了云端智能在网络延时、数据丰富、隐私安全、算力成本方面的不足,但是端智能与云智能本身就不是割裂的技术体系,而是相辅相成的,未来端上模型可以作为云端模型的子模型进行前置推理,端上运行小模型,云端运行大模型,更好地提升推理效果和速度。
端智能未来的建设方向:
•平台能力建设: 随着算法场景复杂性的增加,开发效率将受到影响。端智能团队将通过平台能力建设,提供开发、调试工具,提升算法工程师的模型开发、上线效率。
•多端场景覆盖: 京东中存在大量的H5、小程序等场景,端智能后续将在多端进行落地,算法能力将覆盖移动端全场景。
•算法场景扩展: 端智能团队致力于在端上覆盖流量分发、CV、NLP等多算法场景,将更多云端算法模型迁移至移动端前置计算。
作者:京东零售技数中心
来源:京东零售技术 转载请注明来源
更多年度盘点文章
亚洲唯一!京东荣获2024年度Gartner供应链技术创新奖背后的创新探索
万字干货-京东零售数据资产能力升级与实践
2023京东零售技术年度盘点
相关文章:
端智能:面向手机计算环境的端云协同AI技术创新
近年来,随着移动端设备软硬件能力的进步,移动端的算力有了很大提升,同时面向移动端的机器学习框架和模型轻量化技术越来越成熟,端上的AI能力逐渐进入大众视野,端智能在电商领域也开始逐步走向规模化应用。通过持续探索…...
PHP函数 “password_hash“ 哈希密码
哈希函数是一种将输入转换为固定长度字符串的方法,这个过程是不可逆的,也就是无法从哈希值还原出原始输入。通过将密码进行哈希处理,即使数据库泄露,攻击者也无法简单地获取到用户密码。 在PHP中,我们可以使用 "…...
第十一天-Excel的操作
目录 1.xlrd-Excel的读模块 安装 使用 获取工作簿 读取工作簿的内容 xlsxwriter-Excel的写模块 安装 使用 生成图表 add_series参数 图表的样式 demo:生成图表 Excel的操作在python中有多个模块,为了能够快速使用,选择了相对简单…...
【java任意文件漏洞修复,使用文件魔数解决】
java任意文件漏洞修复,使用文件魔数解决 背景: 客户进行渗透测试,验证上传文件的程序没有对上传文件作任何过滤,导致可以上传任意文件到服务器,甚至是病毒文件和Webshell木马文件。 解决办法:对于上传的附件…...
LeetCode 热题 100 | 二叉树(二)
目录 1 543. 二叉树的直径 2 102. 二叉树的层序遍历 3 108. 将有序数组转换为二叉搜索树 菜鸟做题,语言是 C 1 543. 二叉树的直径 这道题和 124. 二叉树中的最大路径和 太像了 题眼:二叉树的 直径 是指树中任意两个节点之间 最长路径的长度 。…...
mini-spring|定义标记类型Aware接口,实现感知容器对象
**前言:**如果我们想获得 Spring 框架提供的 BeanFactory、ApplicationContext、BeanClassLoader等这些能力做一些扩展框架的使用时该怎么操作呢。所以我们本章节希望在 Spring 框架中提供一种能感知容器操作的接口,如果谁实现了这样的一个接口ÿ…...
83. 删除排序链表中的重复元素
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 输入:head = [1,1,2] 输出:[1,2] 输入:head = [1,1,2,3,3] 输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已…...
贪心算法
贪心算法 例题1、股票买卖题目信息思路题解 2、货仓选址题目信息思路题解 3、糖果传递题目信息思路题解 4、雷达设备题目信息思路题解 例题 1、股票买卖 题目信息 思路 相邻两天,后>前,则交易一次 题解 #include <bits/stdc.h> #define en…...
MySQL基本知识
目录 一,MySQL的元数据库 1.1.什么是元数据库 1.2.有哪些元数据库 1.3.切换数据库 二,账户管理 2.1.设置权限 2.2.授权用户 2.3.查看权限 2.4.撤销权限 三,MySQL引擎 3.1什么是数据库引擎 3.2.查看数据引擎 3.3.MyISAM引擎 3.4…...
Vue3 (unplugin-auto-import自动导入的使用)
安装 参考链接 npm i -D unplugin-auto-importvite.config.ts里面配置 import AutoImport from unplugin-auto-import/viteAutoImport({imports:[ vue,vue-router]})重新运行项目会生成一个auto-imports.d.ts的文件 /* eslint-disable */ /* prettier-ignore */ // ts-nochec…...
【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞
Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 Nx02 漏洞描述 大华智慧园区…...
JavaScript的书写方式
JavaScript的书写方式 目前较为流行的是第二种和第三种,第一种很少见。在第二种和第三种推荐使用第三种,因为在日常开发/工作中,第三种是最为常见的 1.行内式 把JS代码嵌入到html元素内部 示例代码 运行效果 由于JS中字符串常量可以使用单引…...
第二十篇-推荐-纯CPU(E5-2680)推理-llama.cpp-qwen1_5-72b-chat-q4_k_m.gguf
环境 系统:CentOS-7 CPU: Intel Xeon CPU E5-2680 v4 2.40GHz 14C28T 内存: 48G DDR3 依赖安装 make --version GNU Make 4.3gcc --version gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9)g --version g (GCC) 11.2.1 20220127 (Red Hat …...
CSS常见选择器
CSS常见选择器 在Web开发中,层叠样式表(CSS)是用于描述HTML或XML(包括SVG和XHTML等其他XML语言)文档的样式的语言。CSS描述了文档的表现形式,包括布局、颜色和字体等。在CSS中,选择器是一种模式…...
[LWC] Components Communication
目录 Overview Summary Sample Code 1. Parent -> Child - Public Setter / Property / Function a. Public Property b. Public getters and setters c. Public Methods 2. Child -> Parent - Custom Event 3. Unrelated Components - LMS (Lightning Message…...
Unity中URP实现水体(水下的扭曲)
文章目录 前言一、使用一张法线纹理,作为水下扭曲的纹理1、在属性面板定义一个纹理,用于传入法线贴图2、在Pass中,定义对应的纹理和采样器3、在常量缓冲区,申明修改 Tilling 和 Offset 的ST4、在顶点着色器,计算得到 应…...
anaconda指定目录创建环境无效/环境无法创建到指定位置
已经设置目录到D盘 创建环境时还是分配到C盘 可能是指定位置没有开启读写权限,如我在这里安装到了anaconda文件夹,则打开该文件夹的属性->安全->编辑 allusers下的权限全都打勾...
《Docker极简教程》--Docker在生产环境的应用--Docker在生产环境的部署
一、准备工作 1.1 硬件和基础设施要求 硬件和基础设施要求是在部署 Docker 到生产环境之前需要认真考虑和准备的重要方面,以下是一般性的要求: 服务器硬件: CPU:建议使用多核处理器,以支持同时运行多个容器。内存&a…...
算法D31 | 贪心算法1 | 455.分发饼干 376. 摆动序列 53. 最大子序和
贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再…...
在IDEA中创建vue hello-world项目
工作中最近在接触vue前端项目,记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
