VIVO 是一家以设计驱动创造伟大产品,打造以智能终端和智慧服务为核心的科技公司,也是一家全球性的移动互联网智能终端公司。致力于为消费者打造拥有极致拍照、畅快游戏、Hi-Fi 音乐的智能手机产品。根据《2020胡润中国10强消费电子企业》报告显示,VIVO 以1750亿人民币排名第3位。
而 VIVO AI 平台致力于建设完整的人工智能中台,搭建全面的、行业领先的大规模分布式机器学习平台,应用于内容推荐、商业变现、搜索等多种业务场景,为 2.6亿+ VIVO 用户提供极致的智能服务。
为了能加速满足企业往智能化深度发展的需求,VIVO 在数据中台基础上增加了一体化智能服务的概念,并且立足于数据的获取、存储、特征处理、分析、模型构建、训练、评估等智能服务相关的任务环节,使其高度组件化、配置化、自动化。
AI中台系统架构图 (图片来源于VIVO研究院授权)
在整个 AI 中台架构中,推荐中台则作为最重要的核心,也是最具商业价值的部分,需要承载 VIVO 亿级用户群体产生的日活千万的数据量。本文从推荐系统工程化的角度,解读了以下三方面内容:VIVO 的智能推荐系统是如何运行的?在实际应用场景中遇到过什么挑战?NVIDIA GPU 如何加速推荐系统的部署?
推荐中台系统架构图 (图片来源于VIVO研究院授权)
经过验证,本方案可以有效解决推荐业务中 GPU 通用性问题;同时能更高效的利用 GPU 。目前已经在部分推荐业务中落地。经过压测,性能方面,单张 T4 GPU 推理卡,性能优于约6台以上的78核 CPU 服务器。成本方面,VIVO 自研通用 GPU 方案,在 TensorRT 方案基础上,取得了更高的 QPS 和更低的延迟,可节省成本约75%!
在工程实践中,VIVO 推荐系统面临的第一个问题是如何平滑的把多种推荐业务逻辑从 CPU 平台向 GPU 平台迁移。鉴于当前已经存在多个推荐业务场景,包括应用商店,手机浏览器,负一屏信息流等。每个场景都有自己的算法模型和业务流程,如何把多种分散的智能服务整合到一个统一的推荐中台,同时要兼顾当前的业务的无损迁移是一个巨大的挑战。
一直以来,CPU 是客户主要的支撑推荐业务场景的主流硬件平台。但 VIVO 工程团队却发现在推理服务中,CPU 的表现始终无法达到要求标准,不仅算力较弱,应对复杂模型时,响应延迟和 QPS 也无法满足实时性和高并发的需求。
此时,客户尝试改用 NVIDIA GPU 来实现推荐业务的推理服务,有效解决 CPU 算力和性能的瓶颈的同时,也期待更大的成本优势。经过大量的工程实践,结果表明,单台基于 NVIDIA T4 GPU 的推理服务器,性能可以等同于24台 CPU 机器。毋庸置疑, GPU 的整体表现皆具有性能和成本的优势。据此,客户也认为使用 GPU 作为推荐业务场景的推理平台,已成为了公司乃至行业的共识。
由于 GPU 芯片架构的独特性,不经优化的原始 TensorFlow 模型,很难高效利用 GPU 的算力。为了解决这个问题,VIVO 工程团队投入了大量的人力和时间进行推荐模型优化及转换。而首先着手设计的是 TensorRT 方案,即是使用 NVIDIA 推理加速工具 TensorRT ,结合 Triton 的 serving 方式,以最大化 GPU 整体收益。
具体来说,把训练导出的 TensorFlow 模型经过 Onnx 转换成 TensorRT 模型,进而使用 NVIDIA 提供的推理服务框架 Triton 加载 TensorRT 模型。业务代码使用 VIVO 封装 Triton 的 JNI 接口,将业务请求输入 TensorRT 模型去做推理计算。
推荐业务流程图(图片来源于VIVO研究院授权)
实测结果表明,该方案取得了预期的线上收益。性能方面,单张 T4 GPU 推理卡,性能优于约6台以上的78核 CPU 服务器。以如下场景为例,在相同的精排服务请求:QPS 为600,BatchSize 为3000时,不同方案的成本,TensorRT 方案可节约成本约14%:
为了进一步提升线上收益,最大化 GPU 利用率,NVIDIA 机器学习团队配合 VIVO 继续优化现有效果,探索更多的技术方案可行性。
经过深入探讨,我们发现目前的方案(Triton+TensorRT)确实可以有效利用 GPU ,但是也存在一些问题。比如很多推荐业务场景,算法模型迭代更新频率高,工程化开发周期无法满足频繁更新的需求。此外,部分推荐模型存在算子不支持的情况,需要手动开发 TensorRT plugin ,短时间内也无法上线。总体来说,这样的开发流程通用性不够好,也较难有效的支持算法持续迭代。
因此,我们迫切需要实现一套机制,既要保证 GPU 的推理性能,更要具备良好的通用性。经过多次工程化尝试,我们针对性提出适合自身的推荐系统推理加速方案,即 VIVO 自研通用 GPU方案。
本方案通过多进程 + MPS + TensorFlow runtime 的方式,有效的提高了 GPU 利用率,且部分场景无需转换 TensorRT 模型。该方案的主要设计目标是:
- 多进程模型,管理和守护模型服务进程,有序的更新模型
- 添加原生 TensorFlow 中不支持 GPU 的算子
- 加载模型时,动态替换原来的不支持 GPU 的算子
自研通用GPU方案示意图 (图片来源于VIVO研究院授权)
此外,考虑到具体工程实践中,VIVO 算法部门和工程部门需要同步开发,如何解耦算法工程团队和推理加速团队的开发任务,因此推出了可配置的推理引擎服务,加速迭代开发效率。
自研可配置推理引擎示意图(图片来源于VIVO研究院授权)
经过验证,本方案可以有效解决推荐业务中 GPU 通用性问题;同时能更高效的利用 GPU 。目前已经在部分推荐业务中落地。经过压测,VIVO 自研通用 GPU 方案,在 TensorRT 方案基础上,取得了更高的 QPS 和更低的延迟,可节省成本约75%!
下表详细对比了在相同精排请求:QPS 为600,BatchSize 为3000时,不同方案的成本。
同时,我们测试了负一屏信息流推荐场景,结果同样表明,无论是 QPS 或是推理延迟(测试选用业界标准P99/P95指标),自研通用 GPU 方案都优于 TensorRT 方案和 CPU 方案。
展望未来,VIVO 推荐系统工程团队会继续探索新技术,持续积累 GPU 工程经验,并且沉淀到平台中,最终赋能到各个业务线。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.