背景
场景介绍
性能指标
优化内容
内存拷贝相关逻辑:
TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可对多种应用场景进行推理加速,并且支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架。将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。
如下图,简单展示了CUDA Graphs的优势。在顶部,CPU 逐个启动一系列短内核。CPU 启动开销导致内核之间出现明显间隙。如果我们用 CUDA 图替换此内核序列,最初我们需要花费一些额外的时间来构建图并在第一次启动整个图时一次性启动整个图,但后续执行将非常快,因为内核之间的间隙将非常小。当多次重复相同的操作序列时,例如在许多训练步骤中重复,差异会更加明显。
但是要注意,由于 CUDA Graphs 不支持动态控制流(如条件语句和循环),因此在设计算法时应尽量避免使用这些结构;其次,确保输入张量的形状在图创建时是固定的,因为 CUDA Graphs 的设计是基于静态形状的张量结构,创建 Graph 时,所有操作及其输入输出的形状必须在图创建时确定。
而ViT模块在进行图像处理时,输入的图像数张量的形状是 [batch_size, channel, width, height],其中batch_size是可变的且各视觉模型均已限定最大值。于是,我们在框架内部维护了Graphs Pool,推理时使用batch_size索引至相应的graph,再执行重放操作。
增加CUDA Graphs后ViT模块平均耗时减少30ms左右。虽然CUDA Graphs可以在一定程度上提升推理的效率,但是在构建graphs也需要占用一些额外的显存,在使用时需要综合衡量具体的业务场景及硬件资源。
总结:在实际使用中对于W4A16量化后的模型来说,模型占用的显存一定能节省。但是推理的整体性能和吞吐量,需要根据不同的任务特点,部署的硬件环境,调整部署的参数,以达到最优。而不是量化后的整体性能一定会优于未量化的模型。
优化数据
图 18:LMDeploy-0.6.0优化前后召回率和吞吐量比较
作者简介:徐海芳、李海洋、朱辰、张辉,MPai平台视觉理解大模型推理团队