torch2trt
torch2trt 是一款专为开发者设计的开源工具,旨在简化将 PyTorch 深度学习模型转换为 NVIDIA TensorRT 引擎的过程。它主要解决了模型在边缘设备(如 Jetson 系列)或高性能 GPU 上部署时,难以兼顾开发灵活性与推理速度的痛点。通过转换,模型能够获得显著的加速效果,实测数据显示,在多种经典网络架构上,其推理吞吐量相比原生 PyTorch 可提升数倍甚至十倍以上。
这款工具特别适合需要在嵌入式设备或生产环境中优化模型性能的 AI 工程师和研究人员使用。它的核心亮点在于极高的易用性与扩展性:用户只需调用一个简单的 torch2trt 函数并传入示例数据,即可完成模型转换;同时,它还支持通过 Python 装饰器轻松注册自定义算子,方便开发者针对特定模型结构进行扩展。此外,转换后的模型可以像普通 PyTorch 模块一样直接执行,并支持标准的保存与加载流程,无缝融入现有的开发工作流。虽然其对算子的覆盖范围主要集中在常用模型,但对于追求高效推理的团队而言,torch2trt 无疑是一个实用且高效的桥梁。
使用场景
某自动驾驶初创团队正在将基于 PyTorch 训练的行人检测模型部署到 NVIDIA Jetson Xavier 边缘计算设备上,以满足实时路况分析需求。
没有 torch2trt 时
- 推理延迟过高:原始 PyTorch 模型在 Xavier 上的帧率仅为 55 FPS,难以满足高速移动场景下毫秒级的响应要求。
- 优化门槛极高:团队需深入研读复杂的 TensorRT C++ API 文档,手动重写网络结构,开发周期从几天延长至数周。
- 调试成本巨大:手动转换过程中极易出现算子不支持或精度对齐问题,排查错误耗时耗力且缺乏直观反馈。
- 资源利用率低:未针对硬件深度优化的模型无法充分释放 GPU 算力,导致设备功耗高而性能产出低。
使用 torch2trt 后
- 推理速度倍增:仅需几行代码调用
torch2trt完成转换,模型帧率从 55 FPS 飙升至 312 FPS,轻松实现超低延迟实时检测。 - 开发流程极简:无需触碰底层 C++ 代码,直接复用现有 PyTorch 模块,将原本数周的移植工作压缩至小时级完成。
- 精度验证便捷:工具支持直接对比 PyTorch 与 TensorRT 的输出差异,一键确认数值误差在允许范围内,大幅降低调试难度。
- 部署灵活高效:转换后的模型可保存为标准状态字典文件,像普通 PyTorch 模型一样随时加载运行,无缝集成至现有流水线。
torch2trt 通过“一键式”转换能力,让算法工程师无需成为系统专家,即可在边缘设备上获得极致的推理性能。
运行环境要求
- Linux
- 必需 NVIDIA GPU
- 桌面端需安装 TensorRT
- Jetson 系列(Nano, Xavier 等)需安装包含 TensorRT Python API 的最新版 JetPack
- 具体显存大小取决于模型,未明确指定最低要求
未说明

快速开始
torch2trt
您正在使用或希望使用哪些模型与 TensorRT 配合?欢迎加入讨论 这里。
torch2trt 是一个基于 TensorRT Python API 的 PyTorch 到 TensorRT 转换器。该转换器具有以下特点:
易于使用 - 仅需调用单个函数
torch2trt即可转换模块。易于扩展 - 您可以用 Python 编写自己的层转换器,并使用
@tensorrt_converter注册它。
如果您发现任何问题,请 告知我们!
请注意,此转换器对 TensorRT 和 PyTorch 的支持范围有限。我们主要创建它是为了方便优化 JetBot 项目中使用的模型。如果您发现该转换器对其他模型也有帮助,请 告知我们。
使用方法
以下是一些使用示例,更多内容请参阅 notebooks。
转换
import torch
from torch2trt import torch2trt
from torchvision.models.alexnet import alexnet
# 创建一个普通的 PyTorch 模型...
model = alexnet(pretrained=True).eval().cuda()
# 创建示例数据
x = torch.ones((1, 3, 224, 224)).cuda()
# 使用示例数据作为输入将模型转换为 TensorRT
model_trt = torch2trt(model, [x])
执行
我们可以像执行原始 PyTorch 模型一样执行返回的 TRTModule。
y = model(x)
y_trt = model_trt(x)
# 将输出与 PyTorch 进行比较
print(torch.max(torch.abs(y - y_trt)))
保存和加载
我们可以将模型保存为 state_dict。
torch.save(model_trt.state_dict(), 'alexnet_trt.pth')
然后可以将保存的模型加载到 TRTModule 中。
from torch2trt import TRTModule
model_trt = TRTModule()
model_trt.load_state_dict(torch.load('alexnet_trt.pth'))
模型
我们使用 test.sh 脚本对这些模型进行了测试。您可以通过运行以下命令生成结果:
./test.sh TEST_OUTPUT.md
下面的结果显示了以 FPS 为单位的吞吐量。包含延迟在内的原始输出可以在 benchmarks 文件夹 中找到。
| 模型 | Nano (PyTorch) | Nano (TensorRT) | Xavier (PyTorch) | Xavier (TensorRT) |
|---|---|---|---|---|
| alexnet | 46.4 | 69.9 | 250 | 580 |
| squeezenet1_0 | 44 | 137 | 130 | 890 |
| squeezenet1_1 | 76.6 | 248 | 132 | 1390 |
| resnet18 | 29.4 | 90.2 | 140 | 712 |
| resnet34 | 15.5 | 50.7 | 79.2 | 393 |
| resnet50 | 12.4 | 34.2 | 55.5 | 312 |
| resnet101 | 7.18 | 19.9 | 28.5 | 170 |
| resnet152 | 4.96 | 14.1 | 18.9 | 121 |
| densenet121 | 11.5 | 41.9 | 23.0 | 168 |
| densenet169 | 8.25 | 33.2 | 16.3 | 118 |
| densenet201 | 6.84 | 25.4 | 13.3 | 90.9 |
| densenet161 | 4.71 | 15.6 | 17.2 | 82.4 |
| vgg11 | 8.9 | 18.3 | 85.2 | 201 |
| vgg13 | 6.53 | 14.7 | 71.9 | 166 |
| vgg16 | 5.09 | 11.9 | 61.7 | 139 |
| vgg19 | 54.1 | 121 | ||
| vgg11_bn | 8.74 | 18.4 | 81.8 | 201 |
| vgg13_bn | 6.31 | 14.8 | 68.0 | 166 |
| vgg16_bn | 4.96 | 12.0 | 58.5 | 140 |
| vgg19_bn | 51.4 | 121 |
安装
注意:torch2trt 依赖于 TensorRT 的 Python API。在 Jetson 上,这已包含在最新的 JetPack 中。对于桌面端,请按照 TensorRT 安装指南 进行安装。您也可以尝试在 NGC 的 PyTorch Docker 容器中安装 torch2trt,适用于 桌面 或 Jetson。
第一步 - 安装 torch2trt Python 库
要安装 torch2trt Python 库,请执行以下操作:
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python setup.py install
第二步(可选)- 安装 torch2trt 插件库
要安装 torch2trt 插件库,请执行以下命令:
cmake -B build . && cmake --build build --target install && ldconfig
这包括对某些可能未被 TensorRT 原生支持的层的支持。一旦系统中找到此库,torch2trt 中相关的层转换器就会自动启用。
注意:现在 torch2trt 将插件维护为一个独立的库,并使用 CMake 进行编译。这使得编译后的 TensorRT 引擎更具可移植性。如果需要,仍然可以通过运行
python setup.py install --plugins来安装已弃用的插件(这些插件依赖于 PyTorch)。
第三步(可选)- 安装实验性的社区贡献功能
要安装带有实验性社区贡献功能的 torch2trt(位于 torch2trt.contrib 中),例如量化感知训练 (QAT)(需要 TensorRT>=7.0),请执行以下操作:
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt/scripts
bash build_contrib.sh
这将使您能够运行位于 此处 的 QAT 示例。
工作原理
该转换器通过将转换函数(如 convert_ReLU)附加到原始的 PyTorch 函数调用(如 torch.nn.ReLU.forward)来工作。示例输入数据会像以前一样通过网络传递,但每当遇到已注册的函数(torch.nn.ReLU.forward)时,相应的转换器(convert_ReLU)也会被调用。转换器会接收原始 PyTorch 函数的参数和返回值,以及正在构建的 TensorRT 网络。原始 PyTorch 函数的输入张量会被修改,添加一个 _trt 属性,该属性是 PyTorch 张量对应的 TensorRT 版本。转换函数会利用这个 _trt 属性向 TensorRT 网络中添加层,并为相关的输出张量设置 _trt 属性。当模型完全执行完毕后,最终的输出张量会被标记为 TensorRT 网络的输出,随后构建优化后的 TensorRT 引擎。
如何添加(或覆盖)转换器
下面我们展示如何使用 TensorRT 的 Python API 为 ReLU 模块添加一个转换器。
import tensorrt as trt
from torch2trt import tensorrt_converter
@tensorrt_converter('torch.nn.ReLU.forward')
def convert_ReLU(ctx):
input = ctx.method_args[1]
output = ctx.method_return
layer = ctx.network.add_activation(input=input._trt, type=trt.ActivationType.RELU)
output._trt = layer.get_output(0)
该转换器接受一个参数,即 ConversionContext 对象,其中包含以下内容:
ctx.network- 当前正在构建的 TensorRT 网络。ctx.method_args- 传递给指定 PyTorch 函数的位置参数。相关输入张量会设置_trt属性。ctx.method_kwargs- 传递给指定 PyTorch 函数的关键字参数。ctx.method_return- 指定 PyTorch 函数返回的值。转换器需要在适当的地方设置_trt属性。
更多示例请参阅 此文件夹。
参阅
版本历史
v0.5.02024/05/03v0.4.02022/07/22v0.3.02021/07/15v0.2.02021/03/02v0.0.02019/06/21常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。