一、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_ENV,?ENV)。
- 清理 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 服務。