0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有哪些省內(nèi)存的大語言模型訓(xùn)練/微調(diào)/推理方法?

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:智能感知與物聯(lián)網(wǎng)技術(shù)研 ? 2023-04-10 11:41 ? 次閱讀

大模型(LLMs)現(xiàn)在是 NLP 領(lǐng)域的最主流方法之一了。

這個(gè)趨勢(shì)帶來的主要問題之一,就是大模型的訓(xùn)練/微調(diào)/推理需要的內(nèi)存也越來越多。

舉例來說,即使 RTX 3090 有著 24GB 的 RAM,是除了 A100 之外顯存最大的顯卡。但使用一塊 RTX 3090 依然無法 fp32 精度訓(xùn)練最小號(hào)的 LLaMA-6B。

本文總結(jié)一些 Memory-Efficient 的 LLMs 的訓(xùn)練/微調(diào)/推理方法,包括:

● fp16

●int8

LoRA

●Gradient checkpointing

●Torch FSDP

CPU offloading

估算模型所需的RAM

首先,我們需要了解如何根據(jù)參數(shù)量估計(jì)模型大致所需的 RAM,這在實(shí)踐中有很重要的參考意義。我們需要通過估算設(shè)置 batch_size,設(shè)置模型精度,選擇微調(diào)方法和參數(shù)分布方法等。

接下來,我們用LLaMA-6B模型為例估算其大致需要的內(nèi)存。

首先考慮精度對(duì)所需內(nèi)存的影響:

●fp32 精度,一個(gè)參數(shù)需要 32 bits, 4 bytes. ●fp16 精度,一個(gè)參數(shù)需要 16 bits, 2 bytes. ●int8 精度,一個(gè)參數(shù)需要 8 bits, 1 byte.

其次,考慮模型需要的 RAM 大致分三個(gè)部分:

●模型參數(shù) ●梯度 ●優(yōu)化器參數(shù)

模型參數(shù):等于參數(shù)量*每個(gè)參數(shù)所需內(nèi)存。

對(duì)于 fp32,LLaMA-6B 需要 6B*4 bytes = 24GB內(nèi)存

對(duì)于 int8,LLaMA-6B 需要 6B*1 byte = 6GB

梯度:同上,等于參數(shù)量*每個(gè)梯度參數(shù)所需內(nèi)存。

優(yōu)化器參數(shù):不同的優(yōu)化器所儲(chǔ)存的參數(shù)量不同。

對(duì)于常用的 AdamW 來說,需要儲(chǔ)存兩倍的模型參數(shù)(用來儲(chǔ)存一階和二階momentum)。

fp32 的 LLaMA-6B,AdamW 需要 6B*8 bytes = 48 GB

int8 的 LLaMA-6B,AdamW 需要 6B*2 bytes = 12 GB

除此之外,CUDA kernel也會(huì)占據(jù)一些 RAM,大概 1.3GB 左右,查看方式如下。

c4f8bafc-d6f1-11ed-bfe3-dac502259ad0.png

綜上,int8 精度的 LLaMA-6B 模型部分大致需要 6GB+6GB+12GB+1.3GB = 25.3GB 左右。

再根據(jù)LLaMA的架構(gòu)(hidden_size = 4096, intermediate_size =11008, num_hidden_layers = 32, context_length = 2048)計(jì)算中間變量?jī)?nèi)存。

每個(gè) instance 需要:

c5034a94-d6f1-11ed-bfe3-dac502259ad0.png

所以一張 A100(80GB RAM)大概可以在 int8 精度;batch_size = 50 的設(shè)定下進(jìn)行全參數(shù)訓(xùn)練。

查看消費(fèi)級(jí)顯卡的內(nèi)存和算力:

2023 GPU Benchmark and Graphics Card Comparison Chart

https://www.gpucheck.com/gpu-benchmark-graphics-card-comparison-chart

Fp16-mixed precision

c512e8aa-d6f1-11ed-bfe3-dac502259ad0.png

混合精度訓(xùn)練的大致思路是在 forward pass 和 gradient computation 的時(shí)候使用 fp16 來加速,但是在更新參數(shù)時(shí)使用 fp32。

用 torch 實(shí)現(xiàn):

CUDA Automatic Mixed Precision examples

https://pytorch.org/docs/stable/notes/amp_examples.html

torch fp16 推理:直接使用 model.half() 將模型轉(zhuǎn)換為fp16.

c52cbdca-d6f1-11ed-bfe3-dac502259ad0.png

使用 Huggingface Transformers:在 TrainingArguments 里聲明 fp16=True

https://huggingface.co/docs/transformers/perf_train_gpu_one#fp16-training

Int8-bitsandbytes

Int8 是個(gè)很極端的數(shù)據(jù)類型,它最多只能表示 - 128~127 的數(shù)字,并且完全沒有精度。

為了在訓(xùn)練和 inference 中使用這個(gè)數(shù)據(jù)類型,bitsandbytes 使用了兩個(gè)方法最大程度地降低了其帶來的誤差:

1. vector-wise quantization

2. mixed precision decompasition

Huggingface 在這篇文章中用動(dòng)圖解釋了 quantization 的實(shí)現(xiàn):

https://huggingface.co/blog/hf-bitsandbytes-integration

論文:

LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scalehttps://arxiv.org/abs/2208.07339

借助 Huggingface PEFT,使用 int8 訓(xùn)練 opt-6.5B 的完整流程:

https://github.com/huggingface/peft/blob/main/examples/int8_training/Finetune_opt_bnb_peft.ipynb

LoRA

Low-Rank Adaptation 是微調(diào) LLMs 最常用的省內(nèi)存方法之一。

c54e2406-d6f1-11ed-bfe3-dac502259ad0.png

LoRA 發(fā)現(xiàn)再微調(diào) LLMs 時(shí),更新矩陣(update matrix)往往特別 sparse,也就是說 update matrix 是低秩矩陣。LoRA 的作者根據(jù)這一特點(diǎn)將 update matrix reparametrize 為兩個(gè)低秩矩陣的積積 。 其中,,A 和 B 的秩為 r,且 。 如此一來,A+B 的參數(shù)量將大大小于 . LoRA 的論文: https://arxiv.org/pdf/2106.09685.pdf

借助 Huggingface PEFT 框架,使用 LoRA 微調(diào) mt0: https://github.com/huggingface/peft/blob/main/examples/conditional_generation/peft_lora_seq2seq.ipynb

Gradient Checkpointing

在 torch 中使用 - 把 model 用一個(gè) customize 的 function 包裝一下即可,詳見:

Explore Gradient-Checkpointing in PyTorch

https://qywu.github.io/2019/05/22/explore-gradient-checkpointing.html 在 Huggingface Transformers 中使用: https://huggingface.co/docs/transformers/v4.27.2/en/perf_train_gpu_one#gradient-checkpointing

Torch FSDP+CPU offload

Fully Sharded Data Paralle(FSDP)和 DeepSpeed 類似,均通過 ZeRO 等分布優(yōu)化算法,減少內(nèi)存的占用量。其將模型參數(shù),梯度和優(yōu)化器狀態(tài)分布至多個(gè) GPU 上,而非像 DDP 一樣,在每個(gè) GPU 上保留完整副本。 CPU offload 則允許在一個(gè) back propagation 中,將參數(shù)動(dòng)態(tài)地從 GPU -> CPU, CPU -> GPU 進(jìn)行轉(zhuǎn)移,從而節(jié)省 GPU 內(nèi)存。 Huggingface 這篇博文解釋了 ZeRO 的大致實(shí)現(xiàn)方法: https://huggingface.co/blog/zero-deepspeed-fairscale

借助 torch 實(shí)現(xiàn) FSDP,只需要將 model 用 FSDPwarp 一下;同樣,cpu_offload 也只需要一行代碼: https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/

在這個(gè)可以查看 FSDP 支持的模型: https://pytorch.org/docs/stable/fsdp.html

在 Huggingface Transformers 中使用 Torch FSDP: https://huggingface.co/docs/transformers/v4.27.2/en/main_classes/trainer#transformers.Trainin

根據(jù)某些 issue,shard_grad_op(只分布保存 optimizer states 和 gradients)模式可能比 fully_shard 更穩(wěn)定: https://github.com/tatsu-lab/stanford_alpaca/issues/32

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1351

    瀏覽量

    114372
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1733

    瀏覽量

    31982
  • 語言模型
    +關(guān)注

    關(guān)注

    0

    文章

    491

    瀏覽量

    10225

原文標(biāo)題:有哪些省內(nèi)存的大語言模型訓(xùn)練/微調(diào)/推理方法?

文章出處:【微信號(hào):tyutcsplab,微信公眾號(hào):智能感知與物聯(lián)網(wǎng)技術(shù)研究所】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【大語言模型:原理與工程實(shí)踐】揭開大語言模型的面紗

    Transformer架構(gòu),利用自注意力機(jī)制對(duì)文本進(jìn)行編碼,通過預(yù)訓(xùn)練監(jiān)督微調(diào)和強(qiáng)化學(xué)習(xí)等階段,不斷提升性能,展現(xiàn)出強(qiáng)大的語言理解和生成能力。 大
    發(fā)表于 05-04 23:55

    【大語言模型:原理與工程實(shí)踐】大語言模型的預(yù)訓(xùn)練

    語言模型的核心特點(diǎn)在于其龐大的參數(shù)量,這賦予了模型強(qiáng)大的學(xué)習(xí)容量,使其無需依賴微調(diào)即可適應(yīng)各種下游任務(wù),而更傾向于培養(yǎng)通用的處理能力。然而,隨著學(xué)習(xí)容量的增加,對(duì)預(yù)
    發(fā)表于 05-07 17:10

    【大語言模型:原理與工程實(shí)踐】大語言模型的評(píng)測(cè)

    在知識(shí)獲取、邏輯推理、代碼生成等方面的能力。這些評(píng)測(cè)基準(zhǔn)包括語言建模能力、綜合知識(shí)能力、數(shù)學(xué)計(jì)算能力、代碼能力和垂直領(lǐng)域等多個(gè)維度。對(duì)于微調(diào)模型,對(duì)話能力的評(píng)測(cè)關(guān)注
    發(fā)表于 05-07 17:12

    【大語言模型:原理與工程實(shí)踐】大語言模型的應(yīng)用

    。 關(guān)于大語言模型是否具備與人類“系統(tǒng)2”相似的能力,存在廣泛的爭(zhēng)議。然而,隨著模型參數(shù)量的增加和大規(guī)模預(yù)訓(xùn)練的實(shí)施,大語言
    發(fā)表于 05-07 17:21

    壓縮模型會(huì)加速推理嗎?

    位壓縮和“無”配置下都運(yùn)行了 115 毫秒,盡管精度有所下降。我認(rèn)為將 float 網(wǎng)絡(luò)參數(shù)壓縮為 uint8_t 不僅可以節(jié)省內(nèi)存,還可以加快推理速度。那么,壓縮模型是否應(yīng)該加速推理
    發(fā)表于 01-29 06:24

    關(guān)于語言模型和對(duì)抗訓(xùn)練的工作

    本文把對(duì)抗訓(xùn)練用到了預(yù)訓(xùn)練微調(diào)兩個(gè)階段,對(duì)抗訓(xùn)練方法是針對(duì)embedding space,通過最大化對(duì)抗損失、最小化
    的頭像 發(fā)表于 11-02 15:26 ?2039次閱讀
    關(guān)于<b class='flag-5'>語言</b><b class='flag-5'>模型</b>和對(duì)抗<b class='flag-5'>訓(xùn)練</b>的工作

    一種基于亂序語言模型的預(yù)訓(xùn)練模型-PERT

    由于亂序語言模型不使用[MASK]標(biāo)記,減輕了預(yù)訓(xùn)練任務(wù)與微調(diào)任務(wù)之間的gap,并由于預(yù)測(cè)空間大小為輸入序列長(zhǎng)度,使得計(jì)算效率高于掩碼語言
    的頭像 發(fā)表于 05-10 15:01 ?1463次閱讀

    CogBERT:腦認(rèn)知指導(dǎo)的預(yù)訓(xùn)練語言模型

    另一方面,從語言處理的角度來看,認(rèn)知神經(jīng)科學(xué)研究人類大腦中語言處理的生物和認(rèn)知過程。研究人員專門設(shè)計(jì)了預(yù)訓(xùn)練模型來捕捉大腦如何表示語言的意
    的頭像 發(fā)表于 11-03 15:07 ?1004次閱讀

    PyTorch教程16.7之自然語言推理微調(diào)BERT

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程16.7之自然語言推理微調(diào)BERT.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 10:52 ?0次下載
    PyTorch教程16.7之自然<b class='flag-5'>語言</b><b class='flag-5'>推理</b>:<b class='flag-5'>微調(diào)</b>BERT

    從原理到代碼理解語言模型訓(xùn)練推理,通俗易懂,快速修煉LLM

    要理解大語言模型(LLM),首先要理解它的本質(zhì),無論預(yù)訓(xùn)練、微調(diào)還是在推理階段,核心都是next token prediction,也就是以
    的頭像 發(fā)表于 09-19 16:25 ?1202次閱讀
    從原理到代碼理解<b class='flag-5'>語言</b><b class='flag-5'>模型</b><b class='flag-5'>訓(xùn)練</b>和<b class='flag-5'>推理</b>,通俗易懂,快速修煉LLM

    ChatGPT是一個(gè)好的因果推理器嗎?

    因果推理能力對(duì)于許多自然語言處理(NLP)應(yīng)用至關(guān)重要。最近的因果推理系統(tǒng)主要基于經(jīng)過微調(diào)的預(yù)訓(xùn)練語言
    的頭像 發(fā)表于 01-03 09:55 ?769次閱讀
    ChatGPT是一個(gè)好的因果<b class='flag-5'>推理</b>器嗎?

    四種微調(diào)模型方法介紹

    微調(diào)(Full Fine-tuning):全微調(diào)是指對(duì)整個(gè)預(yù)訓(xùn)練模型進(jìn)行微調(diào),包括所有的模型
    發(fā)表于 01-03 10:57 ?2.3w次閱讀
    四種<b class='flag-5'>微調(diào)</b>大<b class='flag-5'>模型</b>的<b class='flag-5'>方法</b>介紹

    混合專家模型 (MoE)核心組件和訓(xùn)練方法介紹

    ): 與稠密模型相比,預(yù)訓(xùn)練速度更快 與具有相同參數(shù)數(shù)量的模型相比,具有更快的推理速度 需要大量顯存,因?yàn)樗袑<蚁到y(tǒng)都需要加載到內(nèi)存中 在
    的頭像 發(fā)表于 01-13 09:37 ?1111次閱讀
    混合專家<b class='flag-5'>模型</b> (MoE)核心組件和<b class='flag-5'>訓(xùn)練方法</b>介紹

    模型為什么要微調(diào)?大模型微調(diào)的原理

    在人工智能(AI)領(lǐng)域,特別是自然語言處理(NLP)領(lǐng)域,大模型(如BERT、GPT系列等)的出現(xiàn)為許多復(fù)雜任務(wù)提供了強(qiáng)大的解決方案。然而,這些預(yù)訓(xùn)練的大模型雖然具有廣泛的適用性,但在
    的頭像 發(fā)表于 07-10 10:43 ?2722次閱讀

    語言模型的預(yù)訓(xùn)練

    能力,逐漸成為NLP領(lǐng)域的研究熱點(diǎn)。大語言模型的預(yù)訓(xùn)練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過在海量無標(biāo)簽數(shù)據(jù)上進(jìn)行訓(xùn)練,使模型學(xué)習(xí)到
    的頭像 發(fā)表于 07-11 10:11 ?319次閱讀