Shortcuts

系统概览

Torch-TensorRT 主要是一个 C++ 库,计划提供 Python API。我们使用 Bazel 作为构建系统,目前目标是 Linux x86_64 和 Linux aarch64(仅本地)。我们使用的编译器是 GCC 7.5.0,该库未在较早版本的编译器上进行测试,因此如果您尝试使用较旧的编译器,可能会出现编译错误。

仓库的结构如下:

  • core: 主编译器源代码

  • cpp: C++ API

  • 测试:C++ API、核心和转换器的测试

  • py: Python API

  • notebooks: 使用 Torch-TensorRT 构建的示例应用程序

  • 文档:文档

  • docsrc: 文档源

  • third_party: 依赖库的BUILD文件

  • 工具链:适用于不同平台的工具链

C++ API 不稳定,可能会在库成熟之前发生变化,尽管大部分工作是在核心内部完成的。

核心有几个主要部分:顶层编译器接口,负责协调模块的摄入、降低、转换和生成新模块,并将其返回给用户。编译器有三个主要阶段:降低阶段、转换阶段和执行阶段。

编译器阶段

降低

降低阶段

降低操作由一组传递组成(一些来自PyTorch,一些特定于Torch-TensorRT),这些传递在图形IR上运行,以将大型PyTorch操作集映射到更容易转换为TensorRT的简化操作集。

分区

分区阶段

该阶段是可选的,由用户启用。它指示编译器将节点分为应在PyTorch中运行的节点和应在TensorRT中运行的节点。 分离的标准包括:缺少转换器,操作符被用户明确设置为在PyTorch中运行,或者节点有一个标志,告诉分区通过模块回退传递在PyTorch中运行。

转换

转换阶段

在转换阶段,我们遍历降低后的图并构建一个等效的TensorRT图。 转换阶段由三个主要组件组成,一个用于管理编译时数据的上下文, 一个评估器库,它将执行可以在编译时解析的操作,以及一个转换器 库,它将操作从JIT映射到TensorRT。

编译和运行时

部署 Torch-TensorRT 程序

最终的编译阶段构建了一个TorchScript程序来运行转换后的TensorRT引擎。它接收一个序列化的引擎并在引擎管理器中实例化它,然后编译器将构建一个引用此引擎的JIT图,并将其包装在一个模块中以返回给用户。当用户执行该模块时,JIT程序在由Torch-TensorRT扩展的JIT运行时中运行,并使用用户提供的数据。