AI 平台/部署

使用 NVIDIA TensorRT for RTX 运行高性能 AI 应用

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 应用能够在消费级设备上实现实用性和高性能。

视频 1。借助 TensorRT for RTX 缩短引擎构建时间,同时提供峰值性能

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 中实现动态形状的主要优势在于,可以动态生成特定形状的内核。这些专用内核在后台线程中进行编译,而 初始推理请求则使用后备内核提供服务。运行时在准备就绪时自动选择形状专用内核,从而根据用例进行性能优化。

A line graph showing GPU processing time on the Y-axis and Step Number on the X axis when using Dynamic Shapes. Step Number 1 shows a GPU processing time of 270ms, and steps 2 through 50 show a processing time of 100ms.
图 1。在稳定状态下 (使用形状专用内核) 执行 FLUX.1-dev transformer 模型的速度比第一次迭代 (使用后备内核) 快 60%。这种免费的性能提升无需更改任何代码

如需详细了解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 架构,这有助于减小引擎大小并缩短构建时间。

Bar chart showing size reduction of engine files across different compute capability specifications. Compute capabilities 8.6, 8.9, and 12.0 show a reduction of 28.3 MB. Compute capabilities 8.9 and 12.0 show a reduction of 33.9 MB. Compute capability 12.0 shows a reduction of 39.4 MB.
图 2。引擎尺寸减小 (越小越好) ,通过专门化编译以逐渐减少 GPU 计算能力来实现
Bar chart showing compilation time reduction of engines across different compute capability specifications. Compute capabilities 8.6, 8.9, and 12.0 show a reduction of 16.2%. Compute capabilities 8.9 and 12.0 show a reduction of 22%. Compute capability 12.0 shows a reduction of 28.3%.
图 3。图例展示了在将编译专门化为逐渐减少的 GPU 计算能力时,AOT 优化所花费的时间 (越小越好)

例如,要构建可在 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 频道与我们联系。

 

 

标签