什麼是GPU內存以及為什麼它對LLM推理至關重要
本文全面解析GPU內存(VRAM)在大型語言模型(LLM)推理中的作用,涵蓋模型權重、KV緩存和框架開銷的內存消耗,提供內存計算公式,解釋為何模型“理論上”能運行卻遭遇OOM,並介紹量化、張量並行、KV緩存優化等策略,以及BentoML推理平台如何簡化這些優化。
GPU內存(VRAM)是大型語言模型(LLM)推理中不可或缺的資源。它不僅決定了模型能否加載,更影響着推理的吞吐量、延遲、最大上下文長度以及併發處理能力。很多團隊在部署LLM時常常遇到這樣的問題:明明模型權重看起來剛好能放進GPU顯存,但一旦開始推理,顯存立刻爆滿,出現OOM(內存耗盡)錯誤。本文基於BentoML的技術博客,詳細解讀GPU內存的工作原理、LLM推理中的內存消耗模式以及優化策略。
GPU內存的基礎知識 GPU內存通常指專用VRAM,例如HBM3或GDDR6X,它們以極高的帶寬(如NVIDIA H200的4.8 TB/s)為GPU提供數據。VRAM是GPU獨有的,不與CPU共享,存儲模型權重、激活值和KV緩存。需要注意的是,集成GPU(如Intel Iris或Apple M系列)可能使用共享系統內存,而數據中心GPU(如A100或H200)完全依賴專用VRAM。所謂共享GPU內存,是指GPU在VRAM不足時從系統RAM中動態劃分的內存,但對於LLM推理,我們通常只關心專用VRAM。
LLM推理中的內存消耗 推理過程中,GPU內存主要消耗在三個方面:
- 模型權重:加載所有參數所需的內存。例如,一個70B參數的FP16模型需要140 GB。權重內存可通過參數量乘以每個參數字節數估算。
- KV緩存:在預填充和解碼階段,每處理一個token都會生成並存儲鍵值對。KV緩存大小隨序列長度、批量大小和層數線性增長,計算公式為:2 × batch_size × seq_len × num_layers × hidden_dim × bytes_per_parameter / 1024³。
- 框架和CUDA開銷:包括CUDA內核、PyTorch分配器碎片化以及臨時激活內存,具體大小取決於框架和GPU。
為什麼模型“看起來能裝下”卻仍然OOM? 許多團隊過去習慣於部署小型模型,單個GPU可以容納多個模型。但LLM的行為截然不同:它們不僅加載權重,還會在運行時動態增長內存。即使模型權重剛好能放進VRAM,KV緩存也會隨着輸入長度和生成token數迅速膨脹。例如,一個需要60 GB權重的模型,在80 GB的GPU上處理長上下文(如32k token)時,KV緩存會輕易吃掉剩餘空間,導致OOM。此外,高併發場景下多個請求的KV緩存疊加,也會迅速耗盡內存。因此,真正的瓶頸並非權重,而是運行時內存的增長。
優化GPU內存使用的策略 針對上述問題,業界積累了多種優化策略:
- 量化:降低權重精度(如FP16→INT4),可減少4倍內存佔用。現代量化方法(GPTQ、AWQ)精度損失極小,適合聊天機器人、RAG等場景。
- 分佈式推理:使用張量並行將模型切分到多個GPU,但需注意通信開銷會增加延遲。
- KV緩存優化:包括前綴緩存(重用系統提示等共享部分)、KV感知路由(將同一請求的token調度到同一GPU,提高緩存命中率,測試中吞吐量提升12倍)和KV緩存卸載(將不常用塊移至CPU內存或磁盤)。
BentoML推理平台將這些優化內置在產品中,用户無需手動配置複雜工程,即可直接享受高效推理。