新聞中心

借助 NVIDIA TensorRT-LLM 分塊預填充提高 AI 推理效率和簡化部署 NEWS DETAIL

當前位置:首頁 > 新聞中心
資訊分類 · 新聞中心 發佈時間 · 2025-01-21

在本 博文 中,我們詳細介紹了分塊預填充,這是 NVIDIA TensorRT-LLM 的一項功能,可提高 GPU 利用率並簡化開發者的部署體驗。本文基於之前的博文,討論了 TensorRT-LLM 中的高級 KV 緩存優化功能如何在需要系統預填充的用例中將性能提升高達 5 倍。

傳統預填充和解碼推理方法面臨的挑戰

當用戶向模型提交請求時,它將經歷兩個不同的計算階段:預填充和解碼。每個階段使用 GPU 計算資源的方式各不相同。

在預填充階段,系統會處理所有輸入令牌以計算 KV 緩存,然後使用該緩存生成輸出的第一個令牌。此階段的計算要求很高,可以有效利用 GPU 龐大的並行計算資源。

在解碼階段,系統會單獨生成輸出 tokens,使用每個新 tokens 更新預填充階段的中間狀態。由於中間狀態計算的繁重計算工作是在預填充階段完成的,因此解碼階段主要涉及僅處理新生成的 tokens。因此,此階段的計算密集度較低。

TensorRT-LLM 支援動態批處理,允許並行處理多個請求,使得預填充和解碼階段可以同時進行。雖然這種方法比暫停解碼請求以處理預填充請求的分階段批處理更高效,但由於解碼階段延遲到預填充請求完成,因此可能會導致延遲。圖 1 的頂部說明瞭這一概念。

A visual showing a batch of three queries being processed with and without TensorRT-LLM chunked prefill. Without chunking, the decode phase has to wait until the full prefill phase is completed before the next decode can start. With chunking, the latency is shorter and the decode can be completed faster while at the same time increasing GPU utilization.
圖 1. 分塊預填充過程的簡化表示,展示了如何提高 GPU 利用率並加速查詢完成。

使用分塊預填充平衡預填充和解碼階段

借助 TensorRT-LLM 分塊預填充,令牌被分成較小的單元或分塊,以加快處理速度。這可以防止預填充階段成為瓶頸,使解碼階段的令牌實現更多的並行化,並提高 GPU 的利用率。圖 1 的底部部分說明瞭這一概念。

此外,使用 TensorRT-LLM 分塊預填充使 GPU 系統能夠處理更長的上下文和更高的併發級別。由於內存使用量取決於每次迭代期間處理的令牌數量,因此使用預填充塊可將內存消耗量與傳入請求的上下文長度解耦。然後,系統可以在不增加內存需求的情況下處理更大的上下文長度。

通過動態資料塊大小調整簡化 TensorRT-LLM 引擎創建

圖 1 顯示了塊大小百分比對用戶交互性和整體系統吞吐量的影響,這需要根據所需的用戶體驗和可用 GPU 資源進行權衡。使用大塊大小可以減少處理預填充序列所需的迭代次數,從而縮短第一個令牌(TTFT)的時間。

但是,這也會增加完成正在進行的請求的解碼階段所需的時間,從而增加查詢完成時間並降低每秒輸出令牌數(TPS)。對於開發者而言,找到合適的平衡有時非常耗時。TensorRT-LLM 部署動態塊大小,根據 GPU 利用率指標為用戶提供理想建議。

動態預填充塊大小調整的另一個優勢是簡化了 TensorRT-LLM 引擎構建流程。過去,開發者必須提供最大輸入序列長度,以便在引擎構建期間計算激活緩衝區。為確保激活緩衝區能夠處理最複雜的用戶查詢,開發者需要為其用例設置預期的最大序列長度。這種方法針對異常和最差情況優化了 GPU 資源,導致內存使用效率低下。

借助動態預填充塊大小調整,開發者無需再手動指定最大輸入長度。相反,激活緩衝區大小由塊大小(由 TensorRT-LLM 配置)自動確定。這消除了手動配置,並提高了執行期間的內存使用效率。

TensorRT-LLM 分塊預填充入門

使用 TensorRT-LLM 分塊預填充可顯著提高系統性能和利用率。將傳統的連續預填充階段分解為更小、更易於管理的塊,可通過解碼階段實現更好的並行化,從而減少瓶頸並加速查詢完成。

塊大小的動態調整還簡化了 TensorRT-LLM 引擎配置流程,無需開發者手動設置激活緩衝區大小,而這在之前會導致內存使用效率低下。動態塊大小優化內存使用,並確保系統能夠無縫適應不同 LLM 用戶的需求。