58同城深度学习平台资源使用率优化实践

陈泽龙,58同城AI Lab后端高级工程师,2019年加入58同城,目前主要负责深度学习平台和向量检索平台后台开发相关工作。2016年硕士毕业于中国科学院大学,曾就职于中科院信工所。
议题介绍:58同城深度学习平台基于Kubernetes和Docker构建,支撑了58同城搜索、推荐、图像、NLP、语音、风控等AI应用。
本次分享首先介绍如何利用Intel开源库MKL和开源推理引擎OpenVINO提升模型推理性能,然后再分享通过TensorFlow模型混合部署、GPU虚拟化技术、模型推理资源监控告警等提升平台资源使用率。

展开查看详情

1.58同城深度学习平台资源使用率优化实践 陈泽龙 58同城-TEG-AI Lab-AI平台部 2020.09.12

2.部门简介 • 智能客服 • 智能客服商家版 • 语音机器人 • 语音分析平台 • AI算法平台 • 语音识别引擎 58AILab公众号

3.个人简介 ⚫ 工作经历 ⚫ 2019年7月~至今 58同城 AI平台部 ⚫ 2016年7月~2019年7月 中科院信工所 后端 ⚫ 教育背景 ⚫ 2013年9月~2016年7月 硕士 中国科学院大学

4.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

5.深度学习平台总体架构 开发实验 模型训练 推理服务 代码在线调试 单机单卡训练 推理加速(TensorRT、MKL、OpenVINO) 资源复用 参数服务器(多机多卡训练) 负载均衡 弹性扩容 ABTest 监控 中心 深度学习框架 Docker、Nvidia-Docker2 日志 中心 Kubernetes ETCD Calico DNS Prometheus Grafana rsyslog … 资源管理 任务调度 服务发现 镜像 中心 算力 存储 对象存储 高性能网络文件系统 CPU K40 P40 T4 2080ti … RAID HDFS (WOS) (WFS)

6.深度学习平台-在线推理 业务方线上请求: 模型ID + 预测数据(Object) 通用预测接口 Jar包热加载 RPC 模型1解析jar包 协议解析 接入 模型2解析jar包 服务 Jar包 流量转发/负载均衡 模型n解析jar包 推送 分享人:余意 模型1协议实体 模型n协议实体 Web 管 模型1预测实例 模型2预测实例 模型n预测实例 理 podn podn podn 系 pod2 pod2 pod2 统 pod1 pod1 模型 pod1 部署 TensorFlow PyTorch 自定义模型 、 Serving gRPC Serving gRPC Serving 扩缩 容 Kubernetes

7.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

8.资源使用率优化背景 • 部分模型推理时在CPU上latency达不到业务要求而必须使用GPU。 —— 解决方法:使用Intel MKL库 降低latency,使得部门原来必须跑在GPU上的模型可以迁移CPU,节省GPU资源。 • 提升模型GPU上推理throughput,降低模型GPU资源使用量。 ——解决方法:应用OpenVINO • k8s对GPU卡是按整数进行调度,开发环境、推理流量小模型、GPU使用率占用有限模型分配整张GPU卡 存在资源浪费。 ——解决方法: TensorFlow模型混合部署、GPU虚拟化技术应用 • 线上模型资源配置不合理,资源存在浪费。 —— 解决方法:推理资源监控告警,及时进行调整

9.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

10.MKL Intel® Math Kernel Library (Intel® MKL) 是一套高度优化、线程安全的数学例程、函数,面向高性能的工 程、科学与财务应用。英特尔 MKL 的集群版本包括 ScaLAPACK 与分布式内存快速傅立叶转换,并提供 了线性代数 (BLAS、LAPACK 和Sparse Solver)、快速傅立叶转换、矢量数学 (Vector Math) 与随机号码 生成器支持。 主要包括: • LAPACK (线形代数工具linear algebra package) • DFTs (离散傅立叶变换 Discrete Fourier transforms) • VML (矢量数学库Vector Math Library) • VSL (矢量统计库Vector Statistical Library)

11.MKL • 接口支持 Intel MKL是一套经过高度优化和线程化的函数库,提供C和Fortran接口。 • 处理器支持 可以为当前以及下一代处理器提供性能优化,其支持全部兼容英特尔处理器的处理器。说明:MKL会更加 运行的处理器环境,自动运行时处理器检测,从而对不同的处理器运行不同的优化版本的程序,从而保证其 能在所运行的处理器上都能获得较好的性能,所以,有可能同一个使用了MKL的程序,在不同的处理器上运 行的性能不同,因为MKL会针对不同的处理器进行检测,对其进行尽可能的最大化优化。 • 平台和工具支持 支持主流的操作系统(Windows、linux、Mac OS等),与主流的开发工具(VS、Eclipse、Xcode、GCC等) 集成。 • 多核多线程扩充性能和线程安全性 内置并行处理机制,在多核和多处理器上自动获取出色的扩充性能。所有的MKL函数都是线程安全的。同 时提供非线程化顺序型MKL。

12.MKL OCR模型 Intel Xeon E5-2630 v4 通用预测接口 RPC 接入 协议解析 服务 mkl版本 流量转发/负载均衡 预测耗时有效减少62.07% CPU资源使用增加177.3% TF-Serving部署 TF-Serving(MKL)部署 podn podn pod2 pod2 TFS版本 使用CPU资源/核 平均耗时/ms QPS pod1 pod1 1.12 1.19 150.0 6.6 TensorFlow TensorFlow 1.12-mkl 3.30 60.6 16.4 Serving Serving(MKL) Kubernetes

13.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

14.OpenVINO OpenVINO ToolKit是英特尔发布的一套深度学习推断引擎,支持各种网络框架,支持100多种网络训练导 出的模型 工具包的主要特点主要包括: • 在Intel平台上提升计算机视觉相关深度学习性能达19倍以上 • 解除CNN-based的网络在边缘设备的性能瓶颈 • 对OpenCV,OpenXV*视觉库的传统API实现加速与优化 • 基于通用API接口在CPU、GPU、FPGA等设备上运行

15.OpenVINO

16.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

17.存在的问题 在线推理任务流量较小, 存在GPU资源浪费 资源浪费 开发实验/训练/推理任 务极限使用情况仍无法 占满一张GPU卡

18.TensorFlow模型混合部署 ⚫ 应用场景:模型需要使用GPU但流量小,GPU使用率低 ⚫ TensorFlow-Serving支持多模型部署 ⚫ Kubernetes实现混合部署资源调度

19.TensorFlow模型混合部署 推理请求接入RPC服务(请求转发+负载均衡) 混合部署编号1 混合部署编号2 POD1 POD2 POD1 POD2 TF-Serving TF-Serving …… …… 部门A 部门A 部门A 部门A 部门A 部门B 部门B Model Model Model Model Model Model Model 1 2 3 4 5 1 2 Kubernetes

20.TensorFlow模型混合部署 • 平台统一进行GPU资源调度和部署 • 混合部署时申请模型所需要的GPU资源 0.01~0.5 分享人:余意

21.TensorFlow模型混合部署 混合部署开始 新创建模型 离线计算任务 是 否 所有混合部署编 号24h GPU使用 率 资源调度计算 模型更新 遍历计算 查询 分配调度模型 加上当前任务GPU 混合部署编号 资源后GPU使用率 资源统一调度 否 模型混合部署编 是否大于50% 号信息入库 是 分享人:余意 遍历完 获取混合部署编 所有混合编号 号Deployment 是 否 新建混合部署编号 修改Deployment 写入部署模型信息 获取混合部署编号 Kubernetes部署

22.TensorFlow模型混合部署 独立部署模型 按照业务情况进行压测 混合部署操作流程 获取GPU使用率 申请GPU资源 切换混合部署

23.目录 ⚫ 深度学习平台简介 ⚫ 资源使用率优化背景介绍 ⚫ 提升模型推理性能 ⚫ Intel MKL库应用 ⚫ Intel OpenVINO推理引擎集成 ⚫ 优化模型推理资源分配和调度 ⚫ TensorFlow模型混合部署 ⚫ GPU虚拟化技术应用 ⚫ 模型推理资源监控告警 ⚫ 总结

24.GPU容器调度和运行 容器 容器 应用 应用 (TF、PyTorch、Caffe) …… (TF、PyTorch、Caffe) CUDA CUDA scheduler 物理机 Kubelet Docker、 nvidia-device-plugin- Device Plugin Manager Nvidia Driver CUDA Nvidia-Docker2 daemonset NVIDIA GPUS Device Plugin

25.存在的问题 Kubernetes GPU只能 按整数调度 用户自定义模型 TensorFlow模型混合部署

26.GPU虚拟化 虚拟化方式 简介 优点 缺点 API转发 接收VM的显示请求, VM侧实现简单 VM不具备真正的显 并转发给显卡驱动 多个VM比较容易共 卡,无法使用硬件加 享显卡资源 速能力,部分程序会 存在兼容性问题 设备仿真 为客户机提供一个仿 实现简单 模拟效率低 真虚拟的GPU 显卡透传 通过IO映射方式,将 得到显卡的VM,表 显卡无法在多个VM 显卡分配给特定的 现近似真实主机,具 间共享 VM 备良好的显示性能和 兼容性 全虚拟化 显卡驱动提供动态资 良好的性能 源调度层,动态地分 优秀的兼容性 配显卡资源到各个VM 显卡可在多个VM间 共享

27.GPU虚拟化-Nvidia Nvidia Grid Nvidia MPS

28.GPU虚拟化-Nvidia Quadro vDWS: 适用于专业级图形应用程序;内置 NVIDIA Quadro 驱动程序。虚拟工作站可通过数据中心提 供GPU资源让用户随时随地在任何设备上安全访问数据,用户不再受物理位置的限制,通过数 据中心虚拟化应用程序为终端用户如建筑师、工程师和设计师提供专业工作站级别的用户体验 。常见应用程序有:Ansys Discovery Live、ESRI ArcGIS、Autodesk AutoCAD、Autodesk Maya、Autodesk Revit、CATIA、Petrel、Siemens NX、SOLIDWORKS等。 GRID vPC: 适用于拥有标准 PC 应用程序、浏览器和多媒体的虚拟桌面。 GRID vApps: 与 Citrix XenApp 或其他 RDSH 解决方案配合使用,例如 VMware Horizon 应用程序 vComputeServer: vComputeServer 让数据中心管理员可以在虚拟环境中在 GPU 服务器上运行 AI 工作负载,进 一步提升了计算的安全性、利用率和可管理性。IT 管理员可以使用 VMware vSphere(包 括 vCenter 和 vMotion)等 hypervisor 虚拟化工具来管理所有数据中心应用,包括运行 于 NVIDIA GPU 之上的 AI 应用。

29.GPU虚拟化-Vmware vSphere