tensorRT 与 torchserve-GPU性能对比

实验对比

前端时间搭建了TensorRT 、 Torchserve-GPU,最近抽时间将这两种方案做一个简单的实验对比。

实验数据

  • Cuda11.0Xeon® 6242 3.1*80RTX3090 24GResnet50
  • TensorRT 、Torchserve-GPU各自一张卡搭建10进程接口,感兴趣的可以查看我个人其他文章。
  • 30进程并发 、2000 张1200*720像素图像的总量数据
  • TensorRT 的部署使用了RTX3090 10进程
  • Torchserve-GPU的部署使用了RTX3090 10进程
  • Torchserve-CPU的部署使用了3台10核40线程的CPU服务器,每台10进程

实验一 TensorRT与Cuda加速对比

  • 输入普遍使用(1,224,224,3)的浮点张量
模型 torch(cpu) torch(gpu) onnx(cpu) onnx(gpu) TensorRT
resnet18 0.029 0.0024 0.004 - 0.0012
resnet50 0.08 0.0056 0.008 0.0030 0.0018
resnet101 0.16 0.010 0.018 0.0051 0.0032
resnet152 0.23 0.016 0.021 0.0074 0.0045
  • 结论:不同模型针对tensorrt的提速均在4-5倍左右。

实验二 TorchRT与Torchserve-gpu加速对比

  • 使用同一模型,输入不同的尺寸,尽量减少因为传输导致的耗时,使用单个数据的输入,测试单个数据的请求响应
框架 输入尺寸 耗时(s)
TensorRT+Flask 1200 720 0.14
torchserve-gpu 1200 720 0.05
torchserve-cpu 1200 720 0.28
TensorRT+Flask 224 224 0.018
torchserve-gpu 224 224 0.025
torchserve-cpu 224 224 0.19
TensorRT+Flask 10 10 0.009
torchserve-gpu 10 10 0.023
torchserve-cpu 10 10 0.16
* 结论:大尺寸图像的信息传输是导致tensorrt耗时较长的主要原因,torchserve-gpu底层为java要比我试验时用flask(python)效率要快。
当使用小尺寸图像,将耗时主要集中在模型推导时,tensorrt的优势就体现出来了。

实验三 多尺寸并发实验

  • 分配量两张RTX3090卡,一张卡部署tensorrt、一张卡部署torchserve-gpu
框架 框架进程 测试并发数 数据量 耗时(s) CPU
TensorRT+Flask 4 30 2000 1200*720 29s -
TensorRT+Flask 10 30 2000 1200 720 12.2s -
Torchserve-GPU 4 30 2000 1200*720 23 -
Torchserve-GPU 10 30 2000 1200*720 11.73 -
Torchserve-CPU 30 30 2000 1200*720 19.3 -
框架 框架进程 测试并发数 数据量 耗时(s) CPU
TensorRT+Flask 10 30 2000 224*224 3.3 34%
Torchserve-GPU 10 30 2000 224*224 6.83 21%
Torchserve-CPU 30 30 2000 224*224 13 48%
* 实验使用 2000张1200X720像素的图像数据、224X224像素的图像数据分别进行实验。
同时使用30并发测试2000份数据,明显可以看出tensorrt在模型方面的优势。

实验四 GPU分布并发实验

框架 框架进程 测试并发数 数据量 耗时(s) CPU
Torchserve-GPU(单卡/四卡) 4 30 2000 1200*720 23/19.9 -
Torchserve-GPU(单卡/四卡) 10 30 2000 1200*720 11.73/8.64 -
Torchserve-GPU(单卡/四卡) 20 30 2000 1200*720 未知/4.76 -
Torchserve-GPU(单卡/四卡) 4 30 2000 224*224 8.14/5.84 -
Torchserve-GPU(单卡/四卡) 10 30 2000 224*224 6.83/2.77 -
Torchserve-GPU(单卡/四卡) 10 30 2000 224*224 未知/2.15 -
  • 结论:这里主要对比了torchserve-gpu,多进程分布在一张卡要比多进程分布多张卡要慢一些。
  • 推测原因:多进程分布在一张卡,相互之间可能存在资源抢占,建议分布在多卡。
  • 推测:Tensorrt可能存在同样的问题,如果分布在多张卡,速度可再提升。

总结

  • TensorRT适合复杂模型,传输方面不会耗费太多资源的算法,如复杂模型推荐。
    不太适合大功率http传输的的算法、如cv,要不然大部分资源都浪费在了传输上。
    tensorRT主要还是针对模型前向推导的优化。
  • Torchserve-GPU 在前向推导方面逊色于TensorRT,但是模型搭建便捷。
    数据传输方面Torchserve-GPU内部应该有优化,搭建的flask+TensorRT可能存在传输效率问题。
  • Torchserve-CPU,CPU机器紧缺的情况下可以通过多点普通机器、做高并发,弥补模型推导的缺陷。

你可能感兴趣的:(计算机视觉,pytorch,python)