PEFT - 安裝及簡單使用

LLM、AIGC、RAG 開發交流裙:377891973


文章目錄

    • 一、關于 PEFT
    • 二、安裝
      • 1、使用 PyPI 安裝
      • 2、使用源碼安裝
    • 三、快速開始
      • 1、訓練
      • 2、保存模型
      • 3、推理
      • 4、后續步驟


本文翻譯整理自:https://huggingface.co/docs/peft/index


一、關于 PEFT

🤗PEFT(Parameter-Efficient Fine-Tuning 參數高效微調)是一個庫,用于有效地將大型預訓練模型適應各種目標端應用,而無需微調模型的所有參數,因為它成本過高。
PEFT方法僅微調少量(額外)模型參數——顯著降低計算和存儲成本——同時產生與完全微調模型相當的性能。
這使得在消費硬件上訓練和存儲大型語言模型(LLM)更容易。

PEFT與Transformer、擴散器和加速庫集成,提供了一種更快、更簡單的方法來加載、訓練和使用大型模型進行推理。


二、安裝

PEFT 在 Python3.8+ 上經過測試。

🤗PEFT可從PyPI和GitHub上獲得:


1、使用 PyPI 安裝

要從PyPI安裝🤗PEFT:

pip install peft

2、使用源碼安裝

每天都會添加尚未發布的新功能,這也意味著可能存在一些錯誤。
要試用它們,請從GitHub存儲庫安裝:

pip install git+https://github.com/huggingface/peft

如果您正在努力為庫做出貢獻,或者希望使用源碼并觀看直播 結果當您運行代碼時,可以從本地克隆的版本安裝可編輯的版本 存儲庫:

git clone https://github.com/huggingface/peft
cd peft
pip install -e .

三、快速開始

https://huggingface.co/docs/peft/quicktour

PEFT提供了參數有效的方法 來微調大型預訓練模型。
傳統的范式是為每個下游任務微調模型的所有參數,但是由于當今模型中的參數數量巨大,這變得非常昂貴和不切實際。
相反,訓練更少數量的提示參數 或 使用低秩自適應(LoRA)等重新參數化方法 來減少可訓練參數的數量會更有效。

本快速導覽將向您展示PEFT的主要功能,以及如何在消費設備上通常無法訪問的大型模型上訓練或運行推理。


1、訓練

每個PEFT方法都由一個PeftConfig類定義,該類存儲了構建PeftModel的所有重要參數。
例如,要使用LoRA進行訓練,請加載并創建一個LoraConfig類并指定以下參數:

  • task_type:要訓練的任務(在這種情況下sequence-to-sequence語言模型化)
  • inference_mode無論你是否使用模型進行推理
  • r:低秩矩陣的維度
  • lora_alpha:低秩矩陣的縮放因子
  • lora_dropout:LoRA層的暫退法概率

from peft import LoraConfig, TaskTypepeft_config = LoraConfig(task_type=TaskType.SEQ_2_SEQ_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1)

請參閱LoraConfig參考,了解有關您可以調整的其他參數的更多詳細信息,例如要定位的模塊或偏置類型。

設置LoraConfig后,使用get_peft_model()函數創建一個PeftModel。
它需要一個基本模型 —— 您可以從Transformer庫中加載,LoraConfig 包含 如何配置模型 以使用LoRA進行訓練的參數。


加載要微調的基本模型。

from transformers import AutoModelForSeq2SeqLMmodel = AutoModelForSeq2SeqLM.from_pretrained("bigscience/mt0-large")

使用get_peft_model() 函數包裝基本模型和 peft_config 以創建PeftModel。
要了解模型中可訓練參數的數量,請使用print_trainable_parameters方法。

from peft import get_peft_modelmodel = get_peft_model(model, peft_config)
model.print_trainable_parameters()
"output: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"

在 bigscience/mt0-large’s 1.2B 參數中,您只訓練了其中的 0.19%!

就是這樣🎉!


現在你可以用 Transformer Trainer、Accelerate 或任何自定義PyTorch 訓練循環來訓練模型。

例如,要使用Trainer類進行訓練,請使用一些訓練超參數設置一個TrainingArguments類。

training_args = TrainingArguments(output_dir="your-name/bigscience/mt0-large-lora",learning_rate=1e-3,per_device_train_batch_size=32,per_device_eval_batch_size=32,num_train_epochs=2,weight_decay=0.01,evaluation_strategy="epoch",save_strategy="epoch",load_best_model_at_end=True,
)

將模型、訓練參數、數據集、標記器和任何其他必要的組件 傳遞給Trainer,并調用 train 開始訓練。

trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,data_collator=data_collator,compute_metrics=compute_metrics,
)trainer.train()

2、保存模型

模型完成訓練后,可以使用save_pretrained函數將模型保存到目錄中。

model.save_pretrained("output_dir")

您還可以使用push_to_hub函數將模型保存到 Hub (確保您已登錄到您的擁抱臉帳戶)。

from huggingface_hub import notebook_loginnotebook_login()
model.push_to_hub("your-name/bigscience/mt0-large-lora")

這兩種方法都只保存經過訓練的額外PEFT權重,這意味著存儲、傳輸和加載效率極高。

例如,這個用LoRA訓練的facebook/opt-350m模型只包含兩個文件:adapter_config.jsonadapter_model.safetensors
adapter_model.safetensors 文件只有6.3MB!

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

存儲在 Hub 上的350m模型的適配器權重只有約6MB,而模型權重的完整大小可以約700MB。


3、推理

查看AutoPeftModelAPI參考以獲取可用AutoPeftModel類的完整列表。

使用AutoPeftModel類和from_pretrained方法輕松加載任何經過PEFT訓練的推理模型:

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torchmodel = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")model = model.to("cuda")
model.eval()
inputs = tokenizer("Preheat the oven to 350 degrees and place the cookie dough", return_tensors="pt")outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
print(tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)[0])"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."

對于AutoPeftModelFor類未明確支持的其他任務(例如自動語音識別),您仍然可以使用基礎 AutoPeftModel類來加載任務的模型。

from peft import AutoPeftModelmodel = AutoPeftModel.from_pretrained("smangrul/openai-whisper-large-v2-LORA-colab")

4、后續步驟

現在您已經了解了如何使用其中一種PEFT方法訓練模型,我們鼓勵您嘗試一些其他方法,例如 prompt tuning。
這些步驟與快速導覽中顯示的步驟非常相似:

  1. 準備一個PeftConfig用于PEFT方法
  2. 使用get_peft_model()方法從配置和基本模型創建PeftModel

然后你可以隨心所欲地訓練它!要加載PEFT模型進行推理,可以使用AutoPeftModel類。

如果您有興趣為特定任務(如語義分割、多語言自動語音識別、DreamBooth、代幣分類等)使用另一種PEFT方法訓練模型,請隨意查看任務指南。


伊織 2024-07-05

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41457.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算力共享解決方案

目錄 算力共享解決方案 一、引言 二、目標 三、技術架構 一、基礎設施層 二、服務層 三、應用層 四、實施步驟 五、安全與隱私保護 六、經濟模型(信用評估-博弈論) 算力共享解決方案 一、引言 背景分析: 隨著大數據、人工智能、區塊鏈等技術的飛速發展&…

BugKu-WEB-sodirty

目錄 前言 正文 信息收集 代碼審計 驗證 結尾 前言 七月始,暑假副本也正式開啟 正文 信息收集 看著貌似沒啥意義 看樣子是有備份文件 下載下來 快速審計一下 代碼審計 來吧 app.js沒啥東西,主要是功能是實現error 我們找一找有沒有index.js 找到了 \www\routes\in…

MySQL的Docker部署方式

說明:Docker部署MySQL主要是簡單快速,不會對電腦系統造成污染。假如你的本地沒有Docker,或者你不會使用Docker,則使用PyCharm去啟動MySQL,或者直接在本機安裝MySQL都是可以的。最重要的是,你要有一個MySQL環境&#xf…

使用 Git Hooks 防止敏感信息泄露

歡迎關注公眾號:冬瓜白 在日常開發中,我們可能會不小心將敏感信息提交到 Git。為了防止這種情況,可以利用 Git Hooks 編寫一個簡單的腳本,當發現提交中包含敏感詞時,給出提示。 以下是一個基于 pre-commit 鉤子的示例…

踩坑:Unity導出WebGL發布到手機上豎屏時強制顯示橫屏

具體的適配問題 公司的項目需要將游戲導出WebGL 發布到Web平臺 本以為是個很簡單的事情 誰知道卻被個橫豎屏適配搞的頭暈 畢竟只有大學淺淺的學了下HTML這門語言 出來工作后基本上都是在跟C# Lua打交道 言歸正傳 看看具體問題吧 游戲如果從橫屏進入 基本上不會有什么適配問題…

C++ 多進程多線程間通信

目錄 一、進程間通信 1、管道(Pipe) 2、消息隊列(Message Queue) 3、共享內存(Shared Memory) 4、信號量(Semaphore) 5、套接字(Socket) 6、信號&…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文發表于:ICML22 推薦指數: #paper/??? 問題背景: 異配圖的鄰接矩陣難以確定,以及異配圖的計算復雜度開銷大 可行的解決辦法:高通濾波多跳鄰居,GPRGNN(pagerank一類,各階鄰居的權重不同,ACM-GCN(高低通濾波,H2GCN(應該復雜度很大&…

碳課堂|搞清楚碳足跡,只看這篇文章就夠了

碳足跡管理是碳達峰碳中和的重要政策工具,2023年12月,國家發展改革委、工信部、國家市場監管總局、住房城鄉建設部、交通運輸部等部門聯合印發《關于加快建立產品碳足跡管理體系的意見》,對產品碳足跡管理各項重點任務作出系統部署。 推動碳…

音樂播放器

目錄 一、設計目標二、實現流程1. 數據庫操作2. 后端功能實現3. 前端UI界面實現4. 程序入口 三、項目收獲 一、設計目標 1. 模擬網易云音樂,實現本地音樂盒。 2. 功能分析: 登錄功能窗口顯示加載本地音樂建立播放列表播放音樂刪除播放列表音樂 3.設計思…

通過Java調用OceanBase云平臺API

最近由于工作原因又開始搗鼓OceanBase,OceanBase云平臺(OCP)提供了強大的管理和監控功能,而且對外開放API接口,可以將部分監控整合到自己的平臺,所以寫了個Java調用OCP API的demo做為自己的技術儲備,也想分享給大家。也…

linux下mysql的定時備份

備份是容災的基礎,是指為了防止系統出現操作或系統故障導致數據丟失,而將全部或部分數據集合從應用主機的硬盤或陣列復制到其他的存儲介質的過程為什么備份 硬件故障軟件故障誤操作病毒入侵保留歷史記錄災難性事件 存儲介質 光盤磁帶硬盤磁盤陣列DAS:直接…

[leetcode]文件組合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

一些你可能不知道的前端小優化- ??(?????)

前言 以前寫css和html和一些原生DOM操作&#xff0c;感覺寫完就完事了。從來沒有考慮過一些性能優化的問題&#xff0c;剛好最近學完了瀏覽器的事件循環和瀏覽器的工作流程。今天大家分享一些我剛學習到的前端小優化。 瀏覽器的工作流程 瀏覽器的渲染過程大致分為以下幾個階…

Windows 11內置一鍵系統備份與還原 輕松替代Ghost

面對系統崩潰、惡意軟件侵襲或其他不可預見因素導致的啟動失敗&#xff0c;Windows 7~Windows 11內置的系統映像功能能夠迅速將您的系統恢復至健康狀態&#xff0c;確保工作的連續性和數據的完整性。 Windows內置3種備份策略 U盤備份&#xff1a;便攜且安全 打開“創建一個恢…

Ubuntu20.04突然沒網的一種解決辦法

本來要學一下點云地圖處理&#xff0c;用octomap庫&#xff0c;但是提示少了octomap-server庫&#xff0c;然后通過下面命令安裝的時候&#xff1a; sudo apt install ros-noetic-octomap-server 提示&#xff1a;錯誤:7 https://mirrors.ustc.edu.cn/ubuntu focal-security …

MWC上海展 | 創新微MinewSemi攜ME54系列新品亮相Nordic展臺

6月28日&#xff0c; 2024MWC上海圓滿落幕&#xff0c;此次盛會吸引了來自全球124個國家及地區的近40,000名與會者。本屆大會以“未來先行&#xff08;Future First&#xff09;”為主題&#xff0c;聚焦“超越5G”“人工智能經濟”“數智制造”三大子主題&#xff0c;探索討論…

leetcode熱題HOT42. 接雨水

一、問題描述&#xff1a; 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 二、解題思路&#xff1a; 思路1&#xff1a;通過動態規劃的預處理方式&#xff0c;分別計算每個柱子左右兩側的最大高度&…

js數據庫多級分類按樹形結構打印

可以使用 JavaScript 來按層級打印 categories 數組。首先&#xff0c;需要將這個數組轉換成一個樹形結構&#xff0c;然后再進行遞歸或者迭代來打印每個層級的內容。 以下是一個示例代碼&#xff0c;用來實現這個功能&#xff1a; const categories [{ id: 2, name: "…

java如何刪除字符串內部分字符

java中&#xff0c;如果要刪除字符串內部分字符&#xff0c;需要用delete方法&#xff0c;前提字符串是可變字符串StringBuffer類型的。 delete方法的語法格式是sbf.delete(start,end) 其中&#xff0c;sbf是任意StringBuffer對象&#xff0c;start是起始索引&#xff0c;end…

AQ mode

算法原理概述 AQ即adaptive quantization(自適應量化),屬于宏塊級別碼流分配的范疇,在一幀的宏塊之間調整碼率分配,x264中AQ算法的核心內容是:復雜宏塊使用大的QP,簡單宏塊使用小的QP。x264如何定義復雜?x264是根據宏塊內像素值的方差來評價宏塊復雜性,方差越大,宏塊…