TensorRT多卡并行

这次做TensorRT的多卡并行加速积累了一些经验教训


概念

device: GPU
host:cpu
engine: TensorRT优化得到的模型,里面保存有关此模型的所有信息(比如权重,输入输出的名字/维度)
context:由engine生成,用于实际的推理。一个engine可以拥有多个context,这是为了方便同一个模型权重用于不同的任务。
stream:cuda 流,用于控制异步cuda操作

遇到的问题

问题 一
0卡上的一个context前向没问题,但是1卡上的有问题,报错“cuda error in cupointwisev2::launchpwgenkernel: 400 (invalid resource handle”。根据下面的描述是因为context绑定的GPU和实际运行的GPU不一致,但是我确定是一致的。

原因 :我的操作时一个待优化模型通过一次反序列化生成一个engine,然后这个engine分别在两个显卡上生成两个context;

正确操作:一个待优化模型通过两次反序列化分别在两个显卡上生成两个engine,两个engine分别在各自的显卡上生成自己的context

问题 二
并行加速效果极差,具体表现是平均每幅图的耗时减少距离预期(两张卡减少50%)

原因 调试发现耗时在CPU上转化以及数据传输上,CPU char ->CPU float-> GPU float

解决方案:CPU char ->GPU char-> GPU float

你可能感兴趣的:(TensorRT,深度学习,计算机视觉,人工智能)