端智能:面向手机计算环境的端云协同AI技术创新

news2024/11/15 23:46:14

近年来,随着移动端设备软硬件能力的进步,移动端的算力有了很大提升,同时面向移动端的机器学习框架和模型轻量化技术越来越成熟,端上的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() {
            @Override
            public void onComplete(Object value) {
                android.util.Log.d(TAG, "onCompleteWithValue " + value.toString());
            }

            @Override
            public void onComplete() {
                android.util.Log.d(TAG, "onComplete");
            }

            @Override
            public 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、业务实践

端智能技术目前已经在京东流量分发、图像识别等多种算法业务场景落地。

image.png

流量分发:通过用户实时浏览行为,理解用户意图,增强实时商品分发效果,提升用户购物体验。

图像识别:端上实时识别用户拍摄图片的合规性,降低算法计算延时,提升实时识别效果。

由于数据与模型的计算均发生在端上,不依赖网络,没有网络延迟。因此端智能相比云端智能的耗时有显著的降低,推理效率有数十倍的提升。通过实践发现对于实时性要求高,计算相对简单的场景适合端上执行。

6、总结与展望

端智能建设过程围绕计算性能、灵活性、稳定性、安全性展开,动态预加载、任务调度、高性能数据存取提升了推理链路性能,模型动态下发、策略配置、数据动态处理为端智能业务开发带来充足的灵活性,异常监控、控制开关、兼容处理保证了端智能在线上运行的稳定性,加密传输,隐私合规为端智能提供了安全性保障。目前,京东众多业务已集成至端智能SDK,流量分发、图像识别等算法场景运行情况良好,日推理计算量已经达数亿次,为用户带来了更好的购物体验。

端智能的出现,弥补了云端智能在网络延时、数据丰富、隐私安全、算力成本方面的不足,但是端智能与云智能本身就不是割裂的技术体系,而是相辅相成的,未来端上模型可以作为云端模型的子模型进行前置推理,端上运行小模型,云端运行大模型,更好地提升推理效果和速度。

端智能未来的建设方向:

平台能力建设: 随着算法场景复杂性的增加,开发效率将受到影响。端智能团队将通过平台能力建设,提供开发、调试工具,提升算法工程师的模型开发、上线效率。

多端场景覆盖: 京东中存在大量的H5、小程序等场景,端智能后续将在多端进行落地,算法能力将覆盖移动端全场景。

算法场景扩展: 端智能团队致力于在端上覆盖流量分发、CV、NLP等多算法场景,将更多云端算法模型迁移至移动端前置计算。

作者:京东零售技数中心

来源:京东零售技术 转载请注明来源

更多年度盘点文章

亚洲唯一!京东荣获2024年度Gartner供应链技术创新奖背后的创新探索

万字干货-京东零售数据资产能力升级与实践

2023京东零售技术年度盘点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1477013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【X806开发板试用】文章一 ubuntu开发环境搭建

一、环境配置 官方链接: 环境配置 1.安装必要的库和软件 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-b…

幻兽帕鲁(1.5.0)可视化管理工具(0.5.7 docker版)安装教程

文章目录 局域网帕鲁服务器部署教程帕鲁服务可视化工具安装配置服务器地址(可跳过)使用工具管理面板 1.5.0服务端RCON错误1.5.0服务端无法启动RCON端口 解决方法第一步:PalWorldSettings.ini配置第二步:修改PalServer.sh配置 局域…

Zookeeper基础入门-1【集群搭建】

Zookeeper基础入门-1【集群搭建】 一、Zookeeper 入门1.1.概述1.2.Zookeeper工作机制1.3.Zookeeper特点1.4.数据结构1.5.应用场景1.5.1.统一命名服务1.5.2.统一配置管理1.5.3.统一集群管理1.5.4.服务器动态上下线1.5.5.软负载均衡 1.6.Zookeeper官网1.6.1.Zookeeper下载1.6.2.历…

【MySQL探索之旅】数据库的基本操作

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

python脚本实现全景站点欧拉角转矩阵

效果 脚本 import numpy as np import math import csv import os from settings import *def euler_to_rotation_matrix(roll, pitch, yaw):# 计算旋转矩阵# Z-Y-X转换顺序Rz

手撕Java集合之简易版Deque(LinkedList)

在目前,许多互联网公司的面试已经要求能手撕集合源码,集合源码本身算是源码里比较简单的一部分,但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的,很容易出现各种小问题。所以在平时就要注重这方面的联系。 以…

腾讯云优惠购买政策大全:新老用户都来瞧瞧!

腾讯云服务器多少钱一年?62元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器218元一年、756元3年,4核16G12M服务器32元1个月、312元一年,8核32G22M服务器115元1个月、345元3个月,腾讯云服务器网txyfwq.co…

智能双星:遥测终端机与柳林“巡检机器人“,助力智能运维新升级!

随着科技的不断发展,智能化、自动化的运维管理已经成为企业追求高效、稳定运营的重要方向。柳林遥测终端机、柳林e拍云平台以及巡检机器人的组合,为企业带来了一种全新的、前置的、无感的智能运维体验。 柳林遥测终端机,以其强大的数据采集和…

MySQL-MHA搭建、故障测试

一、架构说明 MHA(Master High Availability)是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能,确保在主库发生故障时能够快速切换到备库,降低业务中断时…

【Leetcode 2583】二叉树中的第K大层和 —— 优先队列 + BFS

2583. 二叉树中的第K大层和 给你一棵二叉树的根节点root和一个正整数k。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第k大的层和(不一定不同)。如果树少于k层,则返回-1。 注意,如果两个节点与根节点的距离相同&#…

Python中检查一个数字是否是科技数的完整指南

目录 前言 什么是科技数? 如何判断一个数字是否是科技数? 分割数字并计算平方 Python实现科技数检测的示例代码 科技数的应用场景 1. 数字游戏 2. 数据处理 3. 算法优化 4. 数据结构设计 总结 前言 科技数(Tech Number)是一…

VXLAN

VXLAN简介 定义 RFC定义了VLAN扩展方案VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网)。VXLAN采用MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualizatio…

强化学习_06_pytorch-PPO实践(Hopper-v4)

一、PPO优化 PPO的简介和实践可以看笔者之前的文章 强化学习_06_pytorch-PPO实践(Pendulum-v1) 针对之前的PPO做了主要以下优化: batch_normalize: 在mini_batch 函数中进行adv的normalize, 加速模型对adv的学习policyNet采用beta分布(0~1): 同时增加MaxMinScale …

【中国善网ESG周报】企业ESG报告分析之“华大”

引言: ESG(环境、社会和治理)是一个越来越受到关注的话题,它涉及到企业在经营过程中如何平衡利润、人们和地球的利益。随着全球气候变化加剧、社会不平等问题日益突出,以及公司治理和道德标准的日益重要,E…

ISO_IEC_18598-2016自动化基础设施管理(AIM)系统国际标准解读(一)

██ ISO_IEC_18598-2016是什么标准? ISO/IEC 18598国际标准是由ISO(国际标准化组织)/IEC(国际电工委员会)联合技术委员会1-信息技术的第25分委员会-信息技术设备互连小组制定的关于信息基础设施自动化管理的国际标准&…

微信小程序固定头部-CSS实现

效果图 代码逻辑:设置头部的高度,浮动固定后,再加个这个高度的大小的外边距 .weui-navigation-bar {position: fixed;top: 0px;left: 0px;right: 0px;height:90px; } .weui-navigation-bar_bottom{height:90px; }

Chapter 8 - 19. Congestion Management in TCP Storage Networks

Queue Depth Monitoring and Microburst Detection Queue depth monitoring and microburst detection capture the events that may cause congestion at a lower granularity but are unnoticed by other means due to long polling intervals. 队列深度监控和微爆检测可捕捉…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中,要标记某个关键字并改变其颜色,你可以使用tag_add方法来给包含关键字的文本添加标签,然后使用tag_config方法来配置该标签的显示样式,包括前景色(字体颜色)和背景色等。以下是一个完…

深度测试:指定DoC ID对ES写入性能的影响

在[[使用python批量写入ES索引数据]]中已经介绍了如何批量写入ES数据。基于该流程实际测试一下指定文档ID对ES性能的影响有多大。 一句话版 指定ID比不指定ID的性能下降了63%,且加剧趋势。 以下是测评验证的细节。 百万数据量 索引默认使用1分片和1副本。 指定…