快捷方式

转换阶段

图表被简化为易于转换的形式后,我们就设置一个转换上下文来管理从块节点构建 TensorRT 的 INetworkDefinition。转换上下文记录了已转换节点、块输入和输出以及有关图表转换的其他信息。然后,这些数据用于帮助转换器将层链接在一起,并保存构建引擎所需信息的构建时间信息(例如权重)。创建上下文后,块转换器开始遍历节点列表,对于每个节点,转换器会查看其输入,并组装一个资源数组传递给转换器。输入可以处于几种状态:

  • 输入是块参数

    • 在这种情况下,输入应该已经作为 IValue 存储在转换上下文的 evaluated_value_map 中。转换阶段会将 IValue 添加到转换器的参数列表中。

  • 输入是已转换节点的输出

    • 在这种情况下,输出的 ITensor 已添加到 value_tensor_map 中,转换阶段会将 ITensor 添加到转换器的参数列表中。

  • 输入来自产生静态值的节点

    • 有些节点会产生静态值,通常用于存储操作的参数,我们需要在转换时评估这些节点,以便能够转换一个操作。转换系统会在评估器注册表中查找节点评估器并对其进行运行。产生的 IValue 将被输入到转换上下文 evaluated_value_map 中,并添加到转换器的参数列表中。如果需要评估的节点有输入,转换阶段将递归地解析依赖项,直到最终静态值被评估为止。

  • 输入来自尚未转换的节点

    • Torch-TensorRT 将在此处报错。

节点评估

有些节点包含静态数据,是操作的资源。这些节点可以在转换时进行评估,以便在进行节点转换时可以使用这些值。理论上,任何节点类型都可以有一个转换时评估器,只要它产生一个静态 IValue。这个 IValue 将存储在转换上下文中,以便任何将已评估节点作为输入的节点都可以使用它。常见的节点类型是 prim::Constant,它输出一个常量,以及 prim::ListConstruct,它创建列表。

节点转换器

节点转换器将 JIT 节点映射到层或层子图。然后,它们将 JIT 图和 TRT 图的输出在转换上下文中关联起来。这使得转换阶段可以组装下一节点的输入。在某些情况下,节点产生的输出不是 Tensor,而是对输入进行计算得到的静态结果,需要先进行转换。在这种情况下,转换器可能会将输出关联到 evaluated_value_map 中,而不是 value_tensor_map。有关更多信息,请参阅:writing_converters

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源