在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 镜像。

make -C docker release_build

你可以添加CUDA_ARCHS=" of architectures in CMake format>"可选参数来指定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 目录中。

选项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运行参数,以避免Bus error (core dumped)

构建 TensorRT-LLM

进入容器后,从源代码构建TensorRT-LLM。

# To build the TensorRT-LLM code.
python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt

# Deploy TensorRT-LLM in your environment.
pip install ./build/tensorrt_llm*.whl

默认情况下,build_wheel.py 启用增量构建。要清理构建目录,请添加 --clean 选项:

python3 ./scripts/build_wheel.py --clean  --trt_root /usr/local/tensorrt

可以限制TensorRT-LLM编译到特定的CUDA架构。为此,build_wheel.py脚本接受一个分号分隔的CUDA架构列表,如下例所示:

# Build TensorRT-LLM for Ampere.
python3 ./scripts/build_wheel.py --cuda_architectures "80-real;86-real" --trt_root /usr/local/tensorrt

要使用位于基准测试/cpp下的C++基准测试脚本,例如gptManagerBenchmark.cpp,请添加--benchmarks选项:

python3 ./scripts/build_wheel.py --benchmarks --trt_root /usr/local/tensorrt

请参考硬件部分以获取架构列表。

为C++运行时构建Python绑定

特别是C++运行时,GptSession可以通过绑定暴露给Python。此功能可以通过默认的构建选项开启。

python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt

安装后,如上所述生成的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

这对于避免由特定版本的torch引入的链接问题特别有用,这些问题可能与GCC的双ABI支持有关。选项--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下的其他头文件不应直接包含,因为它们可能在未来的版本中发生变化。