快捷方式

系統概述

Torch-TensorRT 主要是一個 C++ 庫,並計劃提供 Python API。我們使用 Bazel 作為構建系統,目前主要針對 Linux x86_64 和 Linux aarch64(僅原生支援)。我們使用的編譯器是 GCC 7.5.0,該庫尚未在早於此版本的編譯器上進行測試,因此如果您嘗試使用舊版本編譯器,可能會出現編譯錯誤。

倉庫結構如下

  • core: 主要編譯器原始碼

  • cpp: C++ API

  • tests: C++ API、核心和 Converter 的測試

  • py: Python API

  • notebooks: 使用 Torch-TensorRT 構建的示例應用

  • docs: 文件

  • docsrc: 文件原始檔

  • third_party: 依賴庫的 BUILD 檔案

  • toolchains: 不同平臺的 Toolchain

C++ API 尚不穩定,在庫成熟之前可能會發生變化,但大部分工作都在核心內部進行。

核心包含幾個主要部分:頂層編譯器介面,負責協調模組的攝取、Lowering、轉換以及生成新模組並將其返回給使用者。編譯器有三個主要階段:Lowering 階段、轉換階段和執行階段。

編譯器階段

Lowering

Lowering 階段

Lowering 階段由一系列 Pass 組成(部分來自 PyTorch,部分特定於 Torch-TensorRT),這些 Pass 在圖 IR 上執行,將龐大的 PyTorch opset 對映到更容易轉換為 TensorRT 的精簡 opset。

Partitioning

Partitioning 階段

此階段是可選的,由使用者啟用。它指示編譯器將節點分離為應在 PyTorch 中執行的節點和應在 TensorRT 中執行的節點。分離的標準包括:缺少 Converter、使用者明確將 operator 設定為在 PyTorch 中執行,或者節點具有透過模組回退 Pass 告知 Partitioning 在 PyTorch 中執行的標誌。

轉換

轉換階段

在轉換階段,我們遍歷 Lowering 後的圖並構建等效的 TensorRT 圖。轉換階段由三個主要元件組成:用於管理編譯時資料的上下文、用於執行可在編譯時解析的操作的 Evaluator 庫,以及用於將 JIT 的 op 對映到 TensorRT 的 Converter 庫。

編譯與執行時

部署 Torch-TensorRT 程式

最終的編譯階段構建一個 TorchScript 程式來執行轉換後的 TensorRT Engine。它獲取一個序列化的 Engine,並在 Engine Manager 中例項化它,然後編譯器將構建一個引用此 Engine 並將其封裝在 Module 中的 JIT 圖,最後將其返回給使用者。當用戶執行該 Module 時,JIT 程式將在由 Torch-TensorRT 擴充套件的 JIT 執行時中執行,並使用使用者提供的資料。

文件

獲取 PyTorch 全面的開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源