TensorRT-LLM.V1.1.0rc1:Dockerfile.multi文件解读

发布于:2025-08-18 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、TensorRT-LLM有三种安装方式,从简单到难

1.NGC上的预构建发布容器进行部署,见《tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B》。
2.通过pip进行部署。
3.从源头构建再部署,《TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践》。

本次重点介绍Dockerfile.multi文件都包括什么。

Dockerfile.multi 是一个 工业级、生产就绪 的构建脚本,具备以下特点:

✅ 多阶段分离:开发、构建、发布、Triton 集成各司其职

✅ 可定制性强:通过 ARG 支持灵活配置

✅ 支持国内加速:GITHUB_MIRROR

✅ 安全加固:升级 protobuf 修复漏洞

✅ 缓存优化:使用 --mount=type=cache 提升构建速度

✅ 最终镜像精简:删除中间文件、清理缓存

Dockerfile 定义了 7 个构建阶段,每个阶段都有特定用途:

阶段名

作用

基于哪个镜像

base

初始化基础环境,设置变量、清理配置

${BASE_IMAGE}:${BASE_TAG}

devel

开发环境:安装 Python、CMake、CUDA 工具链、TensorRT 等

base

triton

引入 Triton Inference Server 基础镜像

${TRITON_IMAGE}:${TRITON_BASE_TAG}

tritondevel

在 devel 基础上集成 Triton 开发组件

devel 和 triton

wheel

构建 TensorRT-LLM 的 Python wheel 包

${DEVEL_IMAGE}(动态指定)

release

运行时镜像:安装 wheel,准备运行环境

${DEVEL_IMAGE}

tritonbuild / tritonrelease

为 Triton Server 构建并集成后端

release 和 wheel

二、7 个构建阶段

2.1. base 阶段:基础初始化

FROM ${BASE_IMAGE}:${BASE_TAG} AS base

  • 使用 NVIDIA PyTorch 官方镜像作为起点(如 nvcr.io/nvidia/pytorch:25.06-py3)。
  • 设置 EULA 和 AI 使用条款标签。
  • 设置 shell 环境变量(BASH_ENVENV)。
  • 清理 pip 的约束文件(避免依赖冲突)。
  • 设置默认 shell 为 /bin/bash -c

✅ 目的:为后续阶段提供一个干净、标准化的基础镜像。

2.2. devel 阶段:核心开发环境

FROM base AS devel

在此阶段安装一系列开发所需工具和库:

操作

说明

install_base.sh

安装基础工具(wget, git, unzip, cmake 等),可选 GitHub 镜像加速

install_cmake.sh

安装较新版本的 CMake(可能比 base 镜像自带的更新)

install_ccache.sh

安装 ccache,加速 C++ 编译

install_cuda_toolkit.sh

如果 base 镜像 CUDA 太旧,则升级 CUDA Toolkit

install_tensorrt.sh

下载并安装指定版本的 TensorRT(通过参数传入版本号)

install_polygraphy.sh

安装 Polygraphy(TensorRT 调试/分析工具)

install_mpi4py.sh

安装 mpi4py,支持多 GPU 分布式通信

install_pytorch.sh

可选重装 PyTorch(skip 表示跳过)

升级 protobuf

修复安全漏洞(CVE)

安装 opencv-python-headless

支持图像处理(无 GUI)

✅ 目的:构建一个功能完整的 C++/Python 深度学习开发环境,可用于编译 TensorRT-LLM。

2.3. triton 阶段:引入 Triton Inference Server

FROM ${TRITON_IMAGE}:${TRITON_BASE_TAG} AS triton

  • 使用 NVIDIA Triton Server 镜像(如 nvcr.io/nvidia/tritonserver:25.06-py3)。
  • 仅作为资源提供者,不直接运行。
  • 后续阶段会从它复制文件。

2.4. tritondevel 阶段:集成 Triton 开发组件

FROM devel AS tritondevelCOPY --from=triton /opt/tritonserver/... ...

  • 基于 devel 环境。
  • 从 triton 镜像中复制以下内容到本地:
    • Python 后端
    • 库文件(.so
    • 头文件(include
    • 可执行文件(bin
    • 缓存目录
  • 然后运行 install_triton.sh:可能安装 Triton 客户端 SDK 或 Python 包。
  • 继续安装:
    • UCX(高性能通信)
    • NIXL(NVIDIA InfiniBand/X 网络库)
    • etcd(分布式协调服务)

✅ 目的:构建一个支持 Triton 集成开发 的环境,可用于开发自定义后端或调试。

2.5. wheel 阶段:构建 Python Wheel 包

dockerfile

深色版本

FROM ${DEVEL_IMAGE} AS wheel

  • 使用外部传入的开发镜像(${DEVEL_IMAGE},默认可能是 devel)。
  • 将源码复制进来:
    • cpp/tensorrt_llm/benchmarks/3rdparty/setup.py 等
  • 创建 pip 和 ccache 缓存目录

python3 scripts/build_wheel.py --clean --benchmarks

这会编译 C++ 扩展并生成 .whl 文件(如 tensorrt_llm-0.1.0-cp312-cp312-linux_x86_64.whl

✅ 目的:编译并打包 TensorRT-LLM 为 Python wheel,便于分发和安装。

2.6. release 阶段:最终运行时镜像

FROM ${DEVEL_IMAGE} AS release

  • 基于开发镜像(最小依赖)
  • 从 wheel 阶段复制生成的 .whl 文件
  • 使用 pip install 安装 wheel
  • 删除 wheel 文件和 pip 缓存(减小镜像体积)
  • 创建符号链接:
    • bin/executorWorker → Python 安装路径下的可执行文件
    • lib/libnvinfer_plugin_tensorrt_llm.so → 插件库
  • 更新 ldconfig,确保动态库可被找到
  • 验证链接完整性(ldd 检查是否缺失依赖)
  • 复制示例代码(examples/)、文档、C++ 基准测试二进制文件
  • 设置环境变量:
    • TRT_LLM_GIT_COMMIT
    • TRT_LLM_VERSION

✅ 目的:生成一个轻量、可运行、可用于部署的最终镜像

2.7. tritonbuild & tritonrelease 阶段:Triton 后端集成

2.7.1tritonbuild

FROM wheel AS tritonbuildRUN pip install /src/tensorrt_llm/build/tensorrt_llm*.whlCOPY ./triton_backend/ ./RUN bash ./triton_backend/inflight_batcher_llm/scripts/build.sh

  • 安装 wheel
  • 复制 Triton 自定义后端代码
  • 编译 Inflight Batcher LLM 后端(用于在 Triton 中实现动态批处理)

2.7.2tritonrelease

FROM release AS tritonreleaseCOPY --from=tritonbuild /opt/tritonserver/backends/tensorrtllm /opt/tritonserver/backends/tensorrtllm

  • 基于 release 镜像
  • 从 tritonbuild 复制编译好的 Triton 后端
  • 同时复制所有 Triton 模型配置脚本和客户端工具

✅ 目的:生成一个完全集成 Triton Server 功能的最终镜像,可直接用于部署 LLM 服务。


网站公告

今日签到

点亮在社区的每一天
去签到