PEFT documentation
Tích hợp PEFT
Tích hợp PEFT
Lợi ích thực tiễn của PEFT còn mở rộng sang các thư viện Hugging Face khác như Diffusers và Transformers. Một trong những lợi ích chính của PEFT là tệp adapter do một phương pháp PEFT tạo ra có kích thước nhỏ hơn rất nhiều so với mô hình gốc, giúp việc quản lý và sử dụng nhiều adapter trở nên cực kỳ dễ dàng. Bạn có thể sử dụng một mô hình cơ sở được huấn luyện trước cho nhiều tác vụ khác nhau chỉ bằng cách nạp một adapter mới đã được tinh chỉnh cho tác vụ bạn đang giải quyết. Hoặc bạn có thể kết hợp nhiều adapter với một mô hình khuếch tán từ văn bản sang hình ảnh để tạo ra các hiệu ứng mới.
Hướng dẫn này sẽ cho bạn thấy cách PEFT có thể giúp bạn quản lý các adapter trong Diffusers và Transformers.
Diffusers
Diffusers là thư viện AI tạo sinh để tạo hình ảnh và video từ văn bản hoặc hình ảnh bằng các mô hình khuếch tán. LoRA là một phương pháp huấn luyện đặc biệt phổ biến cho các mô hình khuếch tán vì bạn có thể huấn luyện và chia sẻ các mô hình khuếch tán để tạo hình ảnh theo phong cách mới một cách rất nhanh chóng. Để việc sử dụng và thử nghiệm nhiều mô hình LoRA trở nên dễ dàng hơn, Diffusers sử dụng thư viện PEFT để hỗ trợ quản lý các adapter khác nhau cho suy luận.
Ví dụ, tải một mô hình cơ sở rồi tải bộ thích ứng artificialguybr/3DRedmond-V1 để suy luận bằng phương thức load_lora_weights. Tham số adapter_name trong phương thức tải được kích hoạt bởi PEFT, cho phép bạn đặt tên cho bộ thích ứng để dễ tham chiếu hơn.
import torch
from diffusers import DiffusionPipeline
device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to(device)
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
Bây giờ hãy thử một mô hình LoRA thú vị khác, ostris/super-cereal-sdxl-lora. Bạn chỉ cần nạp và đặt tên cho adapter mới này bằng adapter_name, sau đó dùng phương thức set_adapters để thiết lập nó thành adapter đang hoạt động.
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
Cuối cùng, bạn có thể gọi phương thức disable_lora để khôi phục mô hình gốc.
pipeline.disable_lora()
Tìm hiểu thêm về cách PEFT hỗ trợ Diffusers trong hướng dẫn Suy luận với PEFT.
Transformers
🤗 Transformers là bộ sưu tập các mô hình được huấn luyện trước cho mọi loại tác vụ trong tất cả các phương thức. Bạn có thể tải các mô hình này để huấn luyện hoặc suy luận. Nhiều mô hình trong số đó là mô hình ngôn ngữ lớn (LLM), vì vậy việc tích hợp PEFT với Transformers để quản lý và huấn luyện các adapter là hợp lý.
Tải một mô hình được huấn luyện trước làm cơ sở để huấn luyện.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")Tiếp theo, thêm một cấu hình adapter để chỉ định cách thích ứng các tham số của mô hình. Gọi phương thức add_adapter() để thêm cấu hình vào mô hình cơ sở.
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)Bây giờ bạn có thể huấn luyện mô hình bằng lớp Trainer của Transformer hoặc bất kỳ framework huấn luyện nào bạn ưa thích.
Để sử dụng mô hình vừa được huấn luyện cho suy luận, lớp AutoModel sử dụng PEFT ở phía sau để tải trọng số adapter và tệp cấu hình vào mô hình được huấn luyện trước làm nền tảng.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("peft-internal-testing/opt-350m-lora")Ngoài ra, bạn có thể sử dụng Pipelines của transformers để tải mô hình nhằm chạy suy luận một cách thuận tiện:
from transformers import pipeline
model = pipeline("text-generation", "peft-internal-testing/opt-350m-lora")
print(model("Hello World"))Nếu bạn quan tâm đến việc so sánh hoặc sử dụng nhiều hơn một adapter, bạn có thể gọi phương thức add_adapter() để thêm cấu hình adapter vào mô hình cơ sở. Yêu cầu duy nhất là loại adapter phải giống nhau (bạn không thể trộn lẫn adapter LoRA và 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")Gọi add_adapter() một lần nữa để gắn một adapter mới vào mô hình cơ sở.
model.add_adapter(lora_config_2, adapter_name="adapter_2")Sau đó, bạn có thể sử dụng set_adapter() để đặt adapter đang hoạt động hiện tại.
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))Để tắt adapter, hãy gọi phương thức disable_adapters.
model.disable_adapters()
enable_adapters có thể được sử dụng để bật lại các adapter.
Nếu bạn tò mò, hãy xem hướng dẫn Tải và huấn luyện adapter với PEFT để tìm hiểu thêm.
Update on GitHub