PEFT: 在低資源硬件上對十億規(guī)模模型進行參數(shù)高效微調

動機
基于 Transformers 架構的大型語言模型 (LLM),如 GPT、T5 和 BERT,已經在各種自然語言處理 (NLP) 任務中取得了最先進的結果。此外,還開始涉足其他領域,例如計算機視覺 (CV) (VIT、Stable Diffusion、LayoutLM) 和音頻 (Whisper、XLS-R)。傳統(tǒng)的范式是對通用網絡規(guī)模數(shù)據(jù)進行大規(guī)模預訓練,然后對下游任務進行微調。與使用開箱即用的預訓練 LLM (例如,零樣本推理) 相比,在下游數(shù)據(jù)集上微調這些預訓練 LLM 會帶來巨大的性能提升。
然而,隨著模型變得越來越大,在消費級硬件上對模型進行全部參數(shù)的微調變得不可行。此外,為每個下游任務獨立存儲和部署微調模型變得非常昂貴,因為微調模型與原始預訓練模型的大小相同。參數(shù)高效微調(PEFT) 方法旨在解決這兩個問題!
PEFT 方法僅微調少量 (額外) 模型參數(shù),同時凍結預訓練 LLM 的大部分參數(shù),從而大大降低了計算和存儲成本。這也克服了災難性遺忘的問題,這是在 LLM 的全參數(shù)微調期間觀察到的一種現(xiàn)象。PEFT 方法也顯示出在低數(shù)據(jù)狀態(tài)下比微調更好,可以更好地泛化到域外場景。它可以應用于各種模態(tài),例如圖像分類以及 Stable diffusion dreambooth。
災難性遺忘論文地址:
https://arxiv.org/abs/1312.6211圖像分類案例:
https://github.com/huggingface/peft/tree/main/examples/image_classificationStable Diffusion Dreambooth 案例:
https://github.com/huggingface/peft/tree/main/examples/lora_dreambooth
PEFT 方法還有助于提高輕便性,其中用戶可以使用 PEFT 方法調整模型,以獲得與完全微調的大型檢查點相比,大小僅幾 MB 的微小檢查點。例如,?bigscience/mt0-xxl
?占用 40GB 的存儲空間,全參數(shù)微調將導致每個下游數(shù)據(jù)集有對應 40GB 檢查點。而使用 PEFT 方法,每個下游數(shù)據(jù)集只占用幾 MB 的存儲空間,同時實現(xiàn)與全參數(shù)微調相當?shù)男阅?。來?PEFT 方法的少量訓練權重被添加到預訓練 LLM 頂層。因此,同一個 LLM 可以通過添加小的權重來用于多個任務,而無需替換整個模型。
簡而言之,PEFT 方法使您能夠獲得與全參數(shù)微調相當?shù)男阅埽瑫r只有少量可訓練參數(shù)。
今天,我們很高興地介紹 ?? PEFT 庫。它提供了最新的參數(shù)高效微調技術,與 ?? Transformers 和 ?? Accelerate 無縫集成。這使得能夠使用來自 Transformers 的最流行和高性能的模型,以及 Accelerate 的簡單性和可擴展性。以下是目前支持的 PEFT 方法,即將推出更多:
LoRA: LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
https://arxiv.org/pdf/2106.09685.pdfPrefix Tuning: P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
https://arxiv.org/pdf/2110.07602.pdf
Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning
https://arxiv.org/pdf/2104.08691.pdfP-Tuning: GPT Understands, Too
https://arxiv.org/pdf/2103.10385.pdf
PEFT 庫地址:
https://github.com/huggingface/peft
用例
我們在GitHub PEFT 庫中探索了許多有趣的用例。以下羅列的是其中最有趣的:
使用 ?? PEFT LoRA 在具有 11GB RAM 的消費級硬件上調整?
bigscience/T0_3B
?模型 (30 億個參數(shù)),例如 Nvidia GeForce RTX 2080 Ti、Nvidia GeForce RTX 3080 等,并且使用 ?? Accelerate 的 DeepSpeed 集成: peft_lora_seq2seq_accelerate_ds_zero3_offload.py。這意味著您可以在 Google Colab 中調整如此大的 LLM。
https://github.com/huggingface/peft/blob/main/examples/conditional_generation/通過使用 ?? PEFT LoRA 和 bitsandbytes 在 Google Colab 中啟用?
OPT-6.7b
?模型 (67 億個參數(shù)) 的 INT8 調整,將前面的示例提升一個檔次: Colab 地址
https://github.com/TimDettmers/bitsandbytes在具有 11GB RAM 的消費級硬件上使用 ?? PEFT 進行穩(wěn)定的 Diffusion Dreambooth 訓練,例如 Nvidia GeForce RTX 2080 Ti、Nvidia GeForce RTX 3080 等。試用 Space 演示,它應該可以在 T4 實例 (16GB GPU) 上無縫運行: smangrul/peft-lora-sd-dreambooth。
https://hf.co/spaces/smangrul/peft-lora-sd-dreambooth
使用 ?? PEFT 訓練您的模型
讓我們考慮使用 LoRA 微調?bigscience/mt0-large
?的情況。
1. 引進必要的庫
2. 創(chuàng)建PEFT方法對應的配置
3. 通過調用?get_peft_model
?包裝基礎 ?? Transformer 模型
就是這樣!訓練循環(huán)的其余部分保持不變。有關端到端示例,請參閱示例 peft_lora_seq2seq.ipynb。
https://github.com/huggingface/peft/blob/main/examples/conditional_generation/
4. 當您準備好保存模型以供推理時,只需執(zhí)行以下操作。
這只會保存經過訓練的增量 PEFT 權重。例如,您可以在此處的?twitter_complaints
?raft 數(shù)據(jù)集上找到使用 LoRA 調整的?bigscience/T0_3B
?: smangrul/twitter_complaints_bigscience_T0_3B_LORA_SEQ_2_SEQ_LM。請注意,它只包含 2 個文件: adapter_config.json 和 adapter_model.bin,后者只有 19MB。
模型地址:
https://hf.co/smangrul/twitter_complaints_bigscience_T0_3B_LORA_SEQ_2_SEQ_LM
5. 要加載它進行推理,請遵循以下代碼片段:
下一步
我們發(fā)布了 PEFT 方法,作為在下游任務和域上調整大型 LLM 的有效方式,節(jié)省了大量計算和存儲,同時實現(xiàn)與全參數(shù)微調相當?shù)男阅堋T诮酉聛淼膸讉€月中,我們將探索更多 PEFT 方法,例如 (IA)3 和瓶頸適配器。此外,我們將關注新的用例,例如 Google Colab 中?whisper-large
?模型的 INT8 訓練以及使用 PEFT 方法調整 RLHF 組件 (例如策略和排序器)。
Whisper Large 模型鏈接:
https://huggingface.co/openai/whisper-large
與此同時,我們很高興看到行業(yè)從業(yè)者如何將 PEFT 應用于他們的用例 - 如果您有任何問題或反饋,請在我們的 GitHub 倉庫 上提出問題 ??。
PEFT GitHub 倉庫地址:
https://github.com/huggingface/peft
祝你有一趟快樂的參數(shù)高效微調之旅!
英文原文: https://hf.co/blog/peft
作者: Sourab Mangrulkar、Sayak Paul
譯者: Ada Cheng,研究方向為預訓練語言模型
審校、排版: zhongdongy (阿東)