在 Linux 上从源代码构建#
本文档提供了在 Linux 上从源代码构建 TensorRT-LLM 的说明。 如果您想要最佳性能或调试功能,或者如果需要GNU C++11 ABI,则必须从源代码构建。
先决条件#
使用 Docker 构建和运行 TensorRT-LLM。 有关安装用于 NVIDIA 平台运行 Docker 容器的环境的说明,请参见此处。
# TensorRT-LLM uses git-lfs, which needs to be installed in advance.
apt-get update && apt-get -y install git git-lfs
git lfs install
git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
git submodule update --init --recursive
git lfs pull
构建 TensorRT-LLM Docker 镜像#
有两种选项可以创建 TensorRT-LLM Docker 镜像。 构建镜像大约需要 63 GB 的磁盘空间。
选项 1:一步构建 TensorRT-LLM#
TensorRT-LLM 包含一个简单的命令来创建 Docker 镜像。 请注意,如果您计划在 TensorRT-LLM 上进行开发,我们建议使用选项 2:逐步构建 TensorRT-LLM。
make -C docker release_build
您可以添加CUDA_ARCHS="<CMake 格式的架构列表>"
可选参数,以指定 TensorRT-LLM 应支持的架构。 它限制了支持的 GPU 架构,但有助于缩短编译时间
# Restrict the compilation to Ada and Hopper architectures.
make -C docker release_build CUDA_ARCHS="89-real;90-real"
构建完镜像后,可以运行 Docker 容器。
make -C docker release_run
make
命令支持LOCAL_USER=1
参数以切换到本地用户帐户而不是容器内的root
。 TensorRT-LLM 的示例安装在/app/tensorrt_llm/examples
目录中。
由于 TensorRT-LLM 已经构建和安装完毕,您可以跳过其余步骤。
选项 2:逐步构建 TensorRT-LLM#
如果您正在寻找更大的灵活性,TensorRT-LLM 具有创建和运行开发容器的命令,可以在其中构建 TensorRT-LLM。
创建容器#
在具有 GNU make
的系统上
为开发创建一个 Docker 镜像。 镜像将在本地标记为
tensorrt_llm/devel:latest
。make -C docker build
运行容器。
make -C docker run
如果您更喜欢在该容器中使用您自己的用户帐户,而不是
root
,请添加LOCAL_USER=1
选项。make -C docker run LOCAL_USER=1
在没有 GNU make
的系统上
为开发创建一个 Docker 镜像。
docker build --pull \ --target devel \ --file docker/Dockerfile.multi \ --tag tensorrt_llm/devel:latest \ .
运行容器。
docker run --rm -it \ --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \ --volume ${PWD}:/code/tensorrt_llm \ --workdir /code/tensorrt_llm \ tensorrt_llm/devel:latest
注意:请确保将
--ipc=host
设置为 docker 运行参数,以避免总线错误(已转储核心)
。
进入容器后,按照下一步从源代码构建 TensorRT-LLM。
构建 TensorRT-LLM#
选项 1:使用 C++ 编译进行完整构建#
以下命令编译 C++ 代码,并将编译后的库与 Python 文件一起打包到 wheel 中。 在开发 C++ 代码时,您需要此完整构建命令来应用您的代码更改。
# To build the TensorRT-LLM code.
python3 ./scripts/build_wheel.py
构建完 wheel 后,通过以下方式安装它
pip install ./build/tensorrt_llm*.whl
或者,您可以使用可编辑安装,如果您还开发 Python 代码,这将非常方便。
pip install -e .
默认情况下,build_wheel.py
启用增量构建。 要清理构建目录,请添加--clean
选项
python3 ./scripts/build_wheel.py --clean
可以将 TensorRT-LLM 的编译限制为特定的 CUDA 架构。 为此,build_wheel.py
脚本接受一个以分号分隔的 CUDA 架构列表,如以下示例所示
# Build TensorRT-LLM for Ampere.
python3 ./scripts/build_wheel.py --cuda_architectures "80-real;86-real"
要使用benchmark/cpp下的 C++ 基准测试脚本,例如gptManagerBenchmark.cpp
,请添加--benchmarks
选项
python3 ./scripts/build_wheel.py --benchmarks
有关架构列表,请参阅硬件部分。
为 C++ 运行时构建 Python 绑定#
C++ 运行时,特别是GptSession
可以通过绑定暴露给 Python。 此功能可以通过默认构建选项启用。
python3 ./scripts/build_wheel.py
如上所述安装生成的 wheel 后,C++ 运行时绑定将在tensorrt_llm.bindings
包中可用。 在 Python 解释器中对此包运行help
将提供相关类的概述。 还应查阅相关的单元测试以了解 API。
当仅构建 C++ 运行时
时,此功能将不会启用。
与 TensorRT-LLM C++ 运行时链接#
build_wheel.py
脚本还将编译包含 TensorRT-LLM 的 C++ 运行时的库。 如果不需要 Python 支持和torch
模块,则脚本提供--cpp_only
选项,该选项仅将构建限制为 C++ 运行时。
python3 ./scripts/build_wheel.py --cuda_architectures "80-real;86-real" --cpp_only --clean
这对于避免可能由与GCC 的双 ABI 支持相关的特定版本的torch
引入的链接问题特别有用。 --clean
选项将在构建之前删除构建目录。 默认构建目录是cpp/build
,可以使用选项--build_dir
覆盖它。 运行build_wheel.py --help
以获取所有支持选项的概述。
共享库可以在以下位置找到
cpp/build/tensorrt_llm/libtensorrt_llm.so
此外,链接到包含 TensorRT 的 LLM 插件的库。
cpp/build/tensorrt_llm/plugins/libnvinfer_plugin_tensorrt_llm.so
支持的 C++ 头文件#
使用 TensorRT-LLM 时,需要将cpp
和cpp/include
目录添加到项目的包含路径中。 只有cpp/include
中包含的头文件是受支持的 API 的一部分,可以被直接包含。 cpp
下的其他头文件不应直接包含,因为它们可能会在未来的版本中发生更改。
选项 2:仅 Python 构建,无需 C++ 编译#
如果您只需要修改 Python 代码,则可以打包和安装 TensorRT-LLM 而无需编译。
# Package TensorRT-LLM wheel.
TRTLLM_USE_PRECOMPILED=1 pip wheel . --no-deps --wheel-dir ./build
# Install TensorRT-LLM wheel.
pip install ./build/tensorrt_llm*.whl
或者,您可以使用可编辑安装,以便在 Python 开发期间获得便利。
TRTLLM_USE_PRECOMPILED=1 pip install -e .
设置 TRTLLM_USE_PRECOMPILED=1
可以下载在 tensorrt_llm/version.py
中指定的版本的预构建 wheel 包,并将已编译的库提取到当前目录中,从而跳过 C++ 编译。
您可以使用 TRTLLM_PRECOMPILED_LOCATION
指定用于下载的自定义 URL 或本地路径。 例如,要使用 PyPI 中的 0.16.0 版本
TRTLLM_PRECOMPILED_LOCATION=https://pypi.nvidia.com/tensorrt-llm/tensorrt_llm-0.16.0-cp312-cp312-linux_x86_64.whl pip install -e .
已知限制#
目前,我们发布的 TensorRT-LLM wheel 包链接到 PyPI 上托管的公共 PyTorch,这禁用了 C++11 ABI 支持。 但是,先前构建的 Docker 镜像基于 NGC 容器,其中 PyTorch 启用了 C++11 ABI 支持; 请参阅 NGC PyTorch 容器页面。 因此,我们建议在此容器内执行完整构建。
使用 TRTLLM_PRECOMPILED_LOCATION
时,请确保您的 wheel 包基于与当前目录相同版本的 C++ 代码进行编译; 任何差异都可能导致兼容性问题。