大模型到底需要消耗多少GPU顯存?公式和工具全都有
如何計算大模型到底需要多少顯存,是常常被問起的問題。
現從實用角度再介紹一個簡單公式和一個工具方便大家工作中使用。
1)估算公式(該公式來自于Sam Stoelinga簡化[1])
符號 | 描述 |
M | 用千兆字節 (GB) 表示的 GPU 內存 |
P | 模型中的參數數量。例如,一個 7B 模型有 7 億參數。 |
4B | 4 字節,即每個參數使用的字節數 |
32 | 4 字節中有 32 位 |
Q | 加載模型時應使用的位數,例如 16 位、8 位或 4 位。 |
1.2 | 表示在 GPU 內存中加載額外內容的 20% 開銷。 |
注意:該公式只是為了簡化計算的估計,并未包含kvcache所需顯存以及context大小的影響。
下面以運行16位精度的 Llama 70B 模型所需的 GPU 內存為例套用公式:
該模型有 700 億參數。
M = (70 ? 4) / (32 / 16) ? 1.2 ≈ 168GB
由此可見,模型所需的 GPU 內存相當大。單個 80GB 的 A100 GPU 不足以滿足需求,需要多個A100 GPU才能跑的起來。
如何進一步減少 Llama 2 70B 所需的 GPU 內存?
量化(Quantization)是一種減少內存占用的方法。通過將模型參數的精度從浮點數降低到低位表示(如 8 位整數),量化顯著降低了內存和計算需求,使模型在資源有限的設備上更高效地部署。然而,這需要仔細管理以保持模型的性能,因為降低精度可能會影響輸出的準確性。
通常認為 8 位量化能實現與 16 位精度相似的性能。而 4 位量化可能會顯著影響模型的性能。
讓我們再舉一個 4 位量化的 Llama 2 70B 的例子:
M = (70 ? 4) / (32 / 4) ? 1.2 ≈ 42GB
這意味著你可以使用 2 個 24GB 的 L4 GPU 來運行這個模型。
2)評估工具:
在此基礎上,介紹一個能夠自動計算顯存能載入運行多大參數量模型的程序[2],它的輸入如下:
- 可用的 RAM(以 GB 為單位)
- 估計操作系統 RAM 使用量(以 GB 為單位)
- 上下文窗口大小(Token 數量)
- 量化級別(Quantization level,每個參數的比特數)
計算過程:
- 將可用的 RAM 和操作系統的開銷從 GB 轉換為字節數。
- 通過將 Token 數量乘以 0.5 MB 并轉換為字節數來計算上下文窗口所需的內存。
- 通過從總可用 RAM 中減去操作系統開銷和上下文窗口內存,計算出可用的 RAM(以字節為單位)。
- 將量化級別從比特轉換為每個參數的字節數。
- 通過將可用 RAM 除以每個參數的字節數來計算最大參數數量。
- 將結果從參數轉換為以十億為單位的參數數量進行顯示。
確定上述輸入后就能直接看到能夠支持的最大參數量,如果計算出的最大參數量為負值,這表示上下文窗口大小對于可用的 RAM 來說太大了。在這種情況下,程序會顯示一個錯誤信息,建議用戶減少上下文窗口大小或增加可用的 RAM。
參考:
[1]https://www.substratus.ai/blog/calculating-gpu-memory-for-llm
[2]??https://github.com/RayFernando1337/LLM-Calc??