背景介绍爱奇艺视频随着人工智能技术在商业领域的广泛应用,由于深度学习算法在云端的部署,对计算资源尤其是GPU资源的需求也在快速增长。提高深度学习应用部署效率,降低云平台运营成本,帮助算法和业务团队快速落地应用和服务,让AI真正生产力,这是深度学习云平台团队的目标。从基础设施的角度来看,GPU资源缺乏和GPU利用率不足是我们面临的主要挑战。由于算法训练和推理服务需求较高,云中的GPU资源往往比较稀缺,基于CPU的推理服务往往因性能问题而无法满足服务指标。另外,在线业务通常实时性要求较高,需要专用GPU,但由于QPS较低,GPU利用率往往较低(20%)。因此,我们尝试在CPU基础上对深度学习推理服务进行优化,通过提高CPU上推理服务的性能,达到将服务从GPU迁移到CPU的目的,并利用GPU计算资源。您可以将许多CPU 服务器放置在一个集群中,同时仍然节省资金。
图1. 云平台的深度学习服务挑战
1. 深度学习推理服务及优化流程1.1 什么是深度学习推理服务深度学习推理服务通常是将训练好的深度学习模型部署到云端,并对外提供gRPC/HTTP接口请求的服务。推理服务内部实现的功能包括模型加载、模型版本控制、批处理和多通道支持以及服务接口封装,如图2所示。
图2 深度学习推理服务功能模块
业界常用的深度学习推理服务框架有谷歌的tensorflow serving、Nvidia的Tensor RT推理服务器、亚马逊的Elastic Inference等。目前,爱奇艺深度学习云平台(Jarvis)采用tensorflow作为框架,提供自动推理服务部署功能,支持的深度学习模型包括tensorflow、caffe、caffe2、mxnet、tensorrt等在内,还将支持openvino。未来将是pytorch。此外,业务团队还可以根据自己的独特需求实施和定制特定的深度学习服务容器,并通过QAE部署和管理服务。 1.2 什么是服务优化流程?服务优化流程如图3所示。这是一个朝着优化目标不断迭代的过程。
图3. 服务优化流程
要优化深度学习推理服务,首先需要确定服务类型和关键性能指标,以确定服务优化目标。从系统资源的角度来看,深度学习服务可以分为计算密集型服务和I/O密集型服务。例如,基于CNN的图像/视频算法通常具有相对较大的计算需求,并且是计算密集型服务。推荐服务规模大,数据算法的输入数据特征高、数据量大,是典型的I/O密集型服务。从服务质量的角度来看,服务可以分为时延敏感服务和高吞吐量服务。例如,在线服务通常具有较短的请求响应时间并且通常对延迟敏感,而离线服务通常是批处理。基于吞吐量的服务。深度学习服务的优化目标和方法也根据类型的不同而不同。
图4 深度学习推理服务分类
1.3 深度学习推理服务的性能指标有哪些?如图5所示,深度学习服务的性能指标主要包括响应延迟(latency)、吞吐量(throughput)、模型准确率(accuracy)。其中两个指标(响应延迟和吞吐量)是服务化过程中需要关注的性能指标。有了清晰的服务性能指标,可以更轻松地分析服务规模,计算单个服务节点需要达到的服务性能。
图5. 深度学习服务的性能指标
2. 优化基于CPU的深度学习推理服务2.1 在CPU上优化深度学习的主要方法有哪些?“工欲善其事,必先利其器”。如何优化基于CPU的深度学习推理服务CPU可分为系统级、应用级和算法级,每个级别也有相应的性能分析工具,如图6所示。硬件与平台计算加速技术主要包括基于SIMD指令集的编译器加速、基于OMP数学库的并行计算加速以及硬件厂商提供的深度学习加速SDK。应用级优化主要是从具体应用和服务的角度来优化管道和并发。深度学习服务通常不仅包括推理,还包括数据预处理、后处理和响应网络请求。良好的并发设计可以有效提高服务的端到端性能。算法级优化主要针对深度学习模型本身,利用超参数设置、网络结构调优、量化等方法来降低模型规模和计算复杂度,从而提高推理过程的速度。
图6.深度学习服务的性能优化技术和分析工具。
2.2 如何进行系统级优化在CPU上进行系统级优化主要涉及优化数学库(基于MKL-DNN)和优化深度学习推理SDK(Intel OpenVINO)两种方法。两种方法都包含SIMD 指令集加速。数学库优化对主流深度学习框架(tensorflow、caffe、mxnet、pytorch等)有官方源码支持。以tensorflow为例,用法为:
图7. 如何使用基于MKL-DNN优化的Tensorflow
深度学习推理SDK优化方法需要首先将原生深度学习模型转换生成IR中间模型格式,然后调用SDK接口加载模型并封装推理服务。具体流程如下。
图8. OpenVINO 优化的推理服务流程
2.3 我应该选择哪种系统级优化方法? 图9给出了两种优化方法的比较。
图9. 系统级优化技术比较
图11. 应用优化之前的线程状态
图12展示了优化后的服务线程的状态。产生多个进程来同时解码视频流并批量进行预处理。处理后的数据批量传递给OMP线程进行推理,优化服务。
图12. 应用并发优化后的线程状态
经过上述简单的并发优化后,720帧视频流的处理时间从7秒提升到3.5秒,性能提升了一倍。此外,您还可以通过管道设计、专用解码硬件加速等方法进一步提升服务的整体性能。 2.6 如何进行算法级优化提升推理服务性能的常见算法级优化方法包括调整batch size、剪枝模型、量化模型等。其中,模型剪枝和量化涉及调整模型结构和参数,而优化以确保模型精度满足要求通常涉及算法的学习者的需要帮助。 2.7 Batch Size 选择对CPU 上的业务性能有何影响Batch Size 选择的基本原则是,对于延迟敏感的业务,选择较小的Batch Size;对于吞吐量敏感的业务,选择较小的Batch Size;对于吞吐量敏感的业务,Batch Size 选择较大的Batch Size。图13 显示了选择不同批量大小对推理服务的吞吐量和延迟的影响。您可以在测试结果中查看测试结果。如果batch size较小,适当增加batch size(例如将bs从1增加到2)将快速提高吞吐量性能,同时对延迟的影响较小。如果您的批量大小较大,请增加该值(例如,从8 到2)。 32),无助于提高业务吞吐量,但对业务时延性能有显着影响。因此,在实际应用中,您应该根据所部署的服务节点的CPU核数以及您的服务的性能需求来优化batch size。
图13. 批量大小对服务性能的影响
总结与展望上面介绍的系统级优化技术已经在深度学习云平台上的10多个应用和算法中实现,部署了数千个核心服务,实现了平均1-9倍的性能提升。详细使用信息请参考文末相关链接。为了优化深度学习推理服务,深度学习云平台还可以添加更多的异构计算资源来加速特定任务,比如VPU、FPGA等计算资源,我正在规划中。同时,我们将继续在服务弹性、优化调度、自动优化和部署参数选择等方面进行深入优化,充分利用和加速云平台的计算资源和能力去做。实施深度学习推理服务。相关链接(1) OpenVINO:https://software.intel.com/en-us/openvino-toolkit (2) Vtune 性能分析工具:https://software.intel.com/en-us/vtune
标题:深入剖析cpu,cpu训练模型
链接:https://yyuanw.com/news/xydt/7570.html
版权:文章转载自网络,如有侵权,请联系删除!