在 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 的系统上

  1. 为开发创建一个 Docker 镜像。 镜像将在本地标记为tensorrt_llm/devel:latest

    make -C docker build
    
  2. 运行容器。

    make -C docker run
    

    如果您更喜欢在该容器中使用您自己的用户帐户,而不是root,请添加LOCAL_USER=1选项。

    make -C docker run LOCAL_USER=1
    

在没有 GNU make 的系统上

  1. 为开发创建一个 Docker 镜像。

    docker build --pull  \
                --target devel \
                --file docker/Dockerfile.multi \
                --tag tensorrt_llm/devel:latest \
                .
    
  2. 运行容器。

    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 时,需要将cppcpp/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++ 代码进行编译; 任何差异都可能导致兼容性问题。