01
背景
02
场景介绍
场景一:长token输入、短token输出
场景二:长token输入、长token输出
03
性能指标
吞吐量:主要从系统的角度来看,即系统在单位时间内能处理的 tokens 数量。由于我们的主要场景是长输入token,短输出token,所以吞吐量的计算以单位时间内能处理的请求作为衡量指标,即模型推理的qpm。 时延:主要从用户的视角来看,即用户平均收到每个 token 所需的时间。计算方法为用户从发出请求到收到完整响应所需的时间除以生成序列长度。一般来讲,当时延不大于 50 ms/token 时,用户使用体验会比较流畅。
04
优化内容
4.1 图像预处理优化
CPU: Intel(R) Xeon(R) Silver 4410Y Python 3.10.12 Pillow 10.2.0 opencv_python 4.8.1.78 2000张不同分辨率图像
插值计算方式有差异:二者均使用4x4的卷积核进行插值计算,OpenCV直接使用三次多项式公式计算每个像素的权重,并对周围 16 个像素进行加权平均;而Pillow将三次卷积操作分解为两个一维卷积,先对水平方向进行卷积,然后再对垂直方向进行卷积。
边界处理的差异:OpenCV 供多种边界处理方式,例如 BORDER_REPLICATE, BORDER_REFLECT, BORDER_WRAP 等;Pillow通常使用边界复制的方式进行处理,即边缘像素值被复制到图像外部,以避免在边缘出现伪影。
4.2 ViT模块支持TensorRT
内存拷贝相关逻辑:
内存拷贝逻辑修改 lmdeploy/vl/engine.py 取消结果拷贝至cpu操作 lmdeploy/serve/vl_async_engine.py 取消拷贝到cpu及转换numpy操作 lmdeploy/pytorch/message.py中修改InputEmbeddings及类型为Torch.Tensor(GPU) 内存拷贝逻辑修改引起异常的分析
TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可对多种应用场景进行推理加速,并且支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架。将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。
4.3 ViT模块支持CudaGraph
如下图,简单展示了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也需要占用一些额外的显存,在使用时需要综合衡量具体的业务场景及硬件资源。
4.4 图像Token化处理
4.5 prefixcache在多模态模型里应用
4.6 模型量化
总结:在实际使用中对于W4A16量化后的模型来说,模型占用的显存一定能节省。但是推理的整体性能和吞吐量,需要根据不同的任务特点,部署的硬件环境,调整部署的参数,以达到最优。而不是量化后的整体性能一定会优于未量化的模型。
05
优化数据
评测模型:InternVL2-8B 数据集:信安群租房检测4524张图片 提示词:图中有3张以上的床,或者是有双层床,请直接给出是或者否,然后给出详细的解释。注意1张双层床有2张床 输出token数量:max_tokens=1 GPU: RTX4090 对比框架:LMDeploy-0.6.0 优化框架:LMDeploy-0.6.0优化版本 吞吐量:由于我们的场景是长输入token和短输出token,所以按单位时间内处理的请求数作为衡量指标。比较两个框架的推理QPM
图 18:LMDeploy-0.6.0优化前后召回率和吞吐量比较
