NVIDIA TensorRT for RTX 现可作为 SDK 下载,该 SDK 可集成到 Windows 和 Linux 的 C++ 和 Python 应用中。在 Microsoft Build 上,我们推出了这款用于高性能 AI 推理的精简解决方案,支持从 NVIDIA Turing 到 NVIDIA Blackwell 各代产品 (包括最新的 NVIDIA RTX PRO 系列) 的 NVIDIA GeForce RTX GPU。
此首个版本可为各种工作负载(包括卷积神经网络(CNN)、语音模型和扩散模型)提供高性能推理。TensorRT for RTX 是创意、游戏和生产力应用的理想选择。我们还有一个 GitHub 项目资源库,其中包含入门 API 示例和演示,可帮助开发者快速入门。
什么是 TensorRT for RTX?
TensorRT for RTX 基于 NVIDIA TensorRT 推理库的成熟性能构建,但简化了 NVIDIA RTX GPU 上的 AI 模型在台式机、笔记本电脑和工作站中的部署。
TensorRT for RTX 是 NVIDIA TensorRT 的直接替代品。TensorRT for RTX 在运行时中引入了即时 (JIT) 优化器,可直接在最终用户的 RTX 加速 PC 上编译改进的推理引擎。这消除了漫长的预编译步骤,并实现了快速引擎生成、改进的应用程序可移植性、部署工作流程和运行时性能,从而实现了较高的推理速度。
为了支持在内存受限的环境中集成轻量级应用程序和进行部署,TensorRT for RTX 是一款紧凑型产品,不到 200 MB。
这使得用于图像处理、语音合成和生成式 AI 的响应式实时 AI 应用能够在消费级设备上实现实用性和高性能。
TensorRT for RTX SDK 包括:
- 支持 Windows (zip) 和 Linux (tar)
- 用于 C++ 开发的 Header files
- 用于快速原型设计的 Python 绑定
- 用于部署的Optimizer和runtime library
- 用于导入 ONNX 模型的 Parser 库
- 用于简化部署和基准测试的开发者工具
有关下载和安装 TensorRT for RTX SDK 的信息,请参阅安装指南。
TensorRT for RTX 的主要特性
用于 RTX 优化的 TensorRT 分为两个阶段。
- 第 1 阶段:在 Ahead-Of-Time (AOT) 优化中,模型图形得到改进并转换为可序列化部署的引擎。
- 第 2 阶段:在运行时,JIT 优化器专门用于在已安装的 RTX GPU 上执行引擎。
请参阅我们的 helloWorld 示例,了解此优化和部署工作流程。
对于 ONNX 模型部署,我们还提供了一个命令行工具 tensorrt_rtx,用于为 RTX 引擎构建和分析 TensorRT。请参阅文档了解详情。
其他新功能可以更好地控制部署工作流程,并提高现实世界应用的性能。以下是其中一些进展的简要概述。
动态形状
动态形状功能可将为网络输入和输出指定部分或全部tensor维度的时间推迟到运行时。
通过将 -1
分配给其大小来指定动态维度。
auto input = network->addInput("input", nvinfer1::DataType::kFLOAT, nvinfer1::Dims2{-1, kInputSize});
必须在构建器配置中指定描述输入维度动态范围的Optimization profile(s)。
nvinfer1::IOptimizationProfile* profile = builder->createOptimizationProfile();
profile->setDimensions("input", nvinfer1::OptProfileSelector::kMIN, nvinfer1::Dims2(1, kInputSize));
profile->setDimensions("input", nvinfer1::OptProfileSelector::kOPT, nvinfer1::Dims2(4, kInputSize));
profile->setDimensions("input", nvinfer1::OptProfileSelector::kMAX, nvinfer1::Dims2(32, kInputSize));
builderConfig->addOptimizationProfile(profile);
在运行时,创建执行上下文时,JIT 优化会生成后备内核,这些内核可以对整个输入形状范围运行推理。在推理之前,必须选择所有动态维度的所需优化配置文件和运行时形状。
context->setOptimizationProfileAsync(0, stream);
context->setInputShape("input", nvinfer1::Dims2(1, kInputSize));
与 TensorRT 相比,在 TensorRT for RTX 中实现动态形状的主要优势在于,可以动态生成特定形状的内核。这些专用内核在后台线程中进行编译,而 初始推理请求则使用后备内核提供服务。运行时在准备就绪时自动选择形状专用内核,从而根据用例进行性能优化。

如需详细了解dynamic shapes,请参阅文档。
运行时缓存
运行时缓存可用于存储 JIT-compiled 内核,并使用运行时配置对象创建。
auto runtimeCache =
std::unique_ptr<nvinfer1::IRuntimeCache>(runtimeConfig->createRuntimeCache());
runtimeConfig->setRuntimeCache(*runtimeCache);
执行上下文将附加的runtime cache用于所有推理执行,并将新的JIT-compiled kernels附加到缓存中。或者,可以将缓存序列化为文件,以在应用程序调用和安装过程中保持持久性,从而避免JIT重新编译。这可缩短应用程序启动时间,并实现开箱即用的峰值性能。
auto serializedRuntimeCache =
std::unique_ptr<nvinfer1::IHostMemory>(runtimeCache->serialize());
如需了解有关runtime cache的更多信息,请参阅文档。
无 GPU 的 AOT
适用于 RTX AOT 优化引擎的 TensorRT 可在 NVIDIA Ampere、Ada 和 Blackwell 架构的 NVIDIA RTX GPU 上运行 (请参阅完整的支持矩阵) ,并且无需 GPU 即可构建。如果不需要广泛的可移植性,开发者可以使用 TensorRT for RTX 计算能力 API 来限制用于部署的目标 NVIDIA RTX GPU 架构,这有助于减小引擎大小并缩短构建时间。


例如,要构建可在 Ada 和 Blackwell RTX GPU 上运行的引擎,可以使用构建器配置将相应的 SM 版本显式枚举为构建目标。查看 NVIDIA RTX GPU 及其计算能力的完整列表。
builderConfig->setNbComputeCapabilities(2);
builderConfig->setComputeCapability(nvinfer1::ComputeCapability::kSM89, 0);
builderConfig->setComputeCapability(nvinfer1::ComputeCapability::kSM120, 1);
TensorRT for RTX 还可以自动查询 GPU 功能,并构建针对该功能优化的引擎。这是通过将 kCURRENT
指定为计算能力目标来完成的。
builderConfig->setNbComputeCapabilities(1);
builderConfig->setComputeCapability(nvinfer1::ComputeCapability::kCURRENT, 0);
适用于 RTX API 的 TensorRT 是强类型的,这意味着在优化期间无法更改模型图形中表示的运算精度。但是,某些精度仅在较新的 GPU 架构中受支持。对于使用它们的网络,计算能力目标 (如果指定) 必须限于这些 GPU 架构 (请参阅支持矩阵) 。例如:
- FP4 仅在 NVIDIA Blackwell (SM120) 及以上版本上受支持。
- FP8 仅在 NVIDIA Ada (SM89) 及以上版本上受支持。
如需了解有关 AOT 优化的更多信息,请参阅文档。
失重式引擎和改装
TensorRT for RTX 支持无权重构建引擎。如果权重也与引擎一起发送 (例如,作为 ONNX 模型) ,这有助于最大限度地减小应用程序包的配送大小。
在构建weight-stripped引擎时,还必须将其标记为refittable,以便稍后更新。
builderConfig->setFlag(nvinfer1::BuilderFlag::kSTRIP_PLAN);
builderConfig->setFlag(nvinfer1::BuilderFlag::kREFIT);
在推理过程中,可使用 Refitter 对象为 weightless 引擎加油。
auto refitter = std::unique_ptr<nvinfer1::IRefitter>(
nvinfer1::createInferRefitter(*inferenceEngine, logger));
refitter->setNamedWeights("fc1 weights", fc1Weights);
refitter->setNamedWeights("fc2 weights", fc2Weights);
refitter->refitCudaEngine();
如需了解有关weightless engines和refit的更多信息,请参阅文档。
查看我们的 apiUsage 示例,了解所有这些新功能的实际应用。
开始使用 TensorRT for RTX 进行构建
开发者可以下载 SDK,在 GitHub 上探索代码示例,并深入了解我们的文档以开始使用。
有关实际示例,请查看我们使用 TensorRT for RTX 实现 FLUX.1 [dev] 加速的演示。
有关更多详细信息,请参阅我们的文档,包括 TensorRT 应用的移植指南和性能最佳实践。
我们期待收到您的反馈。在我们的 GitHub 问题页面或 TensorRT for RTX 开发者论坛上分享您的反馈、提问或开始讨论。您也可以通过我们的 Discord 频道与我们联系。