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

一、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 服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93663.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93663.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93663.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UniApp 實現pdf上傳和預覽

一、上傳1、html<template><button click"takeFile">pdf上傳</button> </template>2、JStakeFile() {// #ifdef H5// H5端使用input方式選擇文件const input document.createElement(input);input.type file;input.accept .pdf;input.onc…

《用Proxy解構前端壁壘:跨框架狀態共享庫的從零到優之路》

一個項目中同時出現React的函數式組件、Vue的模板語法、Angular的依賴注入時,數據在不同框架體系間的流轉便成了開發者不得不面對的難題—狀態管理,這個本就復雜的命題,在跨框架場景下更顯棘手。而Proxy,作為JavaScript語言賦予開發者的“元編程利器”,正為打破這道壁壘提…

MOESI FSM的全路徑測試用例

MOESI FSM的全路徑測試用例摘要&#xff1a;本文首先提供一個UVM版本的測試序列&#xff08;基于SystemVerilog和UVM框架&#xff09;&#xff0c;設計為覆蓋MOESI FSM的全路徑&#xff1b;其次詳細解釋如何使用覆蓋組&#xff08;covergroup&#xff09;來量化測試的覆蓋率&am…

git倉庫和分支的關系

1?? 倉庫分支&#xff08;Repository Branch&#xff09;每個 Git 倉庫都有自己的分支結構。分支決定你當前倉庫看到的代碼版本。示例&#xff1a;倉庫分支只是局部修改&#xff0c;項目分支才是全局管理所有倉庫分支的概念。wifi_camera 倉庫&#xff1a; - main - dev - fe…

Linux的基本操作

Linux 系統基礎操作完整指南一、文件與目錄操作1. 導航與查看pwd (Print Working Directory)作用&#xff1a;顯示當前所在目錄的完整路徑示例&#xff1a;pwd → 輸出 /home/user/documents使用場景&#xff1a;當你在多層目錄中迷失時快速定位當前位置ls (List)常用選項&…

npm設置了鏡像 pnpm還需要設置鏡像嗎

npm配置鏡像后是否需要為pnpm單獨設置鏡像&#xff1f; 是的&#xff0c;即使您已經為npm設置了鏡像源&#xff08;如淘寶鏡像&#xff09;&#xff0c;仍然需要單獨為pnpm配置鏡像源。這是因為npm和pnpm是兩個獨立的包管理工具&#xff0c;它們的配置系統和環境變量是分離的&a…

Linux管道

預備知識&#xff1a;進程通信進程需要某種協同&#xff0c;協同的前提條件是通信。有些數據是用來通知就緒的&#xff0c;有些是單純的傳輸數據&#xff0c;還有一些是控制相關信息。進程具有獨立性&#xff0c;所以通信的成本可能稍微高一點&#xff1b;進程間通信前提是讓不…

基于Spring Boot的快遞物流倉庫管理系統 商品庫存管理系統

&#x1f525;作者&#xff1a;it畢設實戰小研&#x1f525; &#x1f496;簡介&#xff1a;java、微信小程序、安卓&#xff1b;定制開發&#xff0c;遠程調試 代碼講解&#xff0c;文檔指導&#xff0c;ppt制作&#x1f496; 精彩專欄推薦訂閱&#xff1a;在下方專欄&#x1…

腳手架開發-Common封裝基礎通用工具類<基礎工具類>

書接上文 java一個腳手架搭建_redission java腳手架-CSDN博客 以微服務為基礎搭建一套腳手架開始前的介紹-CSDN博客 腳手架開發-準備配置-進行數據初始化-配置文件的準備-CSDN博客 腳手架開發-準備配置-配置文件的準備項目的一些中間件-CSDN博客 腳手架開發-Nacos集成-CSD…

軟件系統運維常見問題

系統部署常見問題 環境配置、兼容性問題。生產與測試環境的操作系統、庫版本、中間件版本不一致&#xff0c;運行環境軟件版本不匹配。新舊版本代碼/依賴不兼容。依賴缺失或沖突問題。后端包啟動失敗&#xff0c;提示類/方法/第三方依賴庫找不到或者版本沖突。配置錯誤。系統啟…

2021 IEEE【論文精讀】用GAN讓音頻隱寫術騙過AI檢測器 - 對抗深度學習的音頻信息隱藏

使用GAN生成音頻隱寫術的隱寫載體 本文為個人閱讀GAN音頻隱寫論文&#xff0c;部分內容注解&#xff0c;由于原文篇幅較長這里就不再一一粘貼&#xff0c;僅對原文部分內容做注解&#xff0c;僅供參考詳情參考原文鏈接 原文鏈接&#xff1a;https://ieeexplore.ieee.org/abstra…

PWA技術》》漸進式Web應用 Push API 和 WebSocket 、webworker 、serviceworker

PWA # 可離線 # 高性能 # 無需安裝 # 原生體驗Manifest {"name": "天氣助手", // 應用全名"short_name": "天氣", // 短名稱&#xff08;主屏幕顯示&#xff09;"start_url": "/index.html&…

數據結構——棧和隊列oj練習

225. 用隊列實現棧 - 力扣&#xff08;LeetCode&#xff09; 這一題需要我們充分理解隊列和棧的特點。 隊列&#xff1a;隊頭出數據&#xff0c;隊尾入數據。 棧&#xff1a;棧頂出數據和入數據。 我們可以用兩個隊列實現棧&#xff0c;在這過程中&#xff0c;我們總要保持其…

Java基礎 8.19

目錄 1.局部內部類的使用 總結 1.局部內部類的使用 說明&#xff1a;局部內部類是定義在外部類的局部位置&#xff0c;比如方法中&#xff0c;并且有類名可以直接訪問外部類的所有成員&#xff0c;包含私有的不能添加訪問修飾符&#xff0c;因為它的地位就是一個局部變量。局…

從父類到子類:C++ 繼承的奇妙旅程(2)

前言&#xff1a;各位代碼航海家&#xff0c;歡迎回到C繼承宇宙&#xff01;上回我們解鎖了繼承的「基礎裝備包」&#xff0c;成功馴服了public、protected和花式成員隱藏術。但——??前方高能預警&#xff1a; 繼承世界的暗流涌動遠不止于此&#xff01;今天我們將勇闖三大神…

【圖像算法 - 16】庖丁解牛:基于YOLO12與OpenCV的車輛部件級實例分割實戰(附完整代碼)

庖丁解牛&#xff1a;基于YOLO12與OpenCV的車輛部件級實例分割實戰&#xff08;附完整代碼&#xff09; 摘要&#xff1a; 告別“只見整車不見細節”&#xff01;本文將帶您深入實戰&#xff0c;利用YOLO12-seg訓練實例分割模型&#xff0c;結合OpenCV的強大圖像處理能力&…

ubuntu22.04配置遠程桌面

文章目錄前言檢查桌面類型xorg遠程桌面(xrdp)安裝xrdpxrdp添加到ssl-certwayland遠程桌面(gnome-remote-desktop)檢查安裝開啟開啟狀況檢查自動登錄奇技淫巧前言 在windows上使用遠程桌面服務&#xff0c;連接ubuntu主機的遠程桌面 檢查桌面類型 查看桌面類型、協議 echo $…

SQL Server 中子查詢、臨時表與 CTE 的選擇與對比

在 SQL Server 的實際開發過程中&#xff0c;我們常常需要將復雜的查詢邏輯分解為多個階段進行處理。實現這一目標的常見手段有 子查詢 (Subquery)、臨時表 (Temporary Table) 和 CTE (Common Table Expression)。這三者在語法、執行效率以及可維護性方面各有優勢與局限。如何選…

肖臻《區塊鏈技術與應用》第20-22講 - 以太坊難度調整、權益證明和智能合約

以太坊的“冰河時代”:詳解難度調整算法與“難度炸彈” 摘要: 為了實現遠快于比特幣的十幾秒出塊速度,以太坊必須設計一套更為靈敏和復雜的挖礦難度調整算法。本文基于北京大學肖臻老師的公開課內容,深入剖析了以太坊獨特的逐塊難度調整機制。文章首先解釋了其維持15秒平均…

C++中內存池(Memory Pool)詳解和完整示例

1. 什么是內存池&#xff1f; 內存池&#xff08;Memory Pool / Pool Allocator&#xff09; 是一種內存管理機制&#xff0c;提前向系統申請一大塊內存&#xff0c;再在這塊內存里切分、分配和回收。 它相當于在用戶空間建立了一層 “小型堆管理器”&#xff0c;避免頻繁調用系…