簡介:為何 TensorRT-LLM 值得您花一個週末來建置
如果您曾看著 GPU 以 60% 的使用率運作,而您的 LLM 卻慢如蝸牛,您就會知道還有未釋放的效能空間。 TensorRT-LLM 將這些空間轉化為吞吐量:融合的 kernels、分頁注意力機制、量化和圖形層級的優化,可降低延遲並提高每秒 tokens 數量。在本操作指南中,我們將從安裝到引擎建置再到服務,完整地介紹,以便您可以在 NVIDIA GPU 上自信地部署更快、更便宜的推論。
本教學課程以實用且以解決方案為導向的風格編寫。我們將使用問題引導結構,包含可複製的命令、常見的陷阱以及 FP16 與 INT8、批次處理和 KV 快取策略的決策點。我們還將參考官方資源以進行更深入的探討,,.
您將學到什麼
- 如何準備用於引擎建置的模型(來自 Hugging Face 或 checkpoints)
- 如何透過 Python/C++ 和 HTTP 服務執行推論
適用對象
- 在 NVIDIA GPU 上部署 LLM 的 ML 工程師
- 從 PyTorch Transformers 轉向高度優化的推論的建構者
- 什麼是 TensorRT-LLM,以及何時應該使用它?
TensorRT-LLM 是一個推論堆疊,可將 Transformer 模型編譯為高度優化的 GPU「引擎」。與原始 PyTorch 或通用運行時相比,您通常會獲得:
- 透過分頁 KV 快取和量化提高記憶體效率
當您在 NVIDIA GPU 上運行並關心生產級效能時,請使用它。它對於僅解碼的 LLM(例如, Llama、Mistral、Phi、BLOOM)以及聊天機器人、RAG 和高 QPS API 服務等場景特別有價值。
- 具有最新計算能力 (例如,Ampere、Ada、Hopper) 的 NVIDIA GPU
- 匹配的 CUDA 和 TensorRT 版本,加上適當的驅動程式
- Python 3.8+ 和建置工具(如果從原始碼編譯)
版本注意事項:在安裝之前,請務必檢查官方 TensorRT 支援矩陣和版本說明,以了解相容的 CUDA/TensorRT 版本和功能,,.
快速入門選項
- 容器化:使用預先安裝 CUDA/TensorRT 的 NVIDIA 容器—這是避免版本不符的最快方法。
- 原生安裝:按照官方快速入門取得基礎 TensorRT,然後在其上分層 TensorRT-LLM,.
- 準備好您的模型 (Hugging Face → TensorRT-LLM)
常見來源
- Hugging Face:Llama/Mistral/BLOOM 變體
準備檢查清單
- 如果需要,將 safetensors 轉換為預期的格式,或透過專案的腳本匯出到 ONNX。
提示:官方快速入門通常包括用於獲取模型並轉換為正確中間形式的腳本。如需包含 BLOOM 範例的教學課程式演練,請參閱 Dell 關於將 Hugging Face LLM 轉換為 TensorRT-LLM 的指南。
- 建置 TensorRT-LLM 引擎 (工作流程的核心)
您應該了解的概念
- 引擎:您載入用於推論的已編譯、硬體優化的 artifact。
- 精度:FP16/BF16 用於強大的基準;如果準確性保持不變,則 INT8 或 FP8 用於更高的吞吐量。
- KV 快取:分頁 KV 快取可減少記憶體碎片並提高長上下文效能。
高階步驟
- 定義建置配置:最大批次、序列長度、精度、量化和 GPU 架構。
- 指向您的模型 checkpoints 和 tokenizer。
參考:使用官方文件和配置建置引擎。如果您計劃透過 Hugging Face Text Generation Inference (TGI) 進行服務,請參閱 TRT-LLM 後端說明,了解每個 GPU 架構和配置的預編譯引擎。
入門決策樹
- 首次建置:FP16、中等最大序列長度(例如,4K–8K)、適度批次(例如,4–8)。驗證正確性。
- 擴展:啟用分頁 KV 快取。增加最大批次/波束大小。試驗 FP8 或 INT8。
- 生產:釘選符合延遲/QPS SLO 的配置;為每個場景建立單獨的引擎(短提示與長上下文)。
- 執行推論:Python、C++ 和 HTTP
您有三個常見路徑:
- Python:快速原型設計,非常適合 pipelines 和 notebooks。
- HTTP 服務:將 TGI 與 TRT-LLM 後端或運行時的服務範例搭配使用,以進行可擴展的部署。
Hugging Face TGI 後端
- 啟動具有 TRT-LLM 後端的 TGI,並將其指向引擎目錄。
- 透過 /generate 或與 openai 相容的路徑發送請求,並使用副本進行擴展。
- 精度:FP16 是您可靠的基準。 INT8/FP8 可以進一步縮短延遲,但請驗證品質。
- 批次處理:動態批次處理和請求合併可顯著提高吞吐量;測量尾部延遲。
- 分頁 KV 快取:對於長提示和串流至關重要;降低記憶體壓力。
- 最大長度:較大的最大序列長度會增加引擎大小,並可能降低時脈;建置適合用途的引擎。
實用提示
- 使用實際提示進行基準測試:分別測量預填充與解碼階段。
- Tokenizer 吞吐量很重要:如果您的框架支援,請在 GPU 上執行。
- 密切注意 CUDA 圖形/融合 kernels:它們可減少 CPU 開銷和 kernel 啟動延遲。
- 對於多 GPU:根據您的模型大小和延遲要求,選擇 tensor 平行或 pipeline 平行。
- 目標批次大小下的 Tokens/sec (吞吐量)
- 每個請求的首次 token 時間 (TTFT) 和端到端延遲
- 準確性:如果您量化,則為 BLEU/困惑度或特定於任務的評估
在基準 (PyTorch 與 TensorRT-LLM) 之間使用一致的種子和提示集,以驗證正確性和差異。
- 版本不符:根據官方支援矩陣對齊 CUDA、驅動程式和 TensorRT 版本。
- 引擎對裝置無效:專門為您的 GPU 架構重建引擎。
- 建置期間發生 OOM:減少最大序列長度或批次;啟用分頁 KV;考慮量化。
- INT8 的準確性下降:在領域代表性資料上進行校準;嘗試 per-tensor 量化並驗證層級敏感度。
- 儘管吞吐量很高,TTFT 仍然很慢:調整分頁 KV 快取,啟用 CUDA 圖形,並檢查 tokenizer 瓶頸。
- 範例工作流程:從 Hugging Face 模型到生產
場景:您想要在 A100 上使用低延遲聊天模型。
- 選擇模型:7B–13B Llama/Mistral 變體。
- 準備:下載權重和 tokenizer;驗證是否支援架構。
- 第一個引擎:FP16,最大輸入 4K,最大輸出 1K,批次 4;分頁 KV 開啟。
- 驗證:將輸出與您的 PyTorch 基準進行比較。
- 優化:嘗試 INT8 或 FP8;測量 TTFT 和吞吐量。增加伺服器模式的批次。
- 服務:使用 TGI TRT-LLM 後端;在負載平衡器後面擴展副本;新增串流。
- 每個 GPU 的吞吐量:測量目標上下文中的 tokens/秒。使用它來計算 QPS 容量。
- 每 100 萬個 tokens 的價格:透過更快的解碼和更高的批次利用率,TRT-LLM 通常會降低每個 token 的成本。
- 調整引擎大小:為短格式和長格式建置單獨的引擎,以最大限度地減少 headroom 浪費。
- 指南內的常見問題
問:我是否需要為每種類型的 GPU 重建引擎?
答:是的。引擎是特定於硬體的。為您將部署的每個 GPU 架構建置。
問:INT8 對品質的影響有多大?
答:這取決於模型和任務。透過良好的校準資料,許多模型在提供大量加速的同時,仍能保持接近 FP16 的品質。
問:我可以運行長上下文(例如,32K)嗎?
答:是的,但請仔細規劃記憶體。使用分頁 KV 快取並調整區塊大小;請注意,較長的上下文會增加引擎佔用空間和解碼成本。
問:是否需要 TGI?
答:否。您可以直接運行 Python/C++。 TGI 對於具有自動縮放和日誌記錄的生產級 HTTP API 來說很方便。
加速工作流程值得注意
如果您經常在提示上迭代、比較跨引擎的輸出或記錄實驗,則支援快速重試、程式碼區塊執行和網頁程式碼片段的 side-by-side AI 助手可以加快您的迴圈。順便說一句,Sider.AI 提供針對工程師調整的桌面體驗—方便捕捉基準、測試提示以及在您優化 TensorRT-LLM pipeline 時整理您的筆記。 後續步驟檢查清單
- 在支援矩陣中確認 CUDA/TensorRT 相容性。
- 如果透過 TGI 進行服務,請預編譯引擎並配置 TRT-LLM 後端。
- (可選)查看 Hugging Face 模型(如 BLOOM)的教學課程式演練。
主要要點
- TensorRT-LLM 將您的 Transformer 編譯為 GPU 原生引擎,以實現最大的吞吐量和更低的延遲。
- 從 FP16 開始,啟用分頁 KV 快取並進行測量。然後探索 INT8/FP8 以獲得更高的速度。
- 引擎是 GPU 和配置特定的;為每個部署目標建置。
- 對於生產,將引擎與穩健的服務層(例如,TGI)配對,並監控 TTFT、吞吐量和品質。
常見問題
Q1:如何以正確的方式安裝和設定 TensorRT-LLM?
使用具有匹配 CUDA/TensorRT 的容器,或按照官方快速入門和支援矩陣來避免版本偏移。在編譯引擎之前,驗證 GPU 驅動程式和建置工具。
Q2:如何將 TensorRT-LLM 與 Hugging Face 模型搭配使用?
下載模型和 tokenizer,確認支援,並在建置引擎之前根據需要進行轉換。如果使用 TGI 進行服務,請為您的 GPU 編譯引擎,並將後端指向引擎目錄。
Q3:我應該為 TensorRT-LLM 選擇 FP16、FP8 還是 INT8?
從 FP16 開始以獲得穩定性,然後嘗試 FP8/INT8 以提高吞吐量。量化後務必驗證任務準確性。
Q4:我可以透過 HTTP 服務 TensorRT-LLM 嗎?
是的。您可以直接使用 Python/C++,或透過 Hugging Face TGI 的 TRT-LLM 後端進行服務,以獲得具有串流的可擴展、可生產的 API。
Q5:使用 TensorRT-LLM 時的常見效能瓶頸是什麼?
Tokenizer 開銷、次佳批次處理以及缺少分頁 KV 快取是常見問題。調整批次大小,啟用 CUDA 圖形,並監控 TTFT 與整體每秒 tokens 數。