InfoQ 编辑部出品——2021年度技术盘点与展望 了解详情
写点什么

vivo 手机背后的一站式机器学习平台架构实践

  • 2020 年 1 月 21 日
  • 本文字数:0 字

    阅读完需:约 1 分钟

vivo手机背后的一站式机器学习平台架构实践

如今,大多数互联网公司都有自己的机器学习平台,虽然名字和承载的业务不完全相同,但就平台要解决的问题和技术选型来说大同小异。在ArchSummit全球架构师峰会(北京站)的现场,InfoQ 有幸采访了 vivo AI 研究院的资深算法工程师鲁文龙,详细了解 vivo 在机器学习平台方面的实践。



机器学习项目痛点

起初,vivo 也是采用类似“作坊式”的团队模式,每个团队针对各自要解决的问题进行规划,由此产生了一种小作坊式的生产局面。随着应用规模逐渐增大,这种模式的局限就暴露出来了。鲁文龙表示,这种模式下的机器学习项目会出现如下问题:


1、特征与样本层面,添加新特征流程较长,且不同业务间特征无法共用;特征与样本的处理和存储系统性能与稳定性不佳。


2、训练与调参层面,在大业务量场景下,深度学习模型分布式训练有一定门槛;线上效果不佳时,缺乏一套分析定位问题的方法论。


3、CPU 与 GPU 线上推理层面,驾驭 CPU 尤其是 GPU 的深度学习模型的高性能推理门槛较高;离线调参与线上工程开发速度不匹配,影响整体迭代效率。


4、缺乏端到端的系统支撑,每个业务都重复做一套烟囱系统,可维护性差;缺乏技术沉淀,团队间协作效率低,整体产出会受影响。


举例来说,鲁文龙所在团队起初主要负责广告系统的机器学习项目研发,当时经常遇到的一个问题就是离线训·练和在线推理结果不一致。为了保证性能,线上通常会用 Java/C++ 来写一套程序,离线通常会基于 Spark、Flink 这样的大数据工具套件来开发,离线和在线的工程师团队也是不同的,如此种种造成了出现问题很难定位与修复。为了解决上述这些痛点,团队决定研发一套统一的机器学习平台来支撑各项目快速迭代。



vivo 机器学习平台实践


经过讨论,vivo 将机器学习平台定位在解决公共的工程性难点和痛点,比如特征工程、模型训练、模型推理和资源调度方面的问题,不需要每个团队都重新学习部署一套 K8s 等基础设施平台,降低算法工程师的使用门槛,从而提高业务迭代效率。


对于 AI 研究院的各业务场景的工程师来讲,平台提供了开发调试、高效调参、模型部署、效果监控等能力,降低上线门槛,提高迭代效率。在平台内部,由四个部分组成。


1.特征工程系统:在规范特征格式、标准化数据流、统一存储与管理的前提下,以特征处理引擎为基础,构建更灵活增删特征、共享特征的系统;


2.模型训练:在深度定制的框架与计算组件的基础上,如 Tensorflow、Horovod 等,通过大规模分布式训练引擎提供了使用简单、功能强大的训练能力;


3.模型推理:在深度定制的推理框架与计算组件基础上,如 TensorRT、OpenVINO、TF Serving 等,提供 CPU 和 GPU 极致的高性能推理能力;


4.资源调度: 通过 K8s 来管理与调度 CPU 集群和 GPU 集群,规模 2000+CPU 机器,1000+GPU 卡,来支撑大规模的模型训练任务与推理服务。


鲁文龙表示,第一阶段主要以 SDK 的形式将在特征、训练和推理上构建的能力嵌入到业务中,推动业务方使用。经过大半年的努力,机器学习平台已经在众多业务中落地。接下来,团队的更多精力将聚焦在打通端到端的能力,通过平台门户提供更优的产品体验给工程师。


在构建机器学习平台的过程中,vivo 也探索出一些亮点性工作。鉴于资源调度部分,几个月前已经通过文章介绍过了(《Kube-batch 在 vivo AI 计算平台的应用》),接下来就介绍下其他三部分的亮点工作。


特征工程系统

特征工程系统是由统一特征服务和样本生产服务组成,提供机器学习算法落地所需要的数据服务。它解决了特征生产效率,特征样本监控,特征处理一致性和数据一致性等问题;降低数据开发的入门难度,减少新业务上线成本,提高算法迭代上线效率。



vivo 机器学习平台数据流示意图


前文提到的离线训练与线上推理结果不一致的问题,主要是两方面原因造成的:其一是离线和线上两套流程逻辑可能存在不一致;其二是时间上的延时,离线训练通常是在曝光时生成的样本,而线上推理则是在请求时。对于前者,vivo 团队基于一套基础的特征处理标准,通过配置化将两套流程统一起来使得问题完美解决。对于后者,平台根据特征变化程度进行分级,分别在请求、请求回传(排序胜出后)、曝光回传 三个环节拼接不同的特征,这样在保证一致性的同时,大大减少了存储和宽带成本。除了这些方法外,鲁文龙团队还构建了验证一致性的系统方法。如此,这个问题就彻底解决了。


大规模分布式训练引擎

训练引擎以 SDK 的形式供业务方使用,用户只需配置特征格式和模型超参,即可使用。各种训练技巧即刻获得,包括极致的训练性能、分布式训练、分布式验证、增量训练、实时训练等。同时,也支持各种形式的定制,以满足各业务方的需求。


鲁文龙表示希望通过机器学习平台解决大规模分布式训练推理方面的工程性难题,其他团队只需要复用这些经验即可,精力更多地聚焦在业务效果指标的提升上,这样可以提升整个大团队的产出效率。


具体来说,vivo 机器学习平台团队在训练方面,主要优化了训练速度和模型对样本响应速度。


在训练速度提升方面,鲁文龙表示,vivo 主要做了单机训练性能提升、同步更新的分布式训练和分布式验证三方面工作。在单机训练性能提升方面,通过增大了 batch size,即增大密集计算的 workload,将 CPU 和 GPU 的利用率从 30%提升至 90% ;同时适当调整学习率策略,参考 linear scaling rule,收敛速度提升了 10 倍之多。


在同步更新的分布式训练方面,vivo 基于 horovod 实现分布式训练,采用 ring allreduce 的方式进行通信;深度定制 Horovod 优化了高维稀疏特征梯度的交换效率。


在原生 Horovod 实现中,Rank0 验证时,其他 worker 都在等待,造成计算资源浪费。优化后,验证计算量由所有 worker 一起承担,每个 worker 计算完后,将指标汇总归并。 这样大大提高了计算资源的利用率,同时也提升了训练速度。



Horovod 框架的稀疏特征梯度交换量的分析


在提升响应速度层面,vivo 尝试了增量训练和实时训练。鲁文龙表示,全量样本训练耗费太多计算资源与时间,增量训练可以提高训练的响应速度,效果更佳,同时也减少了资源的使用。要想实现实时训练,使得最新样本的分布尽快反应到模型中,就要去掉验证集;但训练任务的停止条件是通过验证集上 early stop 方式控制的,所以去掉验证集的话,就要寻找新的、稳定的、有效的停止条件;vivo 的方案是利用有验证集的训练任务得到训练集上的指标来指导无验证集的训练任务何时停止(如下图)。



实时训练方案的示意图


高性能推理引擎

通过构建高性能推理引擎来支撑 AI 研究院所有推理加速的需求,鲁文龙表示,对于业务使用方来讲,接入方式有两种:


  • 服务调用,适合于传输参数量级少的业务,方便服务升级管理。

  • SDK 调用,适合于传输参数量级大,极致推理性能优先的业务。



高性能推理引擎架构图


在引擎内部,基于 CPU 和 GPU 的开源高性能计算库和推理服务器,根据具体业务的特点,一般会采取:


  • 在计算库与推理服务器基础上,调优参数配置,优化热点算子,来满足线上推理的需求;

  • 对性能要求比较高、机器预算比较大的场景,会针对这类业务定制化实现一套轻量级的推理引擎。


具体的,在性能优化方面,vivo 优化工作主要集中在图优化和算子优化上。图优化方面主要是:


  • 算子融合: 经典的矩阵乘加融合、卷积层和激活层融合,减少函数调用次数,提供执行效率;

  • 非功能性算子消除:如 Identity、Const、Reshape、ExpandDim;

  • 异构计算:I/O 密集型和逻辑处理放在 CPU 上执行,如 embedding、并查集; 密集计算放在 GPU 上执行。


算子优化方面,vivo 也针对 CPU 和 GPU 的硬件特性做了一些软件层面的定制优化工作。CPU 的算子优化:


  • CPU 有更大的内存和 cache,所以内存对齐、增加 cache 命中率,可以提高运行效率;

  • CPU 有更少的执行单元,那么利用 OpenMP 做代码矢量化、让代码并行执行,提高运行效率;

  • 对 intel 最新型号 Cascade Lake 的 VNNI 指令进行了 INT8 探索优化。

  • GPU 的算子优化:

  • GPU 芯片有大量的计算单元,所以合理设计线程布局会大大优化执行效率,同时也要减少线程束分支,避免低效执行;

  • 对 T4 的 HMMA 指令和 IMMA 指令进行了 FP16 和 INT8 量化的探索优化。


经过一年多的探索与实践, 鲁文龙团队在稀疏 DCN 模型、通用 OCR 模型、BERT 模型等相关技术的应用场景中,都得到了 10 倍左右的推理加速,为 vivo 节省了数千万机器成本。


经验总结

对于同样希望建设机器学习平台的企业而言,鲁文龙也提出了自己的建议。他表示,机器学习平台研发团队内部最好有做过业务的人,要懂用户(也就是业务方)的需求,不然很难抓住用户痛点,向业务推广时也不好落地。


未来发展

从技术发展来看,鲁文龙表示,目前业界都在尝试深度学习,并且模型的复杂度越来越高,vivo 也继续在这方面探索高效的分布式训练和极致性能的推理能力,争取在众多业务上都获得不错的收益。扩展到人工智能领域,他补充道,比较值得期待的是大规模落地的业务场景上的突破,搜索推荐这些互联网常见的场景自不必谈,但目前语音或视觉等技术落地的大规模业务场景还不是特别多,跟移动互联网比起来。他认为,当众多业务场景大规模落地后,技术的商业价值凸显出来,随之而来的算法、算力等各个方面的突破才能形成持续的价值闭环。


采访嘉宾:


鲁文龙,vivo 资深算法工程师,目前在 vivo AI 研究院,在广告的机器学习项目中,引入了深度学习与大规模分布式训练技术,使得广告收入实现了大幅的增长。为了支持 AI 研究院各种各样的机器学习项目,从零到一打造端到端的一站式机器学习平台,降低机器学习技术的落地门槛,大大提升了项目的迭代效率。


2020 年 1 月 21 日 10:565574
用户头像
赵钰莹 InfoQ高级编辑

发布了 745 篇内容, 共 445.0 次阅读, 收获喜欢 2400 次。

关注

评论

发布
暂无评论
发现更多内容

图谱相关技术在风控反作弊中的应用和探索

百度Geek说

后端 软件架构

东软熙康、百度、京东方,互联网医院的三个典型样本

海比研究院

掘金热榜第一!阿里P8用近十个月整理出来999页Java岗核心笔记限时开源!

Java 架构 面试 程序人生 编程语言

软件开发:站在风口上的低代码

力软.net/java开发平台

低代码

浪潮云洲荣获两项工业自动化及数字化行业年度大奖 inspur浪潮云 昨天

浪潮云

云计算

互斥锁、自旋锁、读写锁...理清它们的区别和应用

云原生开发者社区

云计算 编程 开发 应用

四面字节跳动(高级开发岗):分布式+中间件+TCP+JVM+Hashmap

Java 编程 架构 面试 计算机

从工具、工具箱到数字化软件工厂——DevOps 设计理念与工程实践专场 | CIF 精彩看点

CODING DevOps

DevOps 数字化 研发工具 腾讯云 CIF 峰会

史上最全Java高频面试合集,命中率高达95%

Java 程序员 架构 面试 后端

金九银十不要怕!有了腾讯这本2021年最新Java面试手册,offer手到擒来!

Java 程序员 架构 面试 后端

搞不懂云原生

二哥不再迷茫

AlibabaP9力荐!最新出品1297页JDK源码+并发核心原理解析小册

Java 架构 面试 程序人生 编程语言

提高工作效率的三种方法

石云升

团队管理 管理 引航计划 内容合集 9月日更

音视频终端引擎优化实践

百度开发者中心

最佳实践 音视频 实践案例 智能视频 行业深度

行云创新:云原生技术助力企业数字化转型

云原生开发者社区

技术 云原生 转型 数字化 平台

艾瑞发布《2021年中国企业级 SaaS 行业研究报告》,ONES 入选典型厂商案例

万事ONES

项目管理 SaaS 协同办公

阿里巴巴架构师十年整理出的JavaSpringBoot核心文档,真是太全了

Java 架构 面试 程序人生 编程语言

超十年渗透专家总结出636页渗透测试全笔记,100课时一次讲清

Java 架构 面试 程序人生 编程语言

智能网联汽车行业信息安全现状与威胁

SOA开发者

重磅来袭,虚拟化技术分类

hanaper

目睹阿里技术官写的Tomcat架构笔记后,瞬间觉得自己是渣渣

Java 架构 面试 程序人生 编程语言

华为云带你探秘Xtrabackup备份原理和常见问题分析

华为云数据库小助手

GaussDB 华为云数据库 MySQL 数据库 GaussDB(for MySQL)

【新品尝鲜】OCR磅单识别上线邀测,为货运物流提速增效

百度大脑

人工智能 OCR

质量基础设施一站式线上平台,NQI一站式服务平台

135深圳3055源中瑞8032

使用 grpcurl 通过命令行访问 gRPC 服务

AlwaysBeta

golang gRPC

快手、知乎等平台严厉打击“病媛”炒作行为:自媒体行业不能被流量裹挟

石头IT视角

如何做一场有趣又高效的迭代回顾会议?

万事ONES

Scrum 敏捷 回顾会

拥抱开源,共建生态 - 开源生态与效能提升专场 | CIF 精彩看点

CODING DevOps

DevOps 研发效能 腾讯云 CIF 峰会 开源生态

智能大数据专场,百度智能云带来智能大数据产品架构全景图

百度大脑

人工智能 大数据

用Python绘制专业的K线图【含源代码】

恒生LIGHT云社区

手把手教你使用Studio Lite + Digtal car!助力智能汽车场景、轻应用开发更轻松!

SOA开发者

vivo手机背后的一站式机器学习平台架构实践-InfoQ