TensorRT 全局性能调优器:第二部分
来自 NVIDIA Developer · 期号 2026-10-24
摘要
TensorRT 11.1 的 Global Performance Tuner 把编译器的调度策略拆成可搜索的构建路线,每条路线是一组编译器开关的组合。 trtexec 实现了一个调优循环:把用户给出的路线表达式展开成具体路线,逐一构建并测量,剔除构建崩溃或精度不合格的候选,最后选出实测最快的引擎。 精度感知调优把精度当作筛选条件、性能当作排序依据,两者不再纠缠。在十个测试负载上,调优比默认路线带来了 1.14 倍到 1.63 倍的端到端性能提升。 最佳实践包括:选择与搜索空间匹配的搜索策略、用 --dryRun 预览路线再构建、通过 --tuningCacheFile 和 --continue 实现增量可恢复调优,以及在模型、形状、目标 GPU 或软件栈变化后重新调优。 本文是技术详解,附了 C++ API 和开源实现参考。
深读
导读 TensorRT 11.1 的 Global Performance Tuner 将编译器的调度策略拆解为可搜索的“构建路线”,每条路线是一组编译器开关的组合。本文详解了其算法设计、精度感知调优机制以及最佳实践,读完能理解如何通过自动化调优为特定模型、形状和硬件找到比默认路线快 1.14 到 1.63 倍的推理引擎。 关键信息 - TensorRT 11.1 提供了超过 200 个可调优的编译器开关(knob),每个开关有有限的可选值和默认值。 - 一个“构建路线”是这些开关值的一个具体组合;当未指定时,TensorRT 使用所有开关保留默认值的“默认构建路线”。 - 在十个测试负载上,调优带来的端到端性能提升范围是 1.14 倍到 1.63 倍(相对于默认路线)。 - 精度感知调优将精度作为筛选条件(决定哪些候选路线可接受),将性能作为排序依据(在可接受路线中选最快的),从而解耦了性能与精度。 - 调优支持增量可恢复:通过 --tuningCacheFile 记录每次迭代的结果,中断后可用 --continue 从记录状态恢复。 - 最佳构建路线是模型、输入形状、目标 GPU、软件栈和 TensorRT 版本特定的,变更任一条件后应重新调优。 逐节讲解 核心设计:将调度策略表示为可搜索的构建路线 Global Performance Tuner 的核心思想是将编译器中替代性的调度策略显式表示为可搜索的“构建路线”。一个编译器开关(knob)是改变编译流程某方面行为的配置项,例如启发式策略、融合决策或代码生成路径。每个可调优的开关有一组有限的可选值和一个默认值。一条构建路线就是这些开关值的一个具体组合。 文章用一个三遍编译器(f1, f2, f3)的假设例子说明:如果 f2 有一个二进制开关 p 控制融合策略(p=1 水平融合,p=0 垂直融合),那么两种 p 值就定义了两条构建路线。没有哪种融合策略是普遍更优的,结果可能因模型、张量形状甚至目标 GPU 而异,因此需要实际构建并测量两条候选路线才能选出更快的那个。 在实现层面,开关组合是构建路线的“规格说明”,而非对最终引擎的完整描述。TensorRT 仍会执行引擎构建的其余阶段(包括策略选择),并可能协调个别开关值与网络施加的约束。TensorRT 11.1 为此暴露了三个 C++ API:setBuildRoute(应用固定路线)、getBuildRoute(查看当前路线)、getAllBuildRoutes(发现所有可调优开关及其允许值和默认值)。 调优循环与精度感知 trtexec 实现了调优循环:用户指定一个输入模型和一个类似正则表达式的可调优构建路线表达式,工具将其展开为具体路线列表,然后遍历每条路线,在每次迭代中构建模型并测量精度和性能。所有构建崩溃或推理时精度不合格的路线被排除,最终选…