桔妹导读:「滴滴技术」将于本月开始,联合各技术团队为大家带来精彩分享。你想了解的技术干货,深度专访,团队及招聘将于每周三与你准时见面。本月为「滴滴云平台事业群分享月」,在今天的内容中,云平台事业群-机器学习平台团队与你聊一聊AI技术在滴滴平台上的实践思考。IFX 团队经过 2年多的奋斗,已将 AI 部署服务于公司安全、地图、车载、普惠、车服、IT等业务团队,覆盖司乘 APP,桔视设备,代驾记录仪,AIBox(边缘计算 AI 盒子),国际化司乘 APP 等智能化需求的场景,覆盖千万级别设备,千亿级别日活调用量。

1.背景

随着人工智能技术的发展,深度学习技术在工业界得到了广泛的应用。数据、算法、算力三个维度的协同发展,逐步将 AI 推向成熟期,并且渗透到生活的方方面面。

滴滴拥有海量出行大数据,同时拥有大量的司乘端手机用户、桔视设备(车载摄像头)、GPU 集群等算力平台,对云、边、端 AI 能力的发掘将迎来一个黄金时代。滴滴机器学习团队从 2018 年 9 月开始调研和搭建自研推理引擎平台 IFX,在 2018 年 12 月开始对内提供服务,并在司机端和乘客端 APP 中落地。经历了 2 年的发展,IFX 已经在公司的大量业务中得到应用,服务于订单和准入的关键路径,司乘支付绑卡、实名认证、金融安全、提现等业务流程,高危场景识别,费用判责,追尾碰撞检测,定位导航,路网更新等业务场景。涵盖国内/国际化司乘 APP、桔视(车载摄像头)、代驾记录仪、滴滴云 GPU 等算力平台。目前滴滴 IFX 平台服务千万级别设备,平台日活调用量超千万亿。

2. 架构

在服务业务的过程中,我们发现纯粹的推理引擎已经很难满足业务高效的发展,因此,我们对平台进行了逐步的迭代与升级,将其分为 4 层结构:接入层,软件层,引擎层,算力层。

接入层

通过接入层,主要完成与业务工程的对接工作,同时我们在该层增加了推理/授权数据埋点,能够及时的展示设备接入量、推理接入量、设备分布、推理质量等信息。

  • local inference 需求:提供各类编程语言接口的 SDK

  • remote inference 需求:提供 http/thrift/grpc 等接口的标准服务化 api

  • 授权与埋点:提供安全授权接入方案,提供业务模型 inference 相关可视化报表

软件层

在软件层,主要完成与业务算法的对接工作,主要完成模型解析和模型管理功能。

  • 模型瘦身:提供更小的模型文件,降低 SDK 大小,同时提升在线升级模型速度

  • 模型加密:确保模型结构安全性,不容易被破解

  • 版本管理:解决业务迭代过程中,多个模型版本管理问题

  • 自动测试:模型解析,带来精度差异,自动测试保证训练模型和推理模型表达一致性,同时也会测试模型推理性能以及硬件设备适配工作

引擎层

所有引擎优化相关工作集中在该层,针对异构设备算子的开发和调优,引擎系统调用的调优,

  • 性能诊断器:为引擎层提供离线性能诊断工具,剖析模型在不同硬件设备上的表现,同时指导 kernel 优化,模型结构优化等工作

  • 引擎瘦身与混淆:提供更小的体积以及安全的内核

  • 算子优化:主要整合低精度、图优化、异构调度、汇编优化等能力,同时提供 auto tuning kernel 的能力,为专用硬件提供最佳的汇编实现

  • 系统优化:除了计算本身,提供系统调度、I/O、预/后处理等耗时环节的优化

算力层

算法模型实际运行的硬件设备,目前针对云、边、端等场景,支持了大部分的处理器。主要包括 NVIDIA GPU,ARM,X86,寒武纪等设备。

3. 产品化

基于架构的升级,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 代码混淆,保护业务逻辑

  • 引擎层:函数级别加密和混淆,杜绝反调试,反编译

  • 模型层:模型文件加密,保护算法结构

4. 总结

当前,IFX 已经服务了内部不少的业务,但是在 AI 部署的过程中,依然存在很多低效的环节需要迭代和优化。IFX 团队也将继续在这个过程中进行能力建设,后续我们计划将整个开发和生产流程线上化,采用统一的开发环境,整合开发、测试、验证、分析、上线流程,需要做的工作还很多,但未来可期。

团队介绍

滴滴云平台事业群滴滴机器学习平台团队是一个由技术和梦想驱动的团队。在高性能计算,异构计算领域有独到的技术优势,团队主要成员曾推出了国内最早的云上 GPU,HPC 产品。在滴滴,机器学习平台团队致力于构建稳定、安全、高效、高性能、易用性强的 AI 一站式开发和部署平台,包括高效的滴滴机器学习平台建设、业务价值创造和落地的滴滴云平台建设、追求极致高性能的推理引擎建设。

作者简介

机器学习平台框架组负责人,现负责异构计算、AI系统 优化等工作,为公司提供端/云AI优化和部署方案。曾就职于阿里,参与异构计算集群、阿里云 HPC 产品等研发工作。

延伸阅读





内容编辑 | Teeo

联系我们 | DiDiTech@didiglobal.com

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

滴滴推理引擎IFX:千万规模设备下AI部署实践的更多相关文章

  1. 应用八:Vue之在nginx下的部署实践

    最近有时间研究了下前端项目如何在nginx服务器下进行部署,折腾了两天总算有所收获,汗~~ 所以就想着写篇文章来总结一下,主要包括以下三个方面: 1.打包好的vue项目如何进行部署. 2.如何反向代理 ...

  2. 阿里开源!轻量级深度学习端侧推理引擎 MNN

    阿里妹导读:近日,阿里正式开源轻量级深度学习端侧推理引擎“MNN”. AI科学家贾扬清如此评价道:“与 Tensorflow.Caffe2 等同时覆盖训练和推理的通用框架相比,MNN 更注重在推理时的 ...

  3. 阿里开源首个移动AI项目,淘宝同款推理引擎

    淘宝上用的移动AI技术,你也可以用在自己的产品中了. 刚刚,阿里巴巴宣布,开源自家轻量级的深度神经网络推理引擎MNN(Mobile Neural Network),用于在智能手机.IoT设备等端侧加载 ...

  4. 全场景AI推理引擎MindSpore Lite, 助力HMS Core视频编辑服务打造更智能的剪辑体验

    移动互联网的发展给人们的社交和娱乐方式带来了很大的改变,以vlog.短视频等为代表的新兴文化样态正受到越来越多人的青睐.同时,随着AI智能.美颜修图等功能在图像视频编辑App中的应用,促使视频编辑效率 ...

  5. Ionic2 下处理 Android 设备下返回按钮的事件

    原文发表于我的技术博客 本文分享了 Ionic2 下处理 Android 设备下返回按钮的事件,供参考. 原文发表于我的技术博客 代码中我分享了如何捕捉 Ionic2 项目在 Android 设备下返 ...

  6. 【控制连接实现信息共享---linux和设备下ssh和远程连接telnet服务的简单搭建】

    SSH的配置 空密码登陆ssh server 如果要登录ssh server通常要在server和client之间采取具有共同加密的秘钥,若每次当client想要了:连接ssh server时都要手工 ...

  7. UICamera 编辑器与移动设备下的Find异常

    某次出包后,在移动设备下,发现所有的UIDrag和一些UIHUD组件都失效了,看了看Editor下是正常的,后面就做了一系列检查措施来排除问题所在. 1.看了下log日志里是否有相关报错异常,结果毫无 ...

  8. 【推理引擎】从源码看ONNXRuntime的执行流程

    目录 前言 准备工作 构造 InferenceSession 对象 & 初始化 让模型 Run 总结 前言 在上一篇博客中:[推理引擎]ONNXRuntime 的架构设计,主要从文档上对ONN ...

  9. C#脚本引擎 CS-Script 之(三)——如何部署

    本文不但介绍了CS-Script如何部署,还介绍了CS-Script的部署后面的原理,并用一个框图详细介绍了部署中的各种细节. 一.获取资源 1.从官网上下载编译好的csscript资源:cs-scr ...

随机推荐

  1. JAVA 面向对象 三大特征:继承

    什么是继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接访 ...

  2. Nginx/Httpd负载均衡tomcat配置

    在前一篇博客中我们聊了下用Nginx和httpd对后端tomcat服务做反代相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13334180.html: ...

  3. python thrift 实现 单端口多服务的过程

    Thrift 是一种接口描述语言和二进制通信协议.以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下. 需要定义一个 ...

  4. APP自动化 -- 获取driver

    一.appium设置 1.打开appium 2.设置 appium服务器:点击  高级设置 3.启动 appium 服务器 二.查看  .apk  安装包的“包名”和“活动入口名” 1.先复制本地  ...

  5. 手动触发浏览器resize

    今天做echarts图表 发现饼图不能居中,resize之后才会居中. 于是想手动触发resize方法,但是不改变浏览器窗口 JQ $(window).trigger('risize'); JS    ...

  6. 今天完成顺利编译d:\test\Console.java

    今天完成顺利编译d:\test\Console.java import javax.swing.*;import java.awt.event.*; public class Console{ pub ...

  7. python基础--小数据池,代码块的最详细、深入剖析

    本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ...

  8. 动态页面技术(EL/JSTL)

    EL技术 EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本(java代码)的编写. EL从域中取出数 ...

  9. centos7安装部署docker

    Kubernetes/K8s架构师实战集训营[中级班]:https://pan.baidu.com/s/1FWAz2V7BPsObixlZyW93sw 提取码:mvu0 Kubernetes/K8s架 ...

  10. MapReduce之Combiner合并

    Combiner是MR程序中Mapper和Reducer之外的一种组件(本质是一个Reducer类) Combinr组件的父类就是Reducer Conbimer只有在驱动类里设置了之后,才会运行 C ...