安装¶
预编译二进制文件¶
Torch-TensorRT 2.x 主要围绕 Python 构建。因此,预编译版本可以在 pypi.org 上找到
依赖项¶
您需要安装 CUDA、PyTorch 和 TensorRT(Python 包就足够)才能使用 Torch-TensorRT
安装 Torch-TensorRT¶
您可以使用以下方法安装 Python 包
python -m pip install torch torch-tensorrt tensorrt
为 x86 上的 Linux 和 Windows 上传了软件包
为特定 CUDA 版本安装 Torch-TensorRT¶
与 PyTorch 类似,Torch-TensorRT 针对不同版本的 CUDA 编译了构建版本。这些版本在 PyTorch 的软件包索引上发布
例如 CUDA 11.8
python -m pip install torch torch-tensorrt tensorrt --extra-index-url https://download.pytorch.org/whl/cu118
安装每日构建版本¶
Torch-TensorRT 发布了针对 PyTorch 每日构建版本的每日构建版本。这些版本可以从 PyTorch 每日构建版本软件包索引(按 CUDA 版本区分)安装
python -m pip install --pre torch torch-tensorrt tensorrt --extra-index-url https://download.pytorch.org/whl/nightly/cu124
C++ 预编译二进制文件(仅限 TorchScript)¶
发布版本的预编译 tarball 提供在以下位置:https://github.com/pytorch/TensorRT/releases
从源代码编译¶
在 Linux 上构建¶
依赖项¶
Torch-TensorRT 使用 Bazel 构建,因此首先安装它。
最简单的方法是使用您选择的任何方法安装 bazelisk https://github.com/bazelbuild/bazelisk
否则,您可以使用以下说明安装二进制文件 https://docs.bazel.build/versions/master/install.html
最后,如果您需要从源代码编译(例如,在 bazel 为该架构分发二进制文件之前,aarch64),可以使用以下说明
export BAZEL_VERSION=$(cat <PATH_TO_TORCHTRT_ROOT>/.bazelversion) mkdir bazel cd bazel curl -fSsL -O https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-dist.zip unzip bazel-$BAZEL_VERSION-dist.zip bash ./compile.sh cp output/bazel /usr/local/bin/
您还需要在系统上安装 CUDA(或者如果您在容器中运行,则系统必须安装 CUDA 驱动程序,并且容器必须安装 CUDA)
如果未使用正在构建的分支中使用的版本,请在此处指定您的 CUDA 版本:https://github.com/pytorch/TensorRT/blob/4e5b0f6e860910eb510fa70a76ee3eb9825e7a4d/WORKSPACE#L46
Bazel 将为您提取正确的 LibTorch 和 TensorRT 版本。
注意:默认情况下,bazel 将从 pytorch.org 中提取最新的每日构建版本。对于构建主分支,这通常就足够了,但是如果您要针对特定的 PyTorch 版本,请使用更新的 URL/路径编辑这些位置
TensorRT 不需要安装在系统上才能构建 Torch-TensorRT,实际上,这是为了确保可重复构建的最佳选择。如果需要使用除默认版本以外的版本,请将 WORKSPACE 文件指向 tarball 的 URL,或者从 https://developer.nvidia.com 下载 TensorRT 的 tarball,并更新 WORKSPACE 文件中的路径(位于此处 https://github.com/pytorch/TensorRT/blob/4e5b0f6e860910eb510fa70a76ee3eb9825e7a4d/WORKSPACE#L71)
例如
http_archive( name = "tensorrt", build_file = "@//third_party/tensorrt/archive:BUILD", sha256 = "<TENSORRT SHA256>", # Optional but recommended strip_prefix = "TensorRT-<TENSORRT VERSION>", urls = [ "https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/<TENSORRT DOWNLOAD PATH>", # OR "file:///<ABSOLUTE PATH TO FILE>/TensorRT-<TENSORRT VERSION>.Linux.x86_64-gnu.cuda-<CUDA VERSION>.tar.gz" ], )
请记住,在运行时,必须将这些库显式添加到您的
LD_LIBRARY_PATH
中
如果您有本地版本的 TensorRT 安装,也可以通过注释掉上述行并取消注释以下行来使用它 https://github.com/pytorch/TensorRT/blob/4e5b0f6e860910eb510fa70a76ee3eb9825e7a4d/WORKSPACE#L114C1-L124C3
构建软件包¶
正确配置 WORKSPACE 后,构建 torch-tensorrt 所需的全部操作就是执行以下命令
python -m pip install --pre . --extra-index-url https://download.pytorch.org/whl/nightly/cu124
如果您使用 uv
(https://docs.astral.sh/uv/) 工具来管理 python 和项目,则该命令会更简单一些
uv pip install -e .
要构建 wheel 文件
python -m pip wheel --no-deps --pre . --extra-index-url https://download.pytorch.org/whl/nightly/cu124 -w dist
其他构建选项¶
库中的某些功能是可选的,并允许构建更轻量级或更便携。
仅限 Python 的发行版¶
库中有多个功能需要启用 C++ 组件。这包括接受 TorchScript 模块进行编译的 TorchScript 前端,以及 Torch-TensorRT 运行时,这是 Torch-TensorRT 模块的默认执行器,无论是使用 TorchScript 还是 Dynamo 前端编译的。
如果您可能想要一个不需要 C++ 的构建版本,则可以禁用这些功能并避免构建这些组件。结果,唯一可用的运行时将是基于 Python 的运行时,这对序列化等功能有影响。
PYTHON_ONLY=1 python -m pip install --pre . --extra-index-url https://download.pytorch.org/whl/nightly/cu124
没有 TorchScript 前端¶
TorchScript 前端是 Torch-TensorRT 的一项旧功能,现已处于维护状态,因为 TorchDynamo 已成为该项目的首选编译器技术。它包含大量不再对大多数用户有用的 C++ 代码。因此,您可以从构建中排除此组件,以加快构建速度。基于 C++ 的运行时仍然可以使用。
NO_TORCHSCRIPT=1 python -m pip install --pre . --extra-index-url https://download.pytorch.org/whl/nightly/cu124
单独构建 C++ 库(仅限 TorchScript)¶
发布构建版本¶
bazel build //:libtorchtrt -c opt
包含头文件和库的 tarball 位于 bazel-bin
中
调试构建版本¶
要使用调试符号构建,请使用以下命令
bazel build //:libtorchtrt -c dbg
包含头文件和库的 tarball 位于 bazel-bin
中
预 CXX11 ABI 构建版本¶
要使用预 CXX11 ABI 构建,请使用 pre_cxx11_abi
配置
bazel build //:libtorchtrt --config pre_cxx11_abi -c [dbg/opt]
包含头文件和库的 tarball 位于 bazel-bin
中
选择正确的 ABI¶
编译 Torch-TensorRT 最复杂的事情可能是选择正确的 ABI。有两个彼此不兼容的选项:pre-cxx11-abi 和 cxx11-abi。复杂性来自这样一个事实,即虽然 PyTorch 最流行的发行版(从 pytorch.org/pypi 直接下载的轮子)使用 pre-cxx11-abi,但你可能会遇到的大多数其他发行版(例如来自 NVIDIA 的发行版 - NGC 容器,以及 Jetson 的构建以及某些 libtorch 构建,以及如果你从源代码构建 PyTorch,则可能使用 cxx11-abi。重要的是,你使用正确的 ABI 编译 Torch-TensorRT 以确保其正常运行。以下是 PyTorch 分发源和推荐命令的一般配对表。
PyTorch 源 |
推荐的 Python 编译命令 |
推荐的 C++ 编译命令 |
---|---|---|
来自 PyTorch.org 的 PyTorch whl 文件 |
python -m pip install . |
bazel build //:libtorchtrt -c opt --config pre_cxx11_abi |
来自 PyTorch.org 的 libtorch-shared-with-deps-*.zip |
python -m pip install . |
bazel build //:libtorchtrt -c opt --config pre_cxx11_abi |
来自 PyTorch.org 的 libtorch-cxx11-abi-shared-with-deps-*.zip |
python setup.py bdist_wheel –use-cxx11-abi |
bazel build //:libtorchtrt -c opt |
预安装在 NGC 容器中的 PyTorch |
python setup.py bdist_wheel –use-cxx11-abi |
bazel build //:libtorchtrt -c opt |
来自 NVIDIA 论坛的 Jetson PyTorch |
python setup.py bdist_wheel –use-cxx11-abi |
bazel build //:libtorchtrt -c opt |
从源代码构建的 PyTorch |
python setup.py bdist_wheel –use-cxx11-abi |
bazel build //:libtorchtrt -c opt |
注意:对于以上所有情况,你必须在你的 WORKSPACE 文件中正确声明你打算使用的 PyTorch 源,用于 Python 和 C++ 构建。有关更多信息,请参见下文。
在 Windows 上构建¶
Microsoft VS 2022 工具
Bazelisk
CUDA
构建步骤¶
打开应用程序“x64 Native Tools Command Prompt for VS 2022” - 注意可能需要管理员权限。
确保 Bazelisk(Bazel 启动器)安装在你的机器上,并且可以通过命令行使用。可以使用 Chocolatey 等软件包安装程序来安装 Bazelisk。
安装最新版本的 Torch(即使用
pip install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu124
)。克隆 Torch-TensorRT 存储库并导航到其根目录。
运行
pip install ninja wheel setuptools
运行
pip install --pre -r py/requirements.txt
运行
set DISTUTILS_USE_SDK=1
运行
python setup.py bdist_wheel
运行
pip install dist/*.whl
高级设置和故障排除¶
在 WORKSPACE
文件中,cuda_win
、libtorch_win
和 tensorrt_win
是 Windows 特定的模块,可以自定义。例如,如果你想使用不同版本的 CUDA 构建,或者你的 CUDA 安装位于非标准位置,请更新 cuda_win 模块中的 path。
类似地,如果你想使用不同版本的 pytorch 或 tensorrt,请分别自定义 libtorch_win
和 tensorrt_win
模块中的 urls。
这些软件包的本地版本也可以在 Windows 上使用。请参见 toolchains\\ci_workspaces\\WORKSPACE.win.release.tmpl
,了解在 Windows 上使用 TensorRT 本地版本的示例。
替代构建系统¶
使用 CMake 构建(仅限 TorchScript)¶
可以使用 CMake 而不是 Bazel 来构建 API 库(在 cpp/ 中)和 torchtrtc 可执行文件。目前,python API 和测试无法使用 CMake 构建。首先安装 CMake。
最新版本的 CMake 以及有关如何安装的不同平台的说明 [在他们的网站上](https://cmake.org/download/) 提供。
一些有用的 CMake 选项包括
TensorRT 的 CMake 查找器位于 cmake/Modules 中。为了让 CMake 使用它们,请在使用 CMake 配置项目时传递 -DCMAKE_MODULE_PATH=cmake/Modules。
Libtorch 提供了自己的 CMake 查找器。如果 CMake 找不到它,请使用 -DTorch_DIR=<path to libtorch>/share/cmake/Torch 传递 libtorch 安装路径。
如果使用提供的 cmake 查找器找不到 TensorRT,请指定 -DTensorRT_ROOT=<path to TensorRT>
最后,使用以下命令从 Torch-TensorRT 项目的根目录在您选择的构建目录中配置和构建项目。
cmake -S. -B<build directory> \ [-DCMAKE_MODULE_PATH=cmake/Module] \ [-DTorch_DIR=<path to libtorch>/share/cmake/Torch] \ [-DTensorRT_ROOT=<path to TensorRT>] \ [-DCMAKE_BUILD_TYPE=Debug|Release] cmake --build <build directory>
在 aarch64(Jetson)上本地构建¶
先决条件¶
安装或编译 aarch64 的 PyTorch/LibTorch 构建。
NVIDIA 在此处托管 Jetson 的最新发布分支。
环境设置¶
要在 aarch64-linux-gnu 平台上本地构建,请使用本地可用依赖项配置 WORKSPACE
。
将
WORKSPACE
替换为//toolchains/jp_workspaces
中相应的 WORKSPACE 文件。在
new_local_repository
规则中配置包含本地依赖项的目录根的正确路径。注意:如果你使用 pip 包安装了 PyTorch,则正确的路径是 python torch 包的根路径。如果你使用
sudo pip install
安装,则它将是/usr/local/lib/python3.8/dist-packages/torch
。如果你使用pip install --user
安装,则它将是$HOME/.local/lib/python3.8/site-packages/torch
。
如果你使用的是 NVIDIA 编译的 pip 包,请将 libtorch 源的路径设置为相同的路径。这是因为与 x86_64 上的 PyTorch 不同,NVIDIA aarch64 PyTorch 使用 CXX11-ABI。如果你使用 pre_cxx11_abi 从源代码编译,并且只想使用该库,请将路径设置为相同的路径,但在编译时确保添加标志 --config=pre_cxx11_abi
new_local_repository(
name = "libtorch",
path = "/usr/local/lib/python3.8/dist-packages/torch",
build_file = "third_party/libtorch/BUILD"
)
new_local_repository(
name = "libtorch_pre_cxx11_abi",
path = "/usr/local/lib/python3.8/dist-packages/torch",
build_file = "third_party/libtorch/BUILD"
)
编译 C++ 库和编译器 CLI¶
注意:由于 Jetpack 4.5 和 4.6 之间的依赖项位置发生变化,现在有一个标志来通知 bazel Jetpack 版本。
--platforms //toolchains:jetpack_x.x
使用 bazel 命令编译 Torch-TensorRT 库。
bazel build //:libtorchtrt --platforms //toolchains:jetpack_5.0
编译 Python API¶
注意:由于 Jetpack 4.5 和更新的 Jetpack 版本之间的依赖项位置发生变化,现在
setup.py
有一个标志来设置 jetpack 版本(默认:5.0)。
从 //py
目录使用以下命令编译 Python API。
python3 setup.py install --use-cxx11-abi
如果你有使用 Pre-CXX11 ABI 的 PyTorch 构建,请删除 --use-cxx11-abi
标志。
如果你要为 Jetpack 4.5 构建,请添加 --jetpack-version 5.0
标志。