PEFT 文件
PEFT 整合
並獲得增強的文件體驗
開始使用
PEFT 整合
PEFT 的實際好處也延伸到了其他 Hugging Face 庫,例如 Diffusers 和 Transformers。PEFT 的主要優勢之一是,由 PEFT 方法生成的介面卡檔案比原始模型小得多,這使得管理和使用多個介面卡變得非常容易。您可以透過簡單地載入一個為特定任務微調的新介面卡,來使用同一個預訓練的基礎模型完成多個任務。或者,您可以將多個介面卡與文字到影像的擴散模型結合起來,創造出新的效果。
本教程將向您展示 PEFT 如何幫助您在 Diffusers 和 Transformers 中管理介面卡。
Diffusers
Diffusers 是一個生成式 AI 庫,用於透過擴散模型從文字或影像建立影像和影片。LoRA 是擴散模型中一種特別受歡迎的訓練方法,因為您可以非常快速地訓練和分享擴散模型,以生成新風格的影像。為了更方便地使用和嘗試多個 LoRA 模型,Diffusers 使用 PEFT 庫來幫助管理用於推理的不同介面卡。
例如,載入一個基礎模型,然後使用 load_lora_weights
方法載入 artificialguybr/3DRedmond-V1 介面卡進行推理。載入方法中的 adapter_name
引數由 PEFT 啟用,允許您為介面卡設定一個名稱,以便更容易引用。
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"peft-internal-testing/artificialguybr__3DRedmond-V1",
weight_name="3DRedmond-3DRenderStyle-3DRenderAF.safetensors",
adapter_name="3d"
)
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image

現在讓我們試試另一個很酷的 LoRA 模型,ostris/super-cereal-sdxl-lora。您需要做的就是使用 adapter_name
載入並命名這個新介面卡,然後使用 set_adapters
方法將其設定為當前活動的介面卡。
pipeline.load_lora_weights(
"ostris/super-cereal-sdxl-lora",
weight_name="cereal_box_sdxl_v1.safetensors",
adapter_name="cereal"
)
pipeline.set_adapters("cereal")
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image

最後,您可以呼叫 disable_lora
方法來恢復基礎模型。
pipeline.disable_lora()
要了解更多關於 PEFT 如何支援 Diffusers 的資訊,請參閱使用 PEFT 進行推理教程。
Transformers
🤗 Transformers 是一個包含用於各種模態、各種任務的預訓練模型的集合。您可以載入這些模型用於訓練或推理。其中許多模型是大型語言模型(LLM),因此將 PEFT 與 Transformers 整合以管理和訓練介面卡非常有意義。
載入一個預訓練的基礎模型進行訓練。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
接下來,新增一個介面卡配置以指定如何調整模型引數。呼叫 add_adapter() 方法將配置新增到基礎模型中。
from peft import LoraConfig
peft_config = LoraConfig(
lora_alpha=16,
lora_dropout=0.1,
r=64,
bias="none",
task_type="CAUSAL_LM"
)
model.add_adapter(peft_config)
現在您可以使用 Transformer 的 Trainer
類或您喜歡的任何訓練框架來訓練模型了。
要使用新訓練的模型進行推理,AutoModel
類在後端使用 PEFT 將介面卡權重和配置檔案載入到預訓練的基礎模型中。
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("peft-internal-testing/opt-350m-lora")
另外,您可以使用 transformers Pipelines 來載入模型,以便方便地進行推理。
from transformers import pipeline
model = pipeline("text-generation", "peft-internal-testing/opt-350m-lora")
print(model("Hello World"))
如果您有興趣比較或使用多個介面卡,可以呼叫 add_adapter() 方法將介面卡配置新增到基礎模型中。唯一的要求是介面卡型別必須相同(您不能混合使用 LoRA 和 LoHa 介面卡)。
from transformers import AutoModelForCausalLM
from peft import LoraConfig
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
model.add_adapter(lora_config_1, adapter_name="adapter_1")
再次呼叫 add_adapter() 將新的介面卡附加到基礎模型上。
model.add_adapter(lora_config_2, adapter_name="adapter_2")
然後您可以使用 set_adapter() 來設定當前活動的介面卡。
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))
要停用介面卡,請呼叫 disable_adapters 方法。
model.disable_adapters()
可以使用 enable_adapters 方法再次啟用介面卡。
如果您好奇,可以檢視使用 PEFT 載入和訓練介面卡教程以瞭解更多資訊。
< > 在 GitHub 上更新