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