写点什么

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

  • 2020-01-21
  • 本文字数:4072 字

    阅读完需:约 13 分钟

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-01-21 10:566557
用户头像
赵钰莹 极客邦科技 总编辑

发布了 882 篇内容, 共 645.1 次阅读, 收获喜欢 2679 次。

关注

评论

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

企评家企业大数据,实现6种应用的场景

企评家

什么是满二叉树?

InfoQ IT百科

国厂自研的操作系统都有哪些?

InfoQ IT百科

如何判断两个字符串是否互为回文?

InfoQ IT百科

玩转小程序压测

阿里巴巴云原生

小程序 阿里云 云原生 压测 PTS

易捷行云EasyStack 加入龙蜥社区,共同打造多样化算力创新云平台

OpenAnolis小助手

云计算 开源 龙蜥社区 CLA 易捷行云

企评家|河南豫能控股股份有限公司的企业成长性报告简述

企评家

计算单链表的长度。

InfoQ IT百科

企业知识管理平台的作用及功能

小炮

企业知识管理

微服务架构设计实践

鲁米

微服务架构

中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场

联营汇聚

企评家,企业评价助力新三板企业健康发展

企评家

EventBridge 集成云服务实践

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge 事件源

加密算法有哪几种?

InfoQ IT百科

Plato Farm 的MARK 处于永远通缩,经济模型解析

西柚子

动态重定位需要由什么来实现?

InfoQ IT百科

什么是完全二叉树?

InfoQ IT百科

易周金融观点 | 个人养老金制度正式出炉;居民贷款延期还款政策密集落地

易观分析

银行 养老金制度

阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程

阿里巴巴云原生

阿里云 云原生 FinOps

netty系列之:netty中常用的对象编码解码器

程序那些事

Java Netty 程序那些事 4月月更

进程主要由哪几个部分组成?

InfoQ IT百科

大咖说 X 对话开源|论数据库人才发展战略

大咖说

数据库 阿里云 科技

给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样。

InfoQ IT百科

阿里云数字化安全生产平台 DPS V1.0 正式发布!

阿里巴巴云原生

阿里云 云原生 数字化 安全生产平台

LAXCUS分布式操作系统如何保障系统安全

LAXCUS分布式操作系统

软件系统安全 量子攻击 分布式软件系统

浅谈MatrixOne如何用Go语言设计与实现高性能哈希表

MatrixOrigin

golang 哈希表 MatrixOrigin MatrixOne 矩阵起源

使用任务管理软件有哪些好处,好用的任务管理软件有哪些?

爱吃小舅的鱼

什么是“哈希算法”?

InfoQ IT百科

递归算法的三个定律是什么?

InfoQ IT百科

CPU散热器是电脑标配吗?

InfoQ IT百科

面由 AI 生|虚拟偶像“捏脸”技术解析

ZEGO即构

计算机视觉 虚拟偶像 Avatar AI捏脸

vivo手机背后的一站式机器学习平台架构实践_AI&大模型_赵钰莹_InfoQ精选文章