在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="可选参数来指定TensorRT-LLM应支持哪些架构。它限制了支持的GPU架构,但有助于减少编译时间: of architectures in CMake format>"
# 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的系统上
创建一个用于开发的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运行参数,以避免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时,您需要将cpp和cpp/include目录添加到项目的包含路径中。只有cpp/include中包含的头文件是受支持的API的一部分,可以直接包含。cpp下的其他头文件不应直接包含,因为它们可能在未来的版本中发生变化。