桔妹导读:「滴滴技术」将于本月开始,联合各技术团队为大家带来精彩分享。你想了解的技术干货,深度专访,团队及招聘将于每周三与你准时见面。本月为「滴滴云平台事业群分享月」,在今天的内容中,云平台事业群-机器学习平台团队与你聊一聊AI技术在滴滴平台上的实践思考。IFX 团队经过 2年多的奋斗,已将 AI 部署服务于公司安全、地图、车载、普惠、车服、IT等业务团队,覆盖司乘 APP,桔视设备,代驾记录仪,AIBox(边缘计算 AI 盒子),国际化司乘 APP 等智能化需求的场景,覆盖千万级别设备,千亿级别日活调用量。
随着人工智能技术的发展,深度学习技术在工业界得到了广泛的应用。数据、算法、算力三个维度的协同发展,逐步将 AI 推向成熟期,并且渗透到生活的方方面面。
滴滴拥有海量出行大数据,同时拥有大量的司乘端手机用户、桔视设备(车载摄像头)、GPU 集群等算力平台,对云、边、端 AI 能力的发掘将迎来一个黄金时代。滴滴机器学习团队从 2018 年 9 月开始调研和搭建自研推理引擎平台 IFX,在 2018 年 12 月开始对内提供服务,并在司机端和乘客端 APP 中落地。经历了 2 年的发展,IFX 已经在公司的大量业务中得到应用,服务于订单和准入的关键路径,司乘支付绑卡、实名认证、金融安全、提现等业务流程,高危场景识别,费用判责,追尾碰撞检测,定位导航,路网更新等业务场景。涵盖国内/国际化司乘 APP、桔视(车载摄像头)、代驾记录仪、滴滴云 GPU 等算力平台。目前滴滴 IFX 平台服务千万级别设备,平台日活调用量超千万亿。
在服务业务的过程中,我们发现纯粹的推理引擎已经很难满足业务高效的发展,因此,我们对平台进行了逐步的迭代与升级,将其分为 4 层结构:接入层,软件层,引擎层,算力层。
接入层
通过接入层,主要完成与业务工程的对接工作,同时我们在该层增加了推理/授权数据埋点,能够及时的展示设备接入量、推理接入量、设备分布、推理质量等信息。
-
local inference 需求:提供各类编程语言接口的 SDK
-
remote inference 需求:提供 http/thrift/grpc 等接口的标准服务化 api
-
授权与埋点:提供安全授权接入方案,提供业务模型 inference 相关可视化报表
软件层
在软件层,主要完成与业务算法的对接工作,主要完成模型解析和模型管理功能。
-
模型瘦身:提供更小的模型文件,降低 SDK 大小,同时提升在线升级模型速度
-
模型加密:确保模型结构安全性,不容易被破解
-
版本管理:解决业务迭代过程中,多个模型版本管理问题
-
自动测试:模型解析,带来精度差异,自动测试保证训练模型和推理模型表达一致性,同时也会测试模型推理性能以及硬件设备适配工作
引擎层
所有引擎优化相关工作集中在该层,针对异构设备算子的开发和调优,引擎系统调用的调优,
-
性能诊断器:为引擎层提供离线性能诊断工具,剖析模型在不同硬件设备上的表现,同时指导 kernel 优化,模型结构优化等工作
-
引擎瘦身与混淆:提供更小的体积以及安全的内核
-
算子优化:主要整合低精度、图优化、异构调度、汇编优化等能力,同时提供 auto tuning kernel 的能力,为专用硬件提供最佳的汇编实现
-
系统优化:除了计算本身,提供系统调度、I/O、预/后处理等耗时环节的优化
算力层
算法模型实际运行的硬件设备,目前针对云、边、端等场景,支持了大部分的处理器。主要包括 NVIDIA GPU,ARM,X86,寒武纪等设备。
基于架构的升级,IFX 团队进一步打造 AI 部署产品化解决方案,争取为业务提供更加系统化的支持。主要围绕以下 6 个方面进行能力建设。
高性能
为保障业务的核心竞争力,模型执行速度对于成本、安全、业务效果等影响非常大,我们针对推理引擎内核以及全链路进行了一次性能改造,在业务性能上,得到了不错的效果。
-
汇编级优化:核心 op 汇编优化,模型性能提升 40% - 200%
-
全链路优化:预处理、后处理、网络调用链路优化,服务化性能提升 30 - 260%
精巧性
为降低 APP 包大小,提升用户体验,我们专门针对引擎以及模型,做了大量的裁剪和压缩工作。
-
模型压缩:多种压缩策略联合驱动,压缩不降低精度,压缩率 < 25%
-
引擎压缩:二进制 elf 压缩,进一步降低 SDK 大小,通常压缩率在 50% 左右
统一性
为了提升接入效率,提供更加高效的接入方案,针对云、端、边等多种场景,IFX 可以提供统一的接入方案,同一个算法模型,支持部署到多种不同硬件设备。
多框架
业务方选用的算法框架相对比较自由,为让体验和接入流程一致,IFX 支持将 TensorFlow,PyTorch,Caffe,Darknet 等不同的深度学习训练得到的算法模型,转换成 IFX 支持的模型,并提供兼容性设计,满足业务迭代以及算法升级的需求。
自动化
AI 模型落地的过程中,存在较大的人工操作,为了降低每一个环节人工干预的程度,我们梳理了一些值得自动化实施的环节,帮助业务更快进行开发。
- SDK 自动化生成
- 服务自动化压测
- 模型正确性评测
- 功耗、CPU Loading 等自动化测试
安全性
滴滴有大量的算法部署在端侧,目前我们发现软件系统会受到一些外部的攻击,为了更好的提升 AI 软件的运行安全性,保障滴滴业务的同时,更好的对外输出,我们进行了一次架构安全升级。
-
接入层:离线、在线授权方案,严控接入设备
-
SDK层:IOS,Android,Linux 代码混淆,保护业务逻辑
-
引擎层:函数级别加密和混淆,杜绝反调试,反编译
-
模型层:模型文件加密,保护算法结构
当前,IFX 已经服务了内部不少的业务,但是在 AI 部署的过程中,依然存在很多低效的环节需要迭代和优化。IFX 团队也将继续在这个过程中进行能力建设,后续我们计划将整个开发和生产流程线上化,采用统一的开发环境,整合开发、测试、验证、分析、上线流程,需要做的工作还很多,但未来可期。
滴滴云平台事业群滴滴机器学习平台团队是一个由技术和梦想驱动的团队。在高性能计算,异构计算领域有独到的技术优势,团队主要成员曾推出了国内最早的云上 GPU,HPC 产品。在滴滴,机器学习平台团队致力于构建稳定、安全、高效、高性能、易用性强的 AI 一站式开发和部署平台,包括高效的滴滴机器学习平台建设、业务价值创造和落地的滴滴云平台建设、追求极致高性能的推理引擎建设。
机器学习平台框架组负责人,现负责异构计算、AI系统 优化等工作,为公司提供端/云AI优化和部署方案。曾就职于阿里,参与异构计算集群、阿里云 HPC 产品等研发工作。
内容编辑 | Teeo 联系我们 | DiDiTech@didiglobal.com
© 著作权归作者所有 打赏 点赞 (0) 收藏 (0) 分享 微博 QQ 微信 打印 举报 上一篇: 滴滴开源DELTA:AI开发者可轻松训练自然语言模型 下一篇: 报名啦!第四届滴滴-IEEE未来精英论坛今夏来袭滴滴技术 出品
滴滴技术
粉丝 0 博文 19 码字总数 62982 作品 0 海淀 关注 私信 提问 加载中 请先登录后再评论。 删除一条评论评论删除后,数据将无法恢复
取消 确定 相关文章 最新文章 树莓派(Raspberry Pi):完美的家用服务器自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...
异次元 2013/11/09 7.2K 8 CSS Browser SelectorCSS Browser Selector 是一个小的 JS 库,可增强 CSS 的选择器功能,支持根据不同的操作系统和浏览器来编写指定的 CSS 代码,可检测浏览器、浏览器版本、平台、平台版本、设备、设备版本、m...
匿名 2013/01/17 2.8K 1 极速博客引擎--Gorgor 是使用 golang 实现的类Ruhoh静态博客引擎(Ruhoh like),基本兼容ruhoh 1.x规范. 相当于与ruhoh的官方实现(ruby实现), 有以下优点: 速度完胜 -- 编译wendal.net近200篇博客,仅需要1秒 安装...
wendal 2013/01/20 3.9K 0 代码生成器--CodgenCodgen是一个基于数据库元数据模型,使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型,codgen也不例外,它的数据模型这棵树的根节...
黄天政 2013/01/29 1.4W 2 跨平台 3D 游戏引擎--Castle Game EngineCastle Game Engine 是一个用 Object Pascal 开发的跨平台 3D 游戏引擎。包含一个灵活的 3D 对象系统与开箱即用的水平,项目,智能生物等等。使用 X3D、VRML、Collada 和其他格式实现渲染和处理...
匿名 2013/02/05 2K 0
没有更多内容
加载失败,请刷新页面
加载更多下一页
获取JavaScript数组中的所有唯一值(删除重复项) - Get all unique values in a JavaScript array (remove duplicates)问题: I have an array of numbers that I need to make sure are unique. 我需要确定一个唯一的数字数组。 I found the code snippet below on the internet and it works great until th......
javail 30分钟前 11 0 如何检查字符串是否为空? - How to check if the string is empty?问题: Does Python have something like an empty string variable where you can do: Python是否有类似空字符串变量的内容可以在其中执行: if myString == string.empty: Regardless, wh......
富含淀粉 今天 7 0 您如何存储未跟踪的文件? - How do you stash an untracked file?问题: I have changes to a file, plus a new file, and would like to use git stash to put them away while I switch to another task. 我对一个文件进行了更改,再加上一个新文件,并希......
技术盛宴 今天 39 0 GeoPandas入门 | 01-地理数据介绍01-地理数据介绍 1.1 Python地理空间矢量数据简介 %matplotlib inlineimport pandas as pdimport geopandas 导入地理数据 地理空间数据通常可以从特定的GIS文件格式或数据存储中获得,如...
酱肉包- 今天 25 0 OSChina 周三乱弹 —— 我是不是也有王室血统Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @小小编辑推荐,《我们》- 陈奕迅 《我们》- 陈奕迅 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子OSC :快抬头看天!!! 雨后还有彩虹...
小小编辑 今天 59 1
没有更多内容
加载失败,请刷新页面
加载更多下一页
OSCHINA 社区
关于我们 联系我们 合作伙伴 Open API在线工具
码云 Gitee.com 企业研发管理 CopyCat-代码克隆检测 实用在线工具微信公众号
OSCHINA APP
聚合全网技术文章,根据你的阅读喜好进行个性推荐
下载 APP ©OSCHINA(OSChina.NET) 工信部 开源软件推进联盟 指定官方社区 深圳市奥思网络科技有限公司版权所有 粤ICP备12009483号 顶部