生產中減少LLM延遲和推理成本的12種方法
擴展LLM的關鍵不是增加GPU,而是消除每個請求中的不必要工作。本文介紹了12種實用的減少延遲和成本的方法。
在將大語言模型(LLM)投入生產時,延遲和成本往往會迅速超出預期。優化通常不在於升級模型或增加GPU,而在於消除不必要的計算。以下12種方法可幫助您有效降低LLM推理延遲和成本。
- 先測量正確的延遲指標。全面的監控應包括隊列時間、首token時間(TTFT)、token間延遲、端到端延遲、輸入輸出token數量、緩存命中率以及工具和檢索延遲。尾延遲(P95/P99)比平均值更重要,有助於定位瓶頸。
- 積極減少輸出token。輸出token是延遲和成本的主要來源。設置合理的max_tokens限制,要求模型提供簡潔答案,使用停止序列,避免重複用户問題,採用緊湊JSON格式。區分“簡要回答”和“詳細解釋”模式,不為用户不讀的內容付費。
- 將請求路由到最小的可行模型。並非所有任務都需要最大模型。情感分析、數據提取、FAQ回答等重複性任務可用小模型處理。使用模型路由:小模型處理簡單請求,低置信度時升級到大模型。
- 減少LLM調用次數。避免工作流中包含過多順序調用。合併步驟,使用單個設計良好的提示替代多次調用。用確定性代碼替代LLM處理日期格式化、字段驗證等任務。獨立任務並行執行。
- 設計支持前綴緩存的提示。將系統指令、安全策略、示例等穩定內容放在提示開頭,用户請求等變化內容放在後面,以便重用前綴緩存,避免重複處理。
- 添加多層緩存。除提示緩存外,使用精確響應緩存(針對相同請求)、語義緩存(針對相似請求)、檢索緩存和工具結果緩存。避免重複處理已知信息。
- 控制RAG上下文預算。檢索過多文檔會增大提示、增加延遲和成本。限制檢索數量,重排序後輸入模型,去重,移除無關內容。為系統指令、檢索內容、對話歷史等設置獨立的token預算。
- 將非交互任務移至批處理。數據標註、批量摘要、報表生成等任務不應占用實時資源。使用低優先級隊列或批處理API,保護用户體驗。
- 針對延遲調整批處理。過大的批處理會提高隊列時間和TTFT。根據用户服務目標(P95 TTFT、併發量等)調整批處理大小,追求最佳用户體驗而非GPU利用率。
- 謹慎管理KV緩存和上下文長度。長上下文會快速消耗GPU內存。設置合理的最大上下文長度、輸出長度、併發請求數等限制。避免不必要地使用最大上下文窗口。
- 基於真實流量測試服務優化。量化、推測性解碼、分塊預填充等優化並非普遍適用。用生產環境的真實提示長度、輸出長度、併發模式進行基準測試。
- 添加准入控制和優雅降級。突發流量下,實施用户速率限制、請求大小限制、優先級隊列、降級到小模型等策略。確保系統在過載時仍能提供可接受的服務。
通過系統性地應用這些策略,您可以在不顯著影響質量的情況下,大幅降低LLM生產應用的延遲和成本。