本文為您介紹在部署和微調大模型時所需顯存與哪些因素相關,以及如何估算大模型所需的顯存大小。
簡易顯存估算器
本文根據大模型通用的計算方式,估算大模型部署和微調所需顯存,由於不同模型的網路結構和演算法存在差異,因此,可能與實際顯存佔用有差距。
對於MoE模型(混合專家模型),以DeepSeek-R1-671B為例,671B的模型本身參數都需要載入,但在推理時只啟用37B的參數,因此在計算啟用值所佔顯存時,需要按照37B的模型參數量計算。
模型微調時通常採用16-bit儲存模型參數、啟用值、梯度,採用Adam/AdamW最佳化器,並用32-bit儲存最佳化器狀態。
Inference
| Scenario | Required GPU Memory (GB) |
|---|---|
| Inference (16-bit) | - |
| Inference (8-bit) | - |
| Inference (4-bit) | - |
Fine-tuning
| Scenario | Required GPU Memory (GB) |
|---|---|
| Full Fine-tuning | - |
| LoRA Fine-tuning | - |
| QLoRA (8-bit) Fine-tuning | - |
| QLoRA (4-bit) Fine-tuning | - |
模型推理所需顯存影響因素
模型推理時所需顯存主要由以下部分組成:
模型本身參數
在模型推理時首先需要儲存模型本身的參數,其佔用的顯存計算公式為:參數量 x 參數精度。常用的參數精度有FP32(4位元組)、FP16(2位元組)、BF16 (2位元組)。對於大語言模型,模型參數通常採用FP16或BF16。因此,以參數精度為FP16,參數量為7B的模型為例,其所需顯存為:
啟用值
在大語言模型推理過程中,需要計算每層神經元的啟用值,其佔用顯存與批量大小、序列長度和模型架構(層數、隱藏層大小)正相關,關係式可以表示為:
其中:
b(batch size):單次請求批量大小,在作為線上服務時通常為1,作為批處理介面時不為1。
s(sequence length):整個序列長度,包括輸入輸出(token數量)。
h(hidden size):模型隱藏層維度。
L(Layers):模型Transformer層數。
param_bytes:啟用值儲存的精度,一般為2位元組。
結合以上因素和實踐經驗,為簡化顯存估算,且留有一定餘量,以一個7B模型為例,b為1,s為2048,param_bytes為2位元組時,啟用值所佔顯存可以大致按照10%的模型所佔顯存進行估算,即:
KV緩衝
為加速大語言模型的推理效率,通常會緩衝每層Transformer已經計算完成的鍵K(Key)和值V(Value),避免每個時間步重新計算所有歷史token的注意力機制參數。引入KV緩衝後,其計算量從
其中:
2:表示需要儲存K(Key)和V(Value)兩個矩陣。
b(batch size):單次請求批量大小,在作為線上服務時通常為1,作為批處理介面時不為1。
s(sequence length):整個序列長度,包括輸入輸出(token數量)。
h(hidden size):模型隱藏層維度。
L(Layers):模型Transformer層數。
C(Concurrent):服務介面請求的並發度。
param_bytes:啟用值儲存的精度,一般為2位元組 。
結合以上因素和實踐經驗,為簡化顯存估算,且留有一定餘量,以一個7B模型為例,當C為1,b為1,s為2048,param_bytes為2位元組時,KV緩衝所佔顯存也大致按照10%的模型所佔顯存進行估算,即:
其他
除了以上影響因素外,當前批次的輸入資料、CUDA核心、PyTorch/TensorFlow深度學習架構本身等也會佔用一些顯存,通常為1~2GB。
根據以上因素分析,對於7B的大模型,通常情況下模型推理部署最低需要的顯存約為:
模型微調所需顯存影響因素
模型微調訓練時所需的顯存主要由以下部分組成:
模型本身參數
在微調訓練時首先需要儲存模型本身的參數,其佔用的顯存計算公式為:參數量 x 參數精度。常用的參數精度有FP32(4位元組)、FP16(2位元組)、BF16 (2位元組),對於大語言模型,在微調時模型參數通常採用FP16或BF16。因此以參數精度為FP16,參數量為7B的模型為例,其所需顯存為:
梯度參數
在模型訓練的反向傳播過程中,需要為模型參數計算梯度,梯度的數量與待訓練的參數數量相同。大語言模型中通常採用2位元組的精度儲存梯度,因此7B的模型根據不同的微調訓練方法,所需的顯存為:
微調訓練方法 | 訓練機制 | 適用情境 | 7B模型微調訓練梯度所需顯存(以1%參數計算、2位元組儲存) |
全參數微調 | 需要訓練的參數與模型本身參數相同 | 算力充足的高精度需求 | 14GB |
LoRA(低秩適配器) | LoRA微調將凍結原始模型參數,僅訓練低秩矩陣,其待訓練的參數取決於模型結構和低秩矩陣的大小,通常約佔模型總參數量的0.1%~1% | 低資源適配特定任務 | 0.14GB |
QLoRA(量化 + LoRA) | 將預訓練模型壓縮為4-bit或8-bit,使用LoRA微調模型,並引入雙重量化與分頁最佳化器,進一步減少顯存佔用,待訓練參數通常約佔模型總參數量的0.1%~1% | 超大規模模型微調 | 0.14GB |
最佳化器狀態
在訓練過程中還需儲存最佳化器的狀態,狀態值的數量與待訓練參數數量相關,此外,模型通常會採用混合參數精度訓練,即模型參數、梯度採用2位元組儲存,最佳化器狀態採用4位元組儲存,此做法是為了確保在參數更新過程中保持高精度,避免因FP16/BF16的有限動態範圍導致數值不穩定或溢出。同時,如果採用4位元組儲存狀態時,所需的顯存將翻倍。常用的最佳化器情況如下:
最佳化器類型 | 參數更新機制 | 額外儲存需求 (每個待訓練參數) | 適用情境 | 7B模型微調訓練最佳化器狀態所需顯存(4位元組儲存) | ||
全參數微調 | LoRA微調(以1%參數計算) | QLoRA微調(以1%參數計算) | ||||
SGD | 只用當前梯度 | 0(無額外狀態) | 小模型或實驗 | 0 | 0 | 0 |
SGD + Momentum | 帶動量項 | 1個浮點數(動量) | 穩定性更好 | 28GB | 0.28GB | 0.28GB |
RMSProp | 適應性學習率 | 1個浮點數(二階矩) | 非凸最佳化 | 28GB | 0.28GB | 0.28GB |
Adam/AdamW | 動量 + 適應性學習率 | 2個浮點數(一階+二階矩) | 大模型常用 | 56GB | 0.56GB | 0.56GB |
啟用值
訓練時還需儲存前向傳播過程中產生的中間啟用值,以便在反向傳播時計算梯度。這部分顯存消耗與批量大小 (batch size)、序列長度 (sequence length) 和模型架構(層數、隱藏層大小)正相關,關係式可以表示為:
其中:
b(batch size):批量大小。
s(sequence length):整個序列長度,包括輸入輸出(token數量)。
h(hidden size):模型隱藏層維度。
L(Layers):模型Transformer層數。
param_bytes:啟用值儲存的精度一般為2位元組。
結合以上因素和實踐經驗,為簡化顯存估算,且留有一定餘量,以一個7B模型為例,當b為1,s為2048,param_bytes為2位元組時,啟用值所佔顯存可以大致按照10%的模型所佔顯存進行估算,即:
其他
除了以上影響因素外,當前批次的輸入資料、CUDA核心、PyTorch/TensorFlow深度學習架構本身等也會佔用一些顯存,通常為1~2GB。
根據以上因素分析,對於7B的大模型,通常情況下微調訓練大約需要的顯存為:
微調訓練方式 | 模型本身所需顯存 | 梯度所需顯存 | Adam最佳化器狀態 | 啟用值 | 其他 | 總計 |
全參數微調 | 14GB | 14GB | 56GB | 1.4GB | 2GB | 87.4GB |
LoRA(低秩適配器) | 14GB | 0.14GB | 0.56GB | 1.4GB | 2GB | 18.1GB |
QLoRA(8-bit量化 + LoRA) | 7GB | 0.14GB | 0.56GB | 1.4GB | 2GB | 11.1GB |
QLoRA(4-bit量化 + LoRA) | 3.5GB | 0.14GB | 0.56GB | 1.4GB | 2GB | 7.6GB |
大模型通常採用Adam/AdamW最佳化器。
表中除了QLoRA模型本身採用4-bit或8-bit儲存,最佳化器狀態採用32-bit(4位元組)儲存外,其餘參數都採用16-bit(2位元組)儲存。
常見問題
Q:如何查看大模型參數量?
對於開源大模型,其參數量通常會標註在模型名稱上,如:Qwen-7B,其參數量為
Q:如何查看大模型的參數的精度?
如果未加特別說明,大模型通常採用16-bit(2位元組)儲存。對於量化的模型,其可能採用8-bit/4-bit儲存,詳細情況您可以查看其說明文檔,例如,如果您使用PAI Model Gallery中的模型,其詳情頁通常會介紹參數的精度:
通義千問2.5-7B-Instruct訓練說明:

Q:如何查看大模型微調訓練使用的最佳化器及狀態精度?
大模型訓練通常採用Adam/AdamW最佳化器,參數精度為32-bit(4位元組),更詳細的配置需要查看啟動命令或者代碼。
Q:如何查看顯存佔用?
您可以通過PAI-DSW、PAI-EAS、PAI-DLC的圖形監控頁面查看顯存佔用情況:

或者在容器的終端中執行nvidia-smi查看GPU使用方式:

Q:顯存不足的常見報錯有哪些?
使用NVIDIA GPU顯存不足時會報CUDA out of memory. Tried to allocate X GB的錯誤,此時您需要增大顯存,或者縮小批量大小(batch size)、序列長度等。