精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

有哪些省內存的大語言模型訓練/微調/推理方法?

智能感知與物聯網技術研究所 ? 來源:智能感知與物聯網技術研 ? 2023-04-10 11:41 ? 次閱讀

大模型(LLMs)現在是 NLP 領域的最主流方法之一了。

這個趨勢帶來的主要問題之一,就是大模型的訓練/微調/推理需要的內存也越來越多。

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

本文總結一些 Memory-Efficient 的 LLMs 的訓練/微調/推理方法,包括:

● fp16

●int8

LoRA

●Gradient checkpointing

●Torch FSDP

CPU offloading

估算模型所需的RAM

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

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

首先考慮精度對所需內存的影響:

●fp32 精度,一個參數需要 32 bits, 4 bytes. ●fp16 精度,一個參數需要 16 bits, 2 bytes. ●int8 精度,一個參數需要 8 bits, 1 byte.

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

●模型參數 ●梯度 ●優化器參數

模型參數:等于參數量*每個參數所需內存。

對于 fp32,LLaMA-6B 需要 6B*4 bytes = 24GB內存

對于 int8,LLaMA-6B 需要 6B*1 byte = 6GB

梯度:同上,等于參數量*每個梯度參數所需內存。

優化器參數:不同的優化器所儲存的參數量不同。

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

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

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

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

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

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

再根據LLaMA的架構(hidden_size = 4096, intermediate_size =11008, num_hidden_layers = 32, context_length = 2048)計算中間變量內存。

每個 instance 需要:

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

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

查看消費級顯卡的內存和算力:

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

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

用 torch 實現:

CUDA Automatic Mixed Precision examples

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

torch fp16 推理:直接使用 model.half() 將模型轉換為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 是個很極端的數據類型,它最多只能表示 - 128~127 的數字,并且完全沒有精度。

為了在訓練和 inference 中使用這個數據類型,bitsandbytes 使用了兩個方法最大程度地降低了其帶來的誤差:

1. vector-wise quantization

2. mixed precision decompasition

Huggingface 在這篇文章中用動圖解釋了 quantization 的實現:

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 訓練 opt-6.5B 的完整流程:

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

LoRA

Low-Rank Adaptation 是微調 LLMs 最常用的省內存方法之一。

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

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

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

Gradient Checkpointing

在 torch 中使用 - 把 model 用一個 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 等分布優化算法,減少內存的占用量。其將模型參數,梯度和優化器狀態分布至多個 GPU 上,而非像 DDP 一樣,在每個 GPU 上保留完整副本。 CPU offload 則允許在一個 back propagation 中,將參數動態地從 GPU -> CPU, CPU -> GPU 進行轉移,從而節省 GPU 內存。 Huggingface 這篇博文解釋了 ZeRO 的大致實現方法: https://huggingface.co/blog/zero-deepspeed-fairscale

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

在這個可以查看 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

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1367

    瀏覽量

    114536
  • 參數
    +關注

    關注

    11

    文章

    1786

    瀏覽量

    32095
  • 語言模型
    +關注

    關注

    0

    文章

    508

    瀏覽量

    10245

原文標題:有哪些省內存的大語言模型訓練/微調/推理方法?

文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯網技術研究所】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

    Transformer架構,利用自注意力機制對文本進行編碼,通過預訓練監督微調和強化學習等階段,不斷提升性能,展現出強大的語言理解和生成能力。 大
    發表于 05-04 23:55

    【大語言模型:原理與工程實踐】大語言模型的預訓練

    語言模型的核心特點在于其龐大的參數量,這賦予了模型強大的學習容量,使其無需依賴微調即可適應各種下游任務,而更傾向于培養通用的處理能力。然而,隨著學習容量的增加,對預
    發表于 05-07 17:10

    【大語言模型:原理與工程實踐】大語言模型的評測

    在知識獲取、邏輯推理、代碼生成等方面的能力。這些評測基準包括語言建模能力、綜合知識能力、數學計算能力、代碼能力和垂直領域等多個維度。對于微調模型,對話能力的評測關注
    發表于 05-07 17:12

    【大語言模型:原理與工程實踐】大語言模型的應用

    。 關于大語言模型是否具備與人類“系統2”相似的能力,存在廣泛的爭議。然而,隨著模型參數量的增加和大規模預訓練的實施,大語言
    發表于 05-07 17:21

    壓縮模型會加速推理嗎?

    位壓縮和“無”配置下都運行了 115 毫秒,盡管精度有所下降。我認為將 float 網絡參數壓縮為 uint8_t 不僅可以節省內存,還可以加快推理速度。那么,壓縮模型是否應該加速推理
    發表于 01-29 06:24

    關于語言模型和對抗訓練的工作

    本文把對抗訓練用到了預訓練微調兩個階段,對抗訓練方法是針對embedding space,通過最大化對抗損失、最小化
    的頭像 發表于 11-02 15:26 ?2064次閱讀
    關于<b class='flag-5'>語言</b><b class='flag-5'>模型</b>和對抗<b class='flag-5'>訓練</b>的工作

    一種基于亂序語言模型的預訓練模型-PERT

    由于亂序語言模型不使用[MASK]標記,減輕了預訓練任務與微調任務之間的gap,并由于預測空間大小為輸入序列長度,使得計算效率高于掩碼語言
    的頭像 發表于 05-10 15:01 ?1505次閱讀

    CogBERT:腦認知指導的預訓練語言模型

    另一方面,從語言處理的角度來看,認知神經科學研究人類大腦中語言處理的生物和認知過程。研究人員專門設計了預訓練模型來捕捉大腦如何表示語言的意
    的頭像 發表于 11-03 15:07 ?1034次閱讀

    PyTorch教程16.7之自然語言推理微調BERT

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

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

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

    ChatGPT是一個好的因果推理器嗎?

    因果推理能力對于許多自然語言處理(NLP)應用至關重要。最近的因果推理系統主要基于經過微調的預訓練語言
    的頭像 發表于 01-03 09:55 ?812次閱讀
    ChatGPT是一個好的因果<b class='flag-5'>推理</b>器嗎?

    四種微調模型方法介紹

    微調(Full Fine-tuning):全微調是指對整個預訓練模型進行微調,包括所有的模型
    發表于 01-03 10:57 ?2.4w次閱讀
    四種<b class='flag-5'>微調</b>大<b class='flag-5'>模型</b>的<b class='flag-5'>方法</b>介紹

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

    ): 與稠密模型相比,預訓練速度更快 與具有相同參數數量的模型相比,具有更快的推理速度 需要大量顯存,因為所有專家系統都需要加載到內存中 在
    的頭像 發表于 01-13 09:37 ?1176次閱讀
    混合專家<b class='flag-5'>模型</b> (MoE)核心組件和<b class='flag-5'>訓練方法</b>介紹

    模型為什么要微調?大模型微調的原理

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

    語言模型的預訓練

    能力,逐漸成為NLP領域的研究熱點。大語言模型的預訓練是這一技術發展的關鍵步驟,它通過在海量無標簽數據上進行訓練,使模型學習到
    的頭像 發表于 07-11 10:11 ?389次閱讀