你的GPU能跑Llama 2等大模型嗎?用這個(gè)開源項(xiàng)目上手測(cè)一測(cè)
在算力為王的時(shí)代,你的 GPU 可以順暢的運(yùn)行大模型(LLM)嗎?
對(duì)于這一問題,很多人都難以給出確切的回答,不知該如何計(jì)算 GPU 內(nèi)存。因?yàn)椴榭?GPU 可以處理哪些 LLM 并不像查看模型大小那么容易,在推理期間(KV 緩存)模型會(huì)占用大量?jī)?nèi)存,例如,llama-2-7b 的序列長(zhǎng)度為 1000,需要 1GB 的額外內(nèi)存。不僅如此,模型在訓(xùn)練期間,KV 緩存、激活和量化都會(huì)占用大量?jī)?nèi)存。
我們不禁要問,能不能提前了解上述內(nèi)存的占用情況。近幾日,GitHub 上新出現(xiàn)了一個(gè)項(xiàng)目,可以幫你計(jì)算在訓(xùn)練或推理 LLM 的過程中需要多少 GPU 內(nèi)存,不僅如此,借助該項(xiàng)目,你還能知道詳細(xì)的內(nèi)存分布情況、評(píng)估采用什么的量化方法、處理的最大上下文長(zhǎng)度等問題,從而幫助用戶選擇適合自己的 GPU 配置。
項(xiàng)目地址:https://github.com/RahulSChand/gpu_poor
不僅如此,這個(gè)項(xiàng)目還是可交互的,如下所示,它能計(jì)算出運(yùn)行 LLM 所需的 GPU 內(nèi)存,簡(jiǎn)單的就像填空題一樣,用戶只需輸入一些必要的參數(shù),最后點(diǎn)擊一下藍(lán)色的按鈕,答案就出來了。
交互地址:https://rahulschand.github.io/gpu_poor/
最終的輸出形式是這樣子的:
{
"Total": 4000,
"KV Cache": 1000,
"Model Size": 2000,
"Activation Memory": 500,
"Grad & Optimizer memory": 0,
"cuda + other overhead": 500
}
至于為什么要做這個(gè)項(xiàng)目,作者 Rahul Shiv Chand 表示,有以下原因:
- 在 GPU 上運(yùn)行 LLM 時(shí),應(yīng)該采用什么的量化方法來適應(yīng)模型;
- GPU 可以處理的最大上下文長(zhǎng)度是多少;
- 什么樣的微調(diào)方法比較適合自己?Full? LoRA? 還是 QLoRA?
- 微調(diào)期間,可以使用的最大 batch 是多少;
- 到底是哪項(xiàng)任務(wù)在消耗 GPU 內(nèi)存,該如何調(diào)整,從而讓 LLM 適應(yīng) GPU。
那么,我們?cè)撊绾问褂媚兀?/span>
首先是對(duì)模型名稱、ID 以及模型尺寸的處理。你可以輸入 Huggingface 上的模型 ID(例如 meta-llama/Llama-2-7b)。目前,該項(xiàng)目已經(jīng)硬編碼并保存了 Huggingface 上下載次數(shù)最多的 top 3000 LLM 的模型配置。
如果你使用自定義模型或 Hugginface ID 不可用,這時(shí)你需要上傳 json 配置(參考項(xiàng)目示例)或僅輸入模型大小(例如 llama-2-7b 為 70 億)就可以了。
接著是量化,目前該項(xiàng)目支持 bitsandbytes (bnb) int8/int4 以及 GGML(QK_8、QK_6、QK_5、QK_4、QK_2)。后者僅用于推理,而 bnb int8/int4 可用于訓(xùn)練和推理。
最后是推理和訓(xùn)練,在推理過程中,使用 HuggingFace 實(shí)現(xiàn)或用 vLLM、GGML 方法找到用于推理的 vRAM;在訓(xùn)練過程中,找到 vRAM 進(jìn)行全模型微調(diào)或使用 LoRA(目前項(xiàng)目已經(jīng)為 LoRA 配置硬編碼 r=8)、QLoRA 進(jìn)行微調(diào)。
不過,項(xiàng)目作者表示,最終結(jié)果可能會(huì)有所不同,具體取決于用戶模型、輸入的數(shù)據(jù)、CUDA 版本以及量化工具等。實(shí)驗(yàn)中,作者試著把這些因素都考慮在內(nèi),并確保最終結(jié)果在 500MB 以內(nèi)。下表是作者交叉檢查了網(wǎng)站提供的 3b、7b 和 13b 模型占用內(nèi)存與作者在 RTX 4090 和 2060 GPU 上獲得的內(nèi)存比較結(jié)果。所有值均在 500MB 以內(nèi)。
感興趣的讀者可以親自體驗(yàn)一下,假如給定的結(jié)果不準(zhǔn)確,項(xiàng)目作者表示,會(huì)對(duì)項(xiàng)目進(jìn)行及時(shí)優(yōu)化,完善項(xiàng)目。