使用 TensorRT 加速模型推理

💡 原文中文,约7200字,阅读约需18分钟。
📝

内容提要

TensorRT是一个用于在NVIDIA GPU上进行高性能推理加速的C++库,支持主流深度学习框架如Caffe、TensorFlow、PyTorch和MXNet。TensorRT通过优化原理提高推理性能,包括合并层、量化、kernel自动调优、动态张量显存和多流并行。转换PyTorch模型为ONNX格式可使用trace或script方法,转换TensorFlow模型需要先转为pb格式再转为TensorRT。转换模型为TensorRT需要下载模型、转换脚本和安装相关依赖。使用TensorRT-LLM进行转换可以获得更好的转换成功率和效率。

🔎

延伸解读

TensorRT 的适用边界

TensorRT 是专为 NVIDIA GPU 设计的推理加速库,不适用于其他厂商的硬件。同时,其核心运行时库 libnvinfer.so 是闭源的,只有周边库和 API 开源。这意味着如果你需要跨平台部署或深度定制底层,可能会受到限制。

优化手段的实际影响

TensorRT 通过合并层、量化、kernel 自动调优、动态张量显存和多流并行来提升性能。其中量化能降低精度以减少显存占用和提升速度,但可能带来精度损失;合并层则减少内核启动和内存读写,直接针对推理时的带宽瓶颈。

模型转换的路径选择

PyTorch 模型需先转 ONNX,可用 trace 或 script 方法:trace 导出静态图效率高但无法处理控制流,script 能解析所有计算过程。TensorFlow 模型则需先转 pb 再转 uff,最后转 TensorRT。转换过程常遇到算子不支持等问题,需调试。

大模型转换的实践建议

对于大模型,使用 TensorRT-LLM 进行转换比通用 TensorRT 更优,不仅成功率和效率更高,还便于后续与 Triton 集成部署。文章示例中,ChatGLM2-6B 通过 TensorRT-LLM 转换后,引擎文件约 12GB,并提供了性能测试数据供参考。

❓

Q&A

TensorRT 是什么?它支持哪些深度学习框架?

TensorRT 是一个用于在 NVIDIA GPU 上进行高性能推理加速的 C++ 库,提供 C++ 和 Python API。它支持 Caffe、TensorFlow、PyTorch 和 MXNet 等主流深度学习框架。

TensorRT 如何优化推理性能?

TensorRT 通过合并层、量化、kernel 自动调优、动态张量显存和多流并行等优化原理提高推理性能。

如何将 PyTorch 模型转换为 ONNX 格式?

将 PyTorch 模型转换为 ONNX 格式需要调用 torch.onnx.export 函数,有两种方法:trace(跟踪法)通过实际运行模型导出静态图,但无法识别控制流;script(脚本法)通过解析模型记录所有计算过程。

TensorFlow 模型如何转换为 TensorRT?

TensorFlow 模型需先转为 pb 格式,再转为 uff 格式,最后转为 TensorRT。因为 pb 格式体积更小,但计算图优化不如 uff 好,效率低。

使用 TensorRT-LLM 转换大模型有什么优势?

使用 TensorRT-LLM 进行转换可以提高转换成功率和效率,并且转换后更好部署与 Triton 集成。

TensorRT 支持多流并行吗?如何提高 GPU 利用率?

TensorRT 支持在同一个 GPU 上执行多个 Stream,同时操作,提高 GPU 的利用率。

🏷️

标签

➡️

继续阅读