大模型到底需要消耗多少 GPU 顯存?公式和工具全都有

如何計算大模型到底需要多少顯存,是常常被問起的問題,筆者在《探祕大模型應用開發》中有過詳細的推算,詳見:一文探祕 LLM 應用開發 (12)- 模型部署與推理 (大模型相關參數計算及性能分析),通過文章可以清楚知道模型大小和顯存佔用的關係及計算方法。

現從實用角度再介紹一個簡單公式和一個工具方便大家工作中使用。

1)估算公式(該公式來自於 Sam Stoelinga 簡化 [1])

PeRDBH

注意:該公式只是爲了簡化計算的估計,並未包含 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],它的輸入如下:

計算過程:

  1. 將可用的 RAM 和操作系統的開銷從 GB 轉換爲字節數。

  2. 通過將 Token 數量乘以 0.5 MB 並轉換爲字節數來計算上下文窗口所需的內存。

  3. 通過從總可用 RAM 中減去操作系統開銷和上下文窗口內存,計算出可用的 RAM(以字節爲單位)。

  4. 將量化級別從比特轉換爲每個參數的字節數。

  5. 通過將可用 RAM 除以每個參數的字節數來計算最大參數數量。

  6. 將結果從參數轉換爲以十億爲單位的參數數量進行顯示。

確定上述輸入後就能直接看到能夠支持的最大參數量,如果計算出的最大參數量爲負值,這表示上下文窗口大小對於可用的 RAM 來說太大了。在這種情況下,程序會顯示一個錯誤信息,建議用戶減少上下文窗口大小或增加可用的 RAM。

參考: 

[1]https://www.substratus.ai/blog/calculating-gpu-memory-for-llm

[2]https://github.com/RayFernando1337/LLM-Calc

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/FFHCCXZypBZ4OJr9CNxjcg