PEFT documentation
Các kiểu adapter hỗn hợp
Các kiểu adapter hỗn hợp
Thông thường, không thể trộn lẫn các loại adapter khác nhau trong 🤗 PEFT. Bạn có thể tạo một mô hình PEFT với hai adapter LoRA khác nhau (có thể có các tùy chọn cấu hình khác nhau), nhưng không thể kết hợp adapter LoRA và LoHa. Tuy nhiên, với PeftMixedModel, điều này khả thi miễn là các loại adapter tương thích. Mục đích chính của việc cho phép trộn các loại adapter là để kết hợp các adapter đã được huấn luyện cho suy luận. Mặc dù có thể huấn luyện một mô hình adapter hỗn hợp, nhưng điều này chưa được kiểm tra và không được khuyến nghị.
Để nạp các loại adapter khác nhau vào một mô hình PEFT, hãy sử dụng PeftMixedModel thay vì PeftModel:
from peft import PeftMixedModel
base_model = ... # load the base model, e.g. from transformers
# load first adapter, which will be called "default"
peft_model = PeftMixedModel.from_pretrained(base_model, <path_to_adapter1>)
peft_model.load_adapter(<path_to_adapter2>, adapter_name="other")
peft_model.set_adapter(["default", "other"])Phương thức set_adapter() là cần thiết để kích hoạt cả hai adapter, nếu không chỉ adapter đầu tiên sẽ được kích hoạt. Bạn có thể tiếp tục thêm nhiều adapter hơn bằng cách gọi add_adapter() nhiều lần.
PeftMixedModel không hỗ trợ lưu và nạp các adapter hỗn hợp. Các adapter phải đã được huấn luyện, và việc nạp mô hình yêu cầu chạy một script mỗi lần.
Mẹo
- Không phải tất cả các loại adapter đều có thể kết hợp với nhau. Xem
peft.tuners.mixed.COMPATIBLE_TUNER_TYPESđể biết danh sách các loại tương thích. Một lỗi sẽ được ném ra nếu bạn cố gắng kết hợp các loại adapter không tương thích. - Có thể trộn lẫn nhiều adapter cùng loại, điều này có thể hữu ích khi kết hợp các adapter có cấu hình rất khác nhau.
- Nếu bạn muốn kết hợp nhiều adapter khác nhau, cách hiệu quả nhất là thêm các adapter cùng loại một cách liên tiếp. Ví dụ, hãy thêm LoRA1, LoRA2, LoHa1, LoHa2 theo đúng thứ tự này, thay vì LoRA1, LoHa1, LoRA2 và LoHa2. Mặc dù thứ tự có thể ảnh hưởng đến kết quả đầu ra, nhưng không có thứ tự nào là tốt nhất một cách tuyệt đối, vì vậy tốt nhất là nên chọn thứ tự nhanh nhất.