1背景
随着CV算法在业务场景中使用越来越多,给我们带来了新的挑战,需要提升Python推理服务的性能以降低生产环境成本。为此我们深入去研究Python GPU推理服务的工作原理,推理模型优化的方法。最终通过两项关键的技术: 1.Python的GPU与CPU进程分离,2.使用TensorRT对模型进行加速,使得线上大部分模型服务QPS提升5-10倍左右,大量节约了线上GPU推理服务的成本。
针对上面的两项关键技术,我们还自研了相关框架与工具进行沉淀。包括基于Python的CPU与GPU进程自动隔离的推理服务框架,以及对推理模型进行转TensorRT优化的调试工具。
此外针对不同的推理服务性能瓶颈,我们还梳理了各种实战优化技巧,比如CPU与GPU分离,TensorRT开启半精度优化,同模型混合部署,GPU数据传输与推理并行等。
下面从理论,框架与工具,实战优化技巧三个方面介绍下推理服务性能优化的方法。
2理论篇
2.1 CUDA架构

CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型。它通过利用图形处理器 (GPU) 的处理能力,可大幅提升计算性能。
CUDA的架构中引入了主机端(host, cpu)和设备(device, gpu)的概念。CUDA的Kernel函数既可以运行在主机端,也可以运行在设备端。同时主机端与设备端之间可以进行数据拷贝。
CUDA Kernel函数:是数据并行处理函数(核函数),在GPU上执行时,一个Kernel对应一个Grid,基于GPU逻辑架构分发成众多thread去并行执行。
CUDA Stream流:Cuda stream是指一堆异步的cuda操作,他们按照host代码调用的顺序执行在device上。
典型的CUDA代码执行流程:
a.将数据从Host端copy到Device端。
b.在Device上执行kernel。
c.将结果从Device段copy到Host端。
以上流程也是模型在GPU推理的过程。在执行的过程中还需要绑定CUDA Stream,以流的形式执行。
2.2 传统Python推理服务瓶颈
2.2.1 传统Python推理服务架构
由于Python在神经网络训练与推理领域提供了丰富的库支持,加上Python语言自身的便利性,所以推理服务大多用Python实现。CV算法的推理引擎大多采用Python flask框架或Kserve的框架直接实现。这种框架大致调用流程如下:

本文介绍了如何通过Python的CPU与GPU进程分离及使用TensorRT对模型进行优化,提升线上推理服务的QPS,减少了成本。自研的框架实现了CPU与GPU的自动隔离,并提供了TensorRT模型转换的调试工具。通过这些方法,部分模型服务的QPS提升了5-10倍。文章还分享了优化技巧,如开启半精度优化和同模型混合部署等。
最低0.47元/天 解锁文章
438

被折叠的 条评论
为什么被折叠?



