在本 博文 中,我們詳細介紹了分塊預填充,這是 NVIDIA TensorRT-LLM 的一項功能,可提高 GPU 利用率并簡化開發者的部署體驗。本文基于之前的博文,討論了 TensorRT-LLM 中的高級 KV 緩存優化功能如何在需要系統預填充的用例中將性能提升高達 5 倍。
傳統預填充和解碼推理方法面臨的挑戰
當用戶向模型提交請求時,它將經歷兩個不同的計算階段:預填充和解碼。每個階段使用 GPU 計算資源的方式各不相同。
在預填充階段,系統會處理所有輸入令牌以計算 KV 緩存,然后使用該緩存生成輸出的第一個令牌。此階段的計算要求很高,可以有效利用 GPU 龐大的并行計算資源。
在解碼階段,系統會單獨生成輸出 tokens,使用每個新 tokens 更新預填充階段的中間狀態。由于中間狀態計算的繁重計算工作是在預填充階段完成的,因此解碼階段主要涉及僅處理新生成的 tokens。因此,此階段的計算密集度較低。
TensorRT-LLM 支持動態批處理,允許并行處理多個請求,使得預填充和解碼階段可以同時進行。雖然這種方法比暫停解碼請求以處理預填充請求的分階段批處理更高效,但由于解碼階段延遲到預填充請求完成,因此可能會導致延遲。圖 1 的頂部說明了這一概念。

使用分塊預填充平衡預填充和解碼階段
借助 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 用戶的需求。
查看 我們的 GitHub 文檔 ,開始使用 TensorRT-LLM 分塊預填充。詳細了解 NVIDIA AI 推理解決方案 ,并隨時了解最新的 AI 推理性能更新 。