以LLM中最常見的Adam + fp16混合精度訓練
為例,分析其顯存占用有以下四個部分:
?
?
?
?
GPT-2含有1.5B個參數,如果用fp16格式,只需要1.5G*2Byte=3GB顯存, 但是模型狀態實際上需要耗費1.5B*16=24GB.
比如說有一個模型參數量是1M,在一般的深度學習框架中(比如說PyTorch),一般是32位存儲。32位存儲的意思就是1個參數用32個bit來存儲。那么這個擁有1M參數量的模型所需要的存儲空間的大小即為:1M * 32 bit = 32Mb =?1M * 4Byte =??4MB。因為1 Byte = 8 bit。現在的quantization技術就是減少參數量所占的位數:比如我用16位存儲,那么:所需要的存儲空間的大小即為:1M * 16 bit = 16Mb = 2MB。
結論如下:
- 不考慮Activation,3090的模型容量上限是 24/16=1.5B,A100的模型容量上限是 80/16=5B
- 假設訓練的過程中batchsize恒定為1,也即盡最大可能減少Activation在顯存中的占用比例,使得我們的理論計算值
16Φ
更接近真實的顯存占用,那么24G的3090的模型容量上限是1.5B(差不多是GPT-2的水平),80G的A100的模型容量上限是5B
- 假設訓練的過程中batchsize恒定為1,也即盡最大可能減少Activation在顯存中的占用比例,使得我們的理論計算值
- 考慮Activation,3090的模型容量上限是 0.75B,A100的容量上限是 2.5B
- batchsize為1的訓練效率非常低,batchsize大于1才能充分發揮GPU的效率,此時Activation變得不可忽略。經驗之談,一般需要給Activation預留一半的顯存空間(比如3090預留12G,A100預留40G),此時3090的模型容量上限是0.75B,A100的容量上限是2.5B,我們實際測試結果接近這個值
- 激活在訓練中會消耗大量的顯存。一個具體的例子,模型為1.5B的GPT-2,序列長度為1K,batch size為32,則消耗顯存為60GB。
- [1B, 5B] 是目前市面上大多數GPU卡的分水嶺區間
- [0, 1B) 市面上絕大多數卡都可以直接硬train一發
- [1B, 5B] 大多數卡在這個區間的某個值上觸發模型容量上限,具體觸發值和顯存大小有關
- (5B, ~) 目前沒有卡能裸訓
LLM Training GPU顯存耗用量估計 - 知乎 (zhihu.com)?
[深度學習]大模型訓練之框架篇-DeepSpeed_奇思聞影的舒克與貝克的博客-CSDN博客