干货|基于 CPU 的深度学习推理部署优化实践
背景介绍
随着人工智能技术在爱奇艺视频业务线的广泛应用,深度学习算法在云端的部署对计算资源,尤其是 GPU 资源的需求也在飞速增长。如何提高深度学习应用部署效率,降低云平台运行成本,帮助算法及业务团队快速落地应用和服务,让 AI 发挥真正的生产力,是深度学习云平台团队努力的目标 。
从基础架构的角度,GPU 资源的紧缺和 GPU 利用率的不足是我们面临的主要挑战。由于大量的算法训练及推理服务需求,云端 GPU 资源经常处于短缺状态;而使用 CPU 进行的推理服务常常由于性能问题,无法满足服务指标。除此之外,线上服务通常有较高的实时性要求,需要独占 GPU,但由于较低的 QPS,GPU 利用率经常处于较低的状态(<20%)。
在此背景下,我们尝试进行了基于 CPU 的深度学习推理服务优化,通过提升推理服务在 CPU 上的性能,完成服务从 GPU 迁移到 CPU 上的目的,以利用集群中大量的 CPU 服务器,同时节省 GPU 计算资源 。
1. 深度学习推理服务及优化流程
1.1 什么是深度学习推理服务?
深度学习推理服务通常是指将训练好的深度学习模型部署到云端,并对外提供 gRPC/HTTP 接口请求的服务。推理服务内部实现的功能包括模型加载,模型版本管理,批处理及多路支持,以及服务接口的封装等,如图 2 所示:
业界常用的深度学习推理服务框架包括 Google 的 tensorflow serving、Nvidia 的 Tensor RT inference server,Amazon 的 Elastic Inference 等。目前爱奇艺深度学习云平台(Jarvis)提供以 tensorflow serving 为框架的自动推理服务部署功能,已支持的深度学习模型包括 tensorflow,caffe,caffe2,mxnet,tensorrt 等,未来还会支持包括 openvino,pytorch。除此之外,业务团队也可以根据自身需求实现和定制特定的深度学习服务化容器,并通过 QAE 进行服务的部署和管理。
1.2 服务优化的流程是怎样的?
服务优化流程如图 3 所示,是一个不断朝优化目标迭代的过程。
进行深度学习推理服务的优化,首先需要明确服务的类型和主要性能指标,以确定服务优化的目标。从系统资源的角度,深度学习服务可以分为计算密集或者 I/O 密集类服务,例如基于 CNN 的图像 / 视频类算法通常对计算的需求比较大,属于计算密集型服务,搜索推荐类的大数据算法输入数据的特征维度较高,数据量大,通常属于 I/O 密集型服务。从服务质量的角度,又可以分为延时敏感类服务和大吞吐量类型服务,例如在线类服务通常需要更低的请求响应时间,多属于延时敏感类服务,而离线服务通常是批处理的大吞吐量类型服务。不同类型的深度学习服务优化的目标和方法也不尽相同。
1.3 深度学习推理服务的性能指标有哪些?
深度学习服务的性能指标主要包括响应延时(latency),吞吐量(throughput),及模型精度(accuracy)等,如图 5 所示。其中响应延时和吞吐量两个指标是进行服务化过程中关心的性能指标。明确服务性能指标后便于我们分析服务规模,计算单一服务节点需要达到的服务性能。
2. 基于 CPU 的深度学习推理服务优化
2.1 CPU 上进行深度学习优化的方法主要有哪些?
“工欲善其事,必先利其器”。CPU 上进行深度学习推理服务优化的方法,可以分为系统级、应用级、算法级,每一级也有对应的性能分析工具,如图 6 所示:
系统级的优化主要从硬件和平台的角度进行计算加速,方法主要包括基于 SIMD 指令集的编译器加速、基于 OMP 的数学库并行计算加速、以及硬件厂商提供的深度学习加速 SDK 等方法。
应用级的优化主要从特定应用和服务的角度进行流水和并发的优化。通常的深度学习服务不仅仅包含推理,还有数据的预处理、后处理,网络的请求响应等环节,良好的并发设计可以有效的提升服务端到端的性能。
算法级的优化主要针对深度学习模型本身,利用诸如超参数设置、网络结构裁剪、量化等方法来减小模型大小和计算量,从而加速推理过程。
2.2 如何进行系统级的优化?
CPU 上系统级优化实践中我们主要采用数学库优化(基于 MKL-DNN)和深度学习推理 SDK 优化(Intel OpenVINO)两种方式。这两种方式均包含了 SIMD 指令集的加速。
数学库优化对主流的深度学习框架(tensorflow,caffe,mxnet,pytorch 等)均有官方源支持。以 tensorflow 为例,使用方法如下所示:
深度学习推理 SDK 优化方法,需要首先将原生深度学习模型进行转换,生成 IR 中间模型格式,之后调用 SDK 的接口进行模型加载和推理服务封装。具体流程如下所示:
2.3 选用哪种系统级优化方式?
两种优化方式的比较如图 9 所示:
基于两种优化方式的特点,实践中可首先使用基于 MKL-DNN 的优化方式进行服务性能测试,如满足服务需求,可直接部署;对于性能有更高要求的服务,可尝试进行 OpenVINO SDK 优化的方法。
2.4 系统级优化使用中有哪些影响性能的因素?
以上两种系统级优化方法,使用过程中有以下因素会影响服务性能。
(1)OpenMP 参数的设置
两种推理优化方式均使用了基于 OMP 的并行计算加速,因此 OMP 参数的配置对性能有较大的影响。主要参数的推荐配置如下所示:
? OMP_NUM_THREADS = “number of cpu cores in container”
? KMP_BLOCKTIME = 10
? KMP_AFFINITY=granularity=fine, verbose, compact,1,0
(2)部署服务的 CPU 核数对性能的影响
CPU 核数对推理服务性能的影响主要是:
? Batchsize 较小时(例如在线类服务),CPU 核数增加对推理吞吐量提升逐渐减弱,实践中根据不同模型推荐 8-16 核 CPU 进行服务部署;
? Batchsize 较大时(例如离线类服务),推理吞吐量可随 CPU 核数增加呈线性增长,实践中推荐使用大于 20 核 CPU 进行服务部署;
(3)CPU 型号对性能的影响
不同型号的 CPU 对推理服务的性能加速也不相同,主要取决于 CPU 中 SIMD 指令集。例如相同核数的 Xeon Gold 6148 的平均推理性能是 Xeon E5-2650 v4 的 2 倍左右,主要是由于 6148 SIMD 指令集由 avx2 升级为 avx-512。
目前线上集群已支持选择不同类型的 CPU 进行服务部署。
(4)输入数据格式的影响
除 Tensorflow 之外的其他常用深度学习框架,对于图像类算法的输入,通常推荐使用 NCHW 格式的数据作为输入。Tensorflow 原生框架默认在 CPU 上只支持 NHWC 格式的输入,经过 MKL-DNN 优化的 Tensorflow 可以支持两种输入数据格式。
使用以上两种优化方式,建议算法模型以 NCHW 作为输入格式,以减少推理过程中内存数据重排带来的额外开销。
(5)NUMA 配置的影响
对于 NUMA 架构的服务器,NUMA 配置在同一 node 上相比不同 node 上性能通常会有 5%-10% 的提升。
2.5 如何进行应用级的优化?
进行应用级的优化,首先需要将应用端到端的各个环节进行性能分析和测试,找到应用的性能瓶颈,再进行针对性优化。性能分析和测试可以通过加入时间戳日志,或者使用时序性能分析工具,例如 Vtune,timeline 等 。优化方法主要包括并发和流水设计、数据预取和预处理、I/O 加速、特定功能加速(例如使用加速库或硬件进行编解码、抽帧、特征 embedding 等功能加速)等方式。
下面以视频质量评估服务为例,介绍如何利用 Vtune 工具进行瓶颈分析,以及如何利用多线程 / 进程并发进行服务的优化。
视频质量评估服务的基本流程如图 10 所示,应用读入一段视频码流,通过 OpenCV 进行解码、抽帧、预处理,之后将处理后的码流经过深度学习网络进行推理,最后通过推理结果的聚合得到视频质量的打分,来判定是何种类型视频。
图 11 是通过 Vtune 工具抓取的原始应用线程,可以看到 OpenCV 单一解码线程一直处于繁忙状态(棕色),而 OMP 推理线程常常处于等待状态(红色)。整个应用的瓶颈位于 Opencv 的解码及预处理部分。
图 12 显示优化后的服务线程状态,通过生成多个进程并发进行视频流解码,并以 batch 的方式进行预处理;处理后的数据以 batch 的方式传入 OMP threads 进行推理来进行服务的优化。
经过上述简单的并发优化后,对 720 帧视频码流的处理时间,从 7 秒提升到了 3.5 秒,性能提升一倍。除此之外,我们还可以通过流水设计,专用解码硬件加速等方法进一步提升服务整体性能。
2.6 如何进行算法级的优化?
常见的算法级优化提升推理服务性能的方法包括 batchsize 的调整、模型剪枝、模型量化等。其中模型剪枝和量化因涉及到模型结构和参数的调整,通常需要算法同学帮助一起进行优化,以保证模型的精度能满足要求。
2.7 Batchsize 的选取在 CPU 上对服务性能的影响是怎样的?
Batchsize 选取的基本原则是延时敏感类服务选取较小的 batchsize,吞吐量敏感的服务选取较大的 batchsize。
图 13 是选取不同的 batchsize 对推理服务吞吐量及延时的影响。测试结果可以看 batchsize 较小时适当增大 batchsize(例如 bs 从 1 到 2),对延时的影响较小,但是可以迅速提升吞吐量的性能;batchsize 较大时再增加其值(例如从 8 到 32),对服务吞吐量的提升已没有帮助,但是会极大影响服务延时性能。因此实践中需根据部署服务节点 CPU 核数及服务性能需求来优化选取 batchsize。
总结与展望
以上介绍的系统级优化方法,已在深度学习云平台落地超过 10+ 应用和算法,部署上千 core 的服务,平均性能提升在 1~9 倍。更详细的使用方法可以参考文末相关链接。
对于深度学习的推理服务优化,深度学习云平台还计划加入更多的异构计算资源来加速特定任务,例如 VPU、FPGA 等计算资源。同时在服务的弹性和优化调度、部署参数的自动优化选取等方面,我们也会继续深入优化,以充分发挥云平台的计算资源和能力,加速深度学习推理服务的落地。
相关链接
(1)OpenVINO:
https://software.intel.com/en-us/openvino-toolkit
(2)Vtune 性能分析工具:
https://software.intel.com/en-us/vtune
版权声明:
作者: FreeClashNode
链接: https://www.freeclashnode.com/news/article-2786.htm
来源: www.freeclashnode.com
文章版权归作者所有,未经允许请勿转载。
热门文章
- 11月2日免费节点分享|22.5M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月11日免费节点分享|18.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月12日免费节点分享|22.7M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月10日免费节点分享|18.3M/S,V2ray节点/Singbox节点/Clash节点/SSR节点|免费上网梯子每天更新
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
最新文章
- 11月8日免费节点分享|21.3M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 当Vmess突然失效:一场技术与封锁的无声博弈
- 11月7日免费节点分享|22.9M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 梅林固件科学上网完全指南:从入门到精通,零成本解锁网络自由
- 11月6日免费节点分享|20.9M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 幸运破解器科学上网全解析:解锁数字世界的终极指南
- 11月5日免费节点分享|21.9M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 11月4日免费节点分享|18M/S,Clash节点/Singbox节点/SSR节点/V2ray节点|免费上网梯子每天更新
- 穿越数字迷雾:深度解析V2Ray中转迟滞之谜与极速优化指南
- 跨越数字边界:科学上网的终极指南与深度思考
- 从连接到掌控:深入理解 Quantumult 的工作流程与网络管理哲学
- 11月2日免费节点分享|22.5M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度解析《荒野冲突》:征服与策略的终极对决
- 11月1日免费节点分享|20.3M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 斐讯路由器刷机配置v2ray全攻略:打造安全高效的翻墙网络环境
- 10月31日免费节点分享|18.7M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 谷歌浏览器科学上网扩展全攻略:从入门到精通
- 10月30日免费节点分享|20.4M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 苹果手机V2Ray完全指南:从零开始打造安全上网环境
- 10月29日免费节点分享|21.6M/S,SSR节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 探索数字世界的门户:电脑科学上网贴吧完全指南
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 穿越数字边界:科学上网的全面指南与深度思考
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 数字世界的破壁之旅:科学上网全指南与实用工具深度解析
- 10月26日免费节点分享|21.5M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 跨越知识边界:浙大学子的全球学术网络探索指南
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月24日免费节点分享|20.5M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 刘大猫科学上网全攻略:解锁全球网络的终极指南
- 10月23日免费节点分享|22.2M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 全面解析Quantumult安卓版:功能、安装与配置教程
- 双重防护,畅享无界:AdGuard联手V2RayNG,打造极致安全的上网体验
- 10月22日免费节点分享|18.8M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 掌握Clash白名单设置:精准控制代理流量的艺术
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 突破网络边界:技术科学上网的终极安全指南
- 10月20日免费节点分享|22.9M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- Shadowrocket 选购指南:从入门到精通,找到你的专属代理神器
- 10月19日免费节点分享|19.3M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 深入解读:V2Ray为何比SSR更安全?一场网络隐私的全方位较量
- 10月18日免费节点分享|20.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度指南:Shadowrocket从入门到精通——iOS用户的网络自由密钥
- 10月17日免费节点分享|18M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 深入解析科学上网套:全方位使用指南与常见问题解答
- 10月16日免费节点分享|22M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月15日免费节点分享|21.2M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 全局掌控:安卓设备上 Clash 全局模式完整设置指南与深度解析
- 解锁全球游戏体验:育碧平台科学上网全攻略与深度解析
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
归档
- 2026-11 14
- 2026-10 61
- 2026-09 58
- 2026-08 63
- 2026-07 61
- 2026-06 55
- 2026-05 56
- 2026-04 51
- 2026-03 60
- 2026-02 52
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3