使用 LoRA 和 Hugging Face 高效訓練大語言模型

在本文中,我們將展示如何使用 大語言模型低秩適配 (Low-Rank Adaptation of Large Language Models,LoRA) ?技術(shù)在單 GPU 上微調(diào) 110 億參數(shù)的 FLAN-T5 XXL 模型。在此過程中,我們會使用到 Hugging Face 的 Transformers、Accelerate 和 PEFT 庫。
大語言模型低秩適配論文: https://arxiv.org/abs/2106.09685
Transformers: https://hf.co/docs/transformers/index
Accelerate: https://hf.co/docs/accelerate/index
PEFT: https://github.com/huggingface/peft
通過本文,你會學到:
如何搭建開發(fā)環(huán)境
如何加載并準備數(shù)據(jù)集
如何使用 LoRA 和 bnb (即 bitsandbytes) int-8 微調(diào) T5
如何評估 LoRA FLAN-T5 并將其用于推理
如何比較不同方案的性價比
快速入門: 輕量化微調(diào) (Parameter Efficient Fine-Tuning,PEFT)
PEFT 是 Hugging Face 的一個新的開源庫。使用 PEFT 庫,無需微調(diào)模型的全部參數(shù),即可高效地將預訓練語言模型 (Pre-trained Language Model,PLM) 適配到各種下游應用。PEFT 目前支持以下幾種方法:https://github.com/huggingface/peft
LoRA: LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELShttps://arxiv.org/pdf/2106.09685.pdf
Prefix Tuning: P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Taskshttps://arxiv.org/pdf/2110.07602.pdf
P-Tuning: GPT Understands, Toohttps://arxiv.org/pdf/2103.10385.pdf
Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuninghttps://arxiv.org/pdf/2104.08691.pdf
注意: 本教程是在 g5.2xlarge AWS EC2 實例上創(chuàng)建和運行的,該實例包含 1 個 NVIDIA A10G。
1. 搭建開發(fā)環(huán)境
在本例中,我們使用 AWS 預置的 PyTorch 深度學習 AMI,其已安裝了正確的 CUDA 驅(qū)動程序和 PyTorch。在此基礎(chǔ)上,我們還需要安裝一些 Hugging Face 庫,包括 transformers 和 datasets。運行下面的代碼就可安裝所有需要的包。https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-pytorch.html
2. 加載并準備數(shù)據(jù)集
這里,我們使用 samsum 數(shù)據(jù)集,該數(shù)據(jù)集包含大約 16k 個含摘要的聊天類對話數(shù)據(jù)。這些對話由精通英語的語言學家制作。https://hf.co/datasets/samsum
我們使用 ?? Datasets 庫中的?load_dataset()
?方法來加載?samsum
?數(shù)據(jù)集。
為了訓練模型,我們要用 ?? Transformers Tokenizer 將輸入文本轉(zhuǎn)換為詞元 ID。如果你需要了解這一方面的知識,請移步 Hugging Face 課程的?第 6 章。https://hf.co/course/chapter6/1?fw=tf
在開始訓練之前,我們還需要對數(shù)據(jù)進行預處理。生成式文本摘要屬于文本生成任務。我們將文本輸入給模型,模型會輸出摘要。我們需要了解輸入和輸出文本的長度信息,以利于我們高效地批量處理這些數(shù)據(jù)。
我們將在訓練前統(tǒng)一對數(shù)據(jù)集進行預處理并將預處理后的數(shù)據(jù)集保存到磁盤。你可以在本地機器或 CPU 上運行此步驟并將其上傳到 Hugging Face Hub。https://hf.co/docs/hub/datasets-overview
3. 使用 LoRA 和 bnb int-8 微調(diào) T5
除了 LoRA 技術(shù),我們還使用 bitsanbytes LLM.int8() 把凍結(jié)的 LLM 量化為 int8。這使我們能夠?qū)?FLAN-T5 XXL 所需的內(nèi)存降低到約四分之一。https://hf.co/blog/hf-bitsandbytes-integration
訓練的第一步是加載模型。我們使用 philschmid/flan-t5-xxl-sharded-fp16 模型,它是 google/flan-t5-xxl 的分片版。分片可以讓我們在加載模型時不耗盡內(nèi)存。
philschmid/flan-t5-xxl-sharded-fp16:https://hf.co/philschmid/flan-t5-xxl-sharded-fp16
google/flan-t5-xxl:https://hf.co/google/flan-t5-xxl
現(xiàn)在,我們可以使用?peft
?為 LoRA int-8 訓練作準備了。
如你所見,這里我們只訓練了模型參數(shù)的 0.16%!這個巨大的內(nèi)存增益讓我們安心地微調(diào)模型,而不用擔心內(nèi)存問題。
接下來需要創(chuàng)建一個?DataCollator
,負責對輸入和標簽進行填充,我們使用 ?? Transformers 庫中的?DataCollatorForSeq2Seq
?來完成這一環(huán)節(jié)。
最后一步是定義訓練超參 (?TrainingArguments
)。
運行下面的代碼,開始訓練模型。請注意,對于 T5,出于收斂穩(wěn)定性考量,某些層我們?nèi)员3?span id="s0sssss00s" class="Apple-converted-space">?float32
?精度。
訓練耗時約 10 小時 36 分鐘,訓練 10 小時的成本約為?13.22 美元
。相比之下,如果 在 FLAN-T5-XXL 上進行全模型微調(diào) 10 個小時,我們需要 8 個 A100 40GB,成本約為 322 美元。https://www.philschmid.de/fine-tune-flan-t5-deepspeed
我們可以將模型保存下來以用于后面的推理和評估。我們暫時將其保存到磁盤,但你也可以使用?model.push_to_hub
?方法將其上傳到 Hugging Face Hub。https://hf.co/docs/hub/main
最后生成的 LoRA checkpoint 文件很小,僅需 84MB 就包含了從?samsum
?數(shù)據(jù)集上學到的所有知識。
4. 使用 LoRA FLAN-T5 進行評估和推理
我們將使用?evaluate
?庫來評估?rogue
?分數(shù)。我們可以使用?PEFT
?和 ?transformers
來對 FLAN-T5 XXL 模型進行推理。對 FLAN-T5 XXL 模型,我們至少需要 18GB 的 GPU 顯存。
我們用測試數(shù)據(jù)集中的一個隨機樣本來試試摘要效果。
不錯!我們的模型有效!現(xiàn)在,讓我們仔細看看,并使用?test
?集中的全部數(shù)據(jù)對其進行評估。為此,我們需要實現(xiàn)一些工具函數(shù)來幫助生成摘要并將其與相應的參考摘要組合到一起。評估摘要任務最常用的指標是 rogue_score,它的全稱是 Recall-Oriented Understudy for Gisting Evaluation。與常用的準確率指標不同,它將生成的摘要與一組參考摘要進行比較。
我們 PEFT 微調(diào)后的 FLAN-T5-XXL 在測試集上取得了?50.38%
?的 rogue1 分數(shù)。相比之下,flan-t5-base 的全模型微調(diào)獲得了 47.23 的 rouge1 分數(shù)。rouge1 分數(shù)提高了?3%
。
令人難以置信的是,我們的 LoRA checkpoint 只有 84MB,而且性能比對更小的模型進行全模型微調(diào)后的 checkpoint 更好。
你可以打開鏈接:https://ipynb.cn/github/huggingface-cn/translation/blob/main/philschmid/2023-03-23-fine-tune-flan-t5-peft.ipynb?在線查看此博文對應的 Jupyter Notebook。
英文原文:?https://www.philschmid.de/fine-tune-flan-t5-peft
原文作者:Philipp Schmid
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態(tài)數(shù)據(jù)上的應用及大規(guī)模模型的訓練推理。
排版/審校: zhongdongy (阿東)