GPU推理服务性能优化之路 | 得物技术

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

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的框架直接实现。这种框架大致调用流程如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值