Transformers documentation
PEFT
PEFT
PeftAdapterMixin cung cấp các hàm từ thư viện PEFT để quản lý các adapter với Transformers. Mixin này hỗ trợ tất cả các phương pháp PEFT không dựa trên prompt-learning (LoRA, IA3, AdaLoRA và các phương pháp khác). Các phương pháp prefix tuning (prompt tuning, prompt learning) không được hỗ trợ vì chúng không thể được tiêm vào một module torch.
Một class chứa tất cả các hàm để tải và sử dụng trọng số adapter được hỗ trợ trong thư viện PEFT. Để biết thêm chi tiết về adapter và cách tiêm chúng vào một mô hình dựa trên transformer, hãy xem tài liệu của thư viện PEFT: https://huggingface.co/docs/peft/index
Các phương pháp PEFT hiện được hỗ trợ đều là các phương pháp không dựa trên prompt (LoRA, IA³, v.v.). Các mô hình PEFT khác như prompt tuning, prompt learning nằm ngoài phạm vi vì các adapter này không thể “tiêm” vào một module torch. Để sử dụng các phương pháp này, vui lòng tham khảo hướng dẫn sử dụng của thư viện PEFT.
Với mixin này, nếu phiên bản PEFT chính xác được cài đặt (>= 0.20.0), bạn có thể:
- Tải một adapter được lưu trữ trên đường dẫn cục bộ hoặc trong kho Hub từ xa, và tiêm nó vào mô hình
- Gắn các adapter mới vào mô hình và huấn luyện chúng bằng Trainer hoặc theo cách riêng của bạn.
- Gắn nhiều adapter và kích hoạt / vô hiệu hóa chúng theo từng lần
- Kích hoạt / tắt tất cả các adapter từ mô hình.
- Lấy
state_dictcủa adapter đang hoạt động.
load_adapter
< source >( peft_model_id: str | None = Noneadapter_name: str | None = Nonepeft_config: dict[str, typing.Any] | None = Noneadapter_state_dict: dict[str, 'torch.Tensor'] | None = Nonelow_cpu_mem_usage: bool = Falseis_trainable: bool = Falsehotswap: typing.Union[bool, typing.Literal['auto']] = 'auto'local_files_only: bool = Falseadapter_kwargs: dict[str, typing.Any] | None = Noneload_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None**kwargs )
Tham số
- peft_model_id (
str, tùy chọn) — Định danh của model cần tìm trên Hub, hoặc đường dẫn cục bộ đến tệp cấu hình adapter đã lưu và trọng số adapter. - adapter_name (
str, tùy chọn) — Tên adapter cần sử dụng. Nếu không được đặt, sẽ sử dụng tên “default”. - load_config (
LoadStateDictConfig, tùy chọn) — Một cấu hình tải để tái sử dụng khi lấy trọng số adapter, thường từfrom_pretrained. - kwargs (
dict[str, Any], tùy chọn) — Các trườngLoadStateDictConfigbổ sung được truyền dưới dạng các đối số từ khóa. - peft_config (
dict[str, Any], tùy chọn) — Cấu hình của adapter cần thêm, các adapter được hỗ trợ bao gồm tất cả các cấu hình học không dùng prompt (LoRA, IA³, v.v.). Tham số này được sử dụng trong trường hợp người dùng truyền trực tiếp các state dict của PEFT. - adapter_state_dict (
dict[str, torch.Tensor], optional) — State dict của adapter cần nạp. Tham số này được sử dụng trong trường hợp người dùng trực tiếp truyền các state dict của PEFT. - low_cpu_mem_usage (
bool, tùy chọn, mặc định làFalse) — Giảm mức sử dụng bộ nhớ khi tải bộ thích ứng PEFT. Điều này cũng nên giúp tăng tốc quá trình tải. - is_trainable (
bool, tùy chọn, mặc định làFalse) — Xác định xem adapter có nên được huấn luyện hay không. NếuFalse, adapter sẽ bị đóng băng và chỉ có thể được sử dụng để suy luận. - hotswap — (
"auto"hoặcbool, tuỳ chọn, mặc định là"auto") Có nên thay thế adapter (LoRA) hiện có bằng adapter mới được nạp vào tại chỗ hay không. Điều này có nghĩa là, thay vì nạp thêm một adapter, phương thức này sẽ lấy trọng số của adapter hiện có và thay thế chúng bằng trọng số của adapter mới. Cách này có thể nhanh hơn và tiết kiệm bộ nhớ hơn. Tuy nhiên, lợi ích chính của hotswap là khi mô hình được biên dịch bằng torch.compile, việc nạp adapter mới không yêu cầu biên dịch lại mô hình. Khi sử dụng hotswap,adapter_namephải là tên của một adapter đã được nạp trước đó.Nếu adapter mới và adapter cũ có rank và/hoặc alpha LoRA (tức là hệ số scale) khác nhau, bạn cần gọi thêm một phương thức trước khi nạp adapter:
Tải trọng số adapter từ tệp hoặc thư mục Hub từ xa. Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Yêu cầu PEFT phải được cài đặt như một backend để tải trọng số adapter.
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Thêm một adapter mới vào mô hình hiện tại cho mục đích huấn luyện. Nếu không truyền tên adapter, một tên mặc định sẽ được gán cho adapter để tuân theo quy ước của thư viện PEFT (trong PEFT, chúng tôi sử dụng “default” làm tên adapter mặc định).
Lưu ý rằng adapter mới thêm không được kích hoạt tự động. Để kích hoạt nó, hãy sử dụng model.set_adapter.
set_adapter
< source >( adapter_name: list[str] | str )
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Đặt một adapter cụ thể bằng cách buộc mô hình sử dụng adapter đó và vô hiệu hóa các adapter khác.
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Tắt tất cả các adapter được gắn vào mô hình. Điều này dẫn đến việc suy luận chỉ với mô hình cơ sở.
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Bật các adapter được gắn vào mô hình.
enable_peft_hotswap
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
Tham số
- target_rank (
int, tuỳ chọn, mặc định là128) — Rank cao nhất trong số tất cả các adapter sẽ được nạp. - check_compiled (
str, tuỳ chọn, mặc định là"error") — Cách xử lý khi mô hình đã được biên dịch, điều này thường nên tránh. Các tùy chọn là:- “error” (mặc định): gây ra một lỗi
- “warn”: phát ra cảnh báo
- “ignore”: không làm gì
Cho phép khả năng thay đổi nóng (hotswap) các bộ thích ứng PEFT có bậc (rank) khác nhau, hoặc, nếu mô hình đã được biên dịch, mà không gây ra việc biên dịch lại.
Hiện tại, hotswapping chỉ được hỗ trợ cho LoRA.
Việc gọi phương thức này chỉ bắt buộc khi hotswap các adapter và nếu mô hình đã được biên dịch hoặc nếu các rank của các adapter được nạp khác nhau. Nếu tất cả các rank đều giống nhau và mô hình chưa được biên dịch, hotswap sẽ hoạt động mà không cần gọi phương thức này trước.
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Lấy các adapter đang hoạt động hiện tại của mô hình. Trong trường hợp suy luận đa adapter (kết hợp nhiều adapter để suy luận), trả về danh sách tất cả các adapter đang hoạt động để người dùng có thể xử lý tương ứng.
Với các phiên bản PEFT trước đó (không hỗ trợ suy luận đa adapter), module.active_adapter sẽ trả về
một chuỗi duy nhất.
get_adapter_state_dict
< source >( adapter_name: str | None = Nonestate_dict: dict | None = None )
Tham số
- adapter_name (
str, tùy chọn) — Tên của adapter để lấy state dict từ đó. Nếu không truyền tên nào, adapter đang hoạt động sẽ được sử dụng. - state_dict (từ điển lồng nhau của
torch.Tensor, tuỳ chọn) — Từ điển trạng thái của mô hình. Mặc định sẽ làself.state_dict(), nhưng có thể được sử dụng nếu cần thực hiện các biện pháp phòng ngừa đặc biệt khi khôi phục từ điển trạng thái của một mô hình (ví dụ khi sử dụng song song hóa mô hình).
Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu chính thức của PEFT: https://huggingface.co/docs/peft
Lấy adapter state dict chỉ chứa các tensor trọng số của adapter có tên adapter_name được chỉ định. Nếu không truyền adapter_name, adapter đang hoạt động sẽ được sử dụng.
delete_adapter
< source >( adapter_names: list[str] | str )
Xóa một bộ thích ứng PEFT khỏi mô hình cơ bản.