淘宝端智能演进和思考

 

今天分享内容包括三部分,第一是端智能整体趋势和淘宝应用现状,第二是淘宝在应用端智能过程中面临的问题和挑战,以及我们的应对和解决思路,我们构建了端到端的完整技术体系,第三是开源推理引擎 MNN 的最新情况。

01、端智能趋势和现状

端智能简单说就是在端侧做机器学习或者深度学习模型的推理运行及上层应用。端智能相比云端智能具有低延时,保护数据隐私,节省云端计算资源等优势。其实大家在日常生活中已经用到了很多端智能应用,比如手机上拍照的 AI 摄像,人脸解锁 FaceID ,以及短视频 App 中各种 AR 特效等。

那么,为什么会出现端智能,以及他底层演化逻辑是什么?首先这两年有一个明显趋势就是深度学习从实验室往产业落地方向演进,海量终端设备成为落地最佳载体,手机是覆盖用户最多的设备,很容易做到规模化应用。除了这个大的趋势,我们觉得影响端智能演进还有三个关键要素,分别是算力、算法和场景。

算力:手机的算力不断增长,每年 CPU/GPU 性能也有非常大的提升, NPU 更是已经成为标配,并且有数量级上性能提升。

算法:模型压缩技术不断成熟,其中量化已经非常成熟,基本可以实现不降低精度的情况下将模型缩小为 1/4 甚至更小,另外小模型的架构设计也越来越成熟,面向移动端的各种网络模型不断出现,面向移动终端有限资源的算法模型设计也逐步成熟。

场景:就手机本身来说,AI 成为手机的热点和卖点,像 AI 摄像,人脸解锁等已经成为手机的基础功能。从 App 应用场景来说,近来刷爆我们朋友圈的应用都是跟 AI 相关的,有 Face App ,垃圾分类识别,以及 Zao App 。目前有些软件更多的是使用云端 AI 能力,需要把人脸照片上传至服务端做换脸,容易出现数据隐私问题。如果用端 AI 来做,不用上传你人脸图片,很自然解决数据隐私问题,只是现在端上算力不够,做不到这样的应用。

我们可以预期的是,随着算力的增强,算法的成熟,基于端智能也会出现越来越多有趣、好玩的一些创新应用。

现在集团里越来越多的 APP 开始应用端智能,拿手淘来说,端智能已经成为我们的核心基础能力,助力业务发展的创新和突破。在阿里巴巴有 20 个以上的 APP 在使用端智能,拿手淘来说,我们已经上线了 10+个场景,有 25+ 个模型在跑,每天运行次数超过 500 亿次,在手淘搜索推荐等重要场景也在使用端智能做更加精准搜索推荐,今年双 11 也会大规模使用。

02、淘宝端智能体系建设

我们做了这么多应用,那在应用过程中到底碰到了哪些问题和挑战?

首先从 APP 使用端智能整个链路上面看,一般都会有数据采集,做数据清洗或者数据标注,然后做算法模型设计,接着在服务端模型训练,之后进行模型压缩和转化,其次在部署端上面做推理,最后产品落地去使用。整个链路较长,涉及云端和客户端,以及需要算法工程师和移动开发工程师配合才能完成相关应用落地。

我觉得端智能应用有三个大的挑战,第一:整体链路比较长,而且其中每个节点出现问题都会阻碍端智能应用落地,特别像 17 年算法模型在端侧推理部署运行成为瓶颈,所以我们开发 MNN 去解决这个问题。第二:算法和工程协同,需要算法工程师和移动工程师通力合作,但是两者存在天然的 gap 需要互相协同配合。第三:端侧环境复杂,碎片化的设备,系统,各种兼容性问题。针对这些问题,我们构建一套端到端的全链路部署方案,下面具体展开讲解。

这是我们的技术大图,主要有三部分组成:

  • 客户端引擎 & 框架 包括机器学习算法库,深度学习推理引擎 MNN,算法快速迭代的 Python VM 容器,以及上层的算法能力集合和行业解决方案。
  • 离线配套工具 包括模型转换,模型压缩工具,以及配套的性能测试,调试工具等。
  • 云端平台 包括模型转换和压缩服务,以及模型管理,部署,运维监控的各种系统。

下面将会具体展开讲解推理引擎,开箱即用算法集,行业解决方案三块内容。

首先来看下推理引擎 MNN 的技术挑战,第一碎片化,网络模型,训练框架,终端设备都是碎片化的。第二资源受限,终端设备不像服务端,他的内存,算力比较有限。第三高性能,像人脸检测等实时性要求比较高,所以在资源受限情况下还需要做到高性能,这也是巨大的挑战。

推理引擎,就是找到一种方案实现不同模型在不同设备上最高效的运行。这里有三种不同设计思路。

一种是类似 TVM 的自动化搜索方案,考虑模型的特征,比如卷积核大小,考虑部署设备的硬件特效,比如内存,算力,然后结合两者找到一种最高效的运行方式。这种方式性能高,但成本也高,因为需要离线为每一种设备做遍历调优,找到最高效的运行方式,比如手淘覆盖的手机比较多,所以成本非常高。

第二种方式是纯手工优化,主要是针对特定的卷积核大小做优化,比如 3x3 卷积,所以专门优化的网络模型性能比较好,没优化过的性能会差一些,另外未考虑硬件特性,所以整体性能一般,成本也较高,因为需要遍历情况比较多。

第三种方式就是我们 MNN 采用的方案,我自己叫半动搜索优化,通过 NC4HW4 内存布局将不同卷积核做对齐做统一矩阵计算优化,再根据硬件特性调度做选择最优方式运行,我们现在更多是基于规则,后续演化考虑做在线调优。整体来说性能比较好,成本也比较低。

这是 MNN 整体架构图,左边离线部分包含模型转换和模型压缩,将各种训练框架模型转换成 MNN 的模型;右边是线推理部分,MNN 目前支持 CPU,以及 GPU 对应的 OpenCL,Vulkan 等 backend 。

以图上为例, Pixel 2 手机支持 CPU ARM 和 Vulkan backend ,小米 6 支持 CPU ARM,OpenCL , Vulkan backend ,Mate20 支持 ARM82 架构的 CPU backend,以及 OpenCL , Vulkan backend 。

在预推理环节,我们根据模型结构信息,以及设备的硬件信息 找到一种最快运行方式。比如 Pixel 2 上使用 CPU 和 Vulkan 运行,小米 6 使用 CPU 和 OpenCL 运行,Mate 20 上使用 ARM82 指令和 OpenCL 运行。这是粗粒度的 CPU 和 GPU 运行方式选择,更细一点比如同样 CPU 运行,我们有 winogrand,strassion 矩阵计算算法会根据模型和硬件特性选择不同分块,这样实现最快运行。

MNN 很早基于 iDST 量化算法支持了模型压缩能力,但是之前的量化工具的产品化做的不是特别好,过去几个月我们重点优化了量化工具,尽量做到简单易用。目前无训练的量化工具我们已经发布,一行命令就可以简单实现量化,精度下降 1% 以内,文件大小减少到原来的 1/4 ,推理速度提升 30~70% 。另外,我们正在研发带训练能力的量化方案,这里实现跟业界方案不太不一样,我们为了解决碎片化的训练框架的问题,现在是直接在 MNN 上添加训练能力,这样可以使用 MNN 模型做 Finetune 训练。

前面介绍了推理引擎 MNN ,主要解决算法模型端侧运行问题。但是移动开发对算法模型其实不是很懂,以人脸为例,他更希望有个人脸 API 给我调用一下使用,所以我们做了开箱即用算法集合,里面有人脸,人体姿态,物体识别等内容。

但是后来我们发现即使有了人脸特征点,要做一个 AR 人脸特效这样的应用还是有很大的成本。所以我们又做了一个 AR 特效解决方案,可以简单方便做一个 AR 贴纸特效。

具体来说,通过一个 IDE 编辑器做所见即所得的特效编辑,然后导出一个资源文件包,对应端上有个渲染 SDK 解析资源文件做特效还原。但从业务场景来说,手淘毕竟不是一个短视频 App , AR 贴纸对业务价值有限,所以我们目前 AR 方案更多是结合美妆行业,家居行业等做商品相关的 AR 应用,提升用户购物体验。

说完 AR 特效方案,再看一个大数据相关的解决方案。在原有的大数据体系里面,客户端更多是一个数据采集的角色,服务端做大数据计算和挖掘,然后做例如个性化推荐的应用。

但是随着端算力增强,端上可以跑机器学习和深度学习模型,我们做了端侧的数据特征计算框架,支持做数据特征提取,模型计算等工作。其中一个应用就是情景计算,利用端侧多维度的数据,可以准确刻画使用手淘的情景信息,比如你是在走路还是坐车,还是躺在床上。

另外,根据你在页面的停留时长,浏览轨迹可以识别你对商品的喜好程度,从而做更加精准的推荐。目前这块已经在手淘的搜索推荐广泛使用,并且取得了不错的效果。

接下来具体看几个在手淘这边的典型应用场景,第一个是拍立淘,拍立淘是一个以图搜商品的服务,原来是直接拍照上传云端做识别,这样整体耗时比较长,服务端成本比较高。现在已经把越来越多的部分放到端侧来做,比如物体检测,分割等放到端上来做,然后再上传云端做识别召回,相比原来有更好的用户体验,也节省了服务端成本。

这是一些其他典型应用,第一个是基于用户实时意图识别做交互式搜索推荐,第二个是 AR 试妆,第三个闲鱼做的一个智能发布,第四个是我们在智能硬件的若干应用。

03、MNN开源进展和应用

接下来讲下 MNN 开源相关的情况,下面是 MNN 的发展历程,我们 17 年 10 月正式启动,经历 18 年双十一洗礼,今年双十一有更大规模的应用。

这里有几个数字,每天 MNN 在手淘推理次数远大于 2 亿次, Crash 占比 <0.1% , 业界应用 >20 个, issue 修复 260 。所以可以说, MNN 是经过多场景海量计算验证的,它的稳定性和可靠性值得信赖。

MNN 的核心特点是通用性,轻量性,高性能,易用性

目前无论是性能,设备支持,训练框架支持,OP 支持等方面我们都是业界领先。

MNN 的易用性也是我们非常重视的一个点,Python 是算法工程师友好的语言,所以我们构建了 Python 工具链,方便算法同学测试和验证。目前我们提供模型转换,模型压缩,模型结构可视化,以及支持 OP 列表查询的工具,下面是具体安装命令,pip install MNN ,然后可以选择对应的工具使用,右侧是模型结构显示的一个示例。

MNN 开源以后,现在已经成为阿里巴巴的官方推荐项目,也很高兴看到业界同学用 MNN 来做车牌识别,物体检测,车辆检测等各种应用,特别还有同学写了很多介绍和使用文档。这里一并表示感谢,也希望更多的同学能够参与进来。

关于 MNN 后续演进有三点内容想特别和大家分享。

  • App 视角 这是由我们出生决定的,我们服务于手淘这样的超级 App,他需要支持 iOS 和 Android 两个生态,以及支持各种低端机和低版本系统,所以需要我们解决各种碎片化设备和系统兼容问题。业界很少像 MNN 一样在超过 200 款设备上运行,并且支持业务规模化应用。
  • 性能极致 手淘有像人脸,搜索推荐等各种实时业务场景,以及需要覆盖中低端机的诉求,迫使我们做极致的性能优化,这样才能很好的支持业务。
  • 开源开放 前面说的我们在几百种设备运行,各种中低端机以及系统兼容适配,业务规模化应用,这些经验积累都沉淀到 MNN 里面开源给业界,确实业界也没有一个这方便做的特别好,希望能够给大家有所帮助。

最后,我们的愿景是期待能和大家一起打造功能完善,性能极致,简单易用的端侧推理引擎,并且能够在行业中获得广泛应用。

精彩回顾


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

从零开始入门 K8s | 可观测性:你的应用健康吗?

一、需求来源 首先来看一下&#xff0c;整个需求的来源&#xff1a;当把应用迁移到 Kubernetes 之后&#xff0c;要如何去保障应用的健康与稳定呢&#xff1f;其实很简单&#xff0c;可以从两个方面来进行增强&#xff1a; 首先是提高应用的可观测性&#xff1b;第二是提高应…

技术差的程序员,90%都输在这点上!骨灰级开发:其实都是在瞎努力!

01从未得到过重视的问题“一流程序员学数学&#xff0c;二流程序员学算法&#xff0c;低端看高端就是黑魔法”。可能有人会以为这是段子&#xff0c;而有过开发经验的都知道&#xff0c;这就是程序员的真实写照&#xff01;而数学不好的程序员&#xff0c;我想你开发过程中&…

layui 单选项 点击显示与隐藏 很实用

html <div class"layui-form-item"><label class"layui-form-label">类型</label><div class"layui-input-block"><input type"radio" name"type" lay-filter"type" value"0&quo…

2. 字节码指令

2. 字节码指令 2.1 入门 public cn.itcast.jvm.t5.HelloWorld();构造方法的字节码指令 ​ 2a b7 00 01 b1 2a> aload_0加载slot 0的局部变量&#xff0c;即this&#xff0c;做为下面的invokespecial 构造方法调用的参数b7 >invokespecial预备调用构造方法&#xff0c…

它是真实的“盗梦空间”?在这里,一切都可能是数据

阿里妹导读&#xff1a;位于杭州阿里巴巴西溪园区旁边的大型商场“亲橙里”2018年正式开业。和传统的线下综合型商场不同的是&#xff0c;亲橙里从规划之初就定位为数字化商场&#xff0c;通过植入自研的IBOS平台完成建筑内的所有子系统的接入&#xff0c;而让建筑和建筑内的设…

BDS-HA:构建高可用、低延迟的HBase服务

HBase可以支持百TB数据规模、数百万QPS压力下的毫秒响应&#xff0c;适用于大数据背景下的风控和推荐等在线场景。阿里云HBase服务了多家金融、广告、媒体类业务中的风控和推荐&#xff0c;持续的在高可用、低延迟、低成本方向上进行优化。目前单集群承诺可用性99.9%&#xff0…

layui 表单动态添加、删除input框

html部分 <div class"layui-form-item" ><label class"layui-form-label">路线</label><div class"layui-input-block" id"last"><div class"layui-input-inline">{empty name"$ways&q…

MySQL 可重复读,差点就让我背上了一个 P0 事故!

来源 |程序通事责编 | Carol封图 | CSDN 付费下载自视觉中国P0 事故&#xff1a;余额多扣&#xff01;这是一个真实的生产事件&#xff0c;事件起因如下&#xff1a;现有一个交易系统&#xff0c;每次产生交易都会更新相应账户的余额&#xff0c;出账扣减余额&#xff0c;入账增…

AliOS Things 3.0应用笔记:摄像头配网 + 钉钉群通知 + 天气显示

给AliOS Things一颗STAR 目录 运行流程效果展示 操作流程 环境配置源码结构配置烧录运行 源码讲解 QR扫码部分GUI部分https client部分 运行流程 本示例有如下3个功能&#xff1a; 摄像头配网。推送消息到钉钉群。显示当天天气。操作流程 环境配置 AliOS Things环境安装&a…

与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?

大学肄业&#xff0c;网店关闭&#xff0c;公司转手&#xff0c;人生的下一步要怎么走&#xff1f;张昕总沉浸在自己的世界里发呆。 直到两年前&#xff0c;张昕随手往几个群里转发了“购买阿里云服务器”的折扣幸运券&#xff0c;半年后&#xff0c;因订单数量排进前十&#…

借助大数据进行社交媒体营销,企业们得这么玩!

作者 | Annie Qureshi译者 | 火火酱&#xff0c;责编 | Carol出品 | CSDN 云计算&#xff08;CSDNcloud&#xff09;封图 | CSDN 付费下载自视觉中国自上世纪80年代以来&#xff0c;“数据”一词就一直是互联网行业的重要术语。随着人们对数字领域的关注度越来越高&#xff0c;…

聊一聊DNS劫持那些事

作为《DNS攻击防范科普系列》的最后一篇&#xff0c;今天我们来好好聊聊DNS劫持。先回顾一下DNS劫持的概念&#xff1f;DNS劫持即通过某种技术手段&#xff0c;篡改正确域名和IP地址的映射关系&#xff0c;使得域名映射到了错误的IP地址&#xff0c;因此可以认为DNS劫持是一种D…

nacos集成dubbo实现远程服务调用多服务端2

文章目录一、版本选取、需求和项目简述1. 版本选取2. 项目模块说明2. 需求说明二、需求实战-依赖初始化2.1. 创建maven父工程EShopParent2.2. 创建子模块DubboApi2.3. 创建服务端Stock-serv2.4. 创建服务端product-serv2.5. 创建消费端端Order-serv三、需求实战-代码编写3.1. 创…

避开这2个误区,测试目标 KPI 不再难设

阿里妹导读&#xff1a;好的开始是成功的一半&#xff01;工作中&#xff0c;目标的设置是最不能马虎的事情。今天&#xff0c;我们请来孙阳&#xff08;阿里巴巴测试开发专家&#xff09;&#xff0c;他从11年入职至今已有8年。在测试技术目标的KPI设置上&#xff0c;他有一些…

程序员工作3年只涨2千,你不知道程序员有多难!

最近在职业论坛看到这样一个热门的帖子&#xff1a;工作3年&#xff0c;薪资涨了2k。大家都在吐槽公司的不公&#xff0c;却忽略了从另一个角度看待问题&#xff1a;是不是因为我们本身做的不够好&#xff1f;越来越发现&#xff0c;很多人之所以很久没有涨薪&#xff0c;是因为…

蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化

导语 在 TPC-C 标准定义中&#xff0c;测试系统分为 RTE&#xff08;Remote Terminal Emulator&#xff09;和 SUT 两部分。在实际的 TPC-C 测试流程中&#xff0c;不只是对 DB 端能力的考验&#xff0c;对链路中的所有组件都存在极大的资源消耗和压力。以这次 6088万 tpmC 测…

由于找不到msvcp140.dll无法继续执行代码

下载安装微软常用运行库合集即可解决 https://www.cr173.com/soft/106037.html

知己知彼,百战百胜!如何做好干系人管理

作者|章冀灶(晟远) 出品|阿里巴巴新零售淘系技术部 众所周知&#xff0c;高效的沟通是项目成败重要的影响因素。沟通在项目管理过程中扮演了极其重要的作用&#xff0c;而沟通对象又是完整的基于项目干系人&#xff0c;所以在项目管理过程中干系人管理就显得尤为重要&#xff…

彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值

背景 最近准备一个教程&#xff0c;案例的过程中准备了如下代码碎片&#xff0c;演示解析http scheme #include <stdio.h> #include <stdlib.h> #include <string.h>char *parse_scheme(const char *url) {char *p strstr(url,"://");return st…

健壮F.T.+新裸金属重磅发布!全新升级版ZStack加速新基建!

6月2日&#xff0c;以“健壮F.T.新裸金属 新基建下的新IaaS”为主题的2020年ZStack新品线上超级发布会引爆了企业级云市场。面向新基建发展契机&#xff0c;致力于普惠云计算的ZStack与英特尔、阿里云等伙伴强势携手发布2大重磅新品&#xff1a;首个采用了F.T.技术的ZStack Min…