PEFT documentation
Mô hình
Mô hình
PeftModel là lớp mô hình cơ bản để chỉ định mô hình Transformer cơ bản và cấu hình cần áp dụng phương pháp PEFT. Lớp PeftModel cơ bản chứa các phương thức để tải và lưu mô hình từ Hub.
PeftModel
lớp peft.PeftModel
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'autocast_adapter_dtype: bool = Truelow_cpu_mem_usage: bool = False )
Tham số
- model (
torch.nn.Module) — Mô hình cơ bản cần được thích ứng, thường là một mô hình Transformers. - peft_config (PeftConfig) — Cấu hình của mô hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter trống trên meta device. Hữu ích để tăng tốc quá trình tải.> Không sử dụng
low_cpu_mem_usage=Truekhi tạo một bộ thích ứng PEFT mới để huấn luyện.
Mô hình cơ bản bao gồm các phương pháp Peft khác nhau.
Thuộc tính:
- base_model (
torch.nn.Module) — Mô hình transformer cơ bản được sử dụng cho Peft. - peft_config (PeftConfig) — Cấu hình của mô hình Peft.
- modules_to_save (
listcủastr) — Danh sách tên các module con cần lưu khi lưu mô hình. - prompt_encoder (PromptEncoder) — Bộ mã hóa prompt được sử dụng cho Peft nếu đang dùng PromptLearningConfig.
- prompt_tokens (
torch.Tensor) — Các token prompt ảo được sử dụng cho Peft nếu đang dùng PromptLearningConfig. - transformer_backbone_name (
str) — Tên của transformer backbone trong mô hình cơ sở nếu đang sử dụng PromptLearningConfig. - word_embeddings (
torch.nn.Embedding) — Các word embeddings của transformer backbone trong base model nếu đang sử dụng PromptLearningConfig.
add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
Tham số
- adapter_name (
str) — Tên của adapter cần được thêm vào. - peft_config (PeftConfig) — Cấu hình của adapter sẽ được thêm vào.
- low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device. Hữu ích để tăng tốc quá trình khi nạp các adapter đã lưu. Không sử dụng tùy chọn này khi tạo một PEFT adapter mới để huấn luyện. - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Thêm một adapter vào mô hình dựa trên cấu hình được truyền vào.
Adapter này chưa được huấn luyện. Để tải một adapter đã được huấn luyện, hãy xem PeftModel.load_adapter().
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
Cập nhật hoặc tạo thẻ mô hình để bao gồm thông tin về peft:
- Thêm thẻ thư viện
peft - Thêm phiên bản peft
- Thêm thông tin mô hình cơ sở
- Thêm thông tin lượng tử hóa nếu nó đã được sử dụng
delete_adapter
< source >( adapter_name: str )
Xóa một adapter hiện có.
Trình quản lý ngữ cảnh vô hiệu hóa module adapter. Sử dụng điều này để chạy suy luận trên mô hình cơ sở.
Quá trình truyền thẳng của mô hình.
from_pretrained
< source >( model: torch.nn.Modulemodel_id: Union[str, os.PathLike]adapter_name: str = 'default'is_trainable: bool = Falseconfig: Optional[PeftConfig] = Noneautocast_adapter_dtype: bool = Trueephemeral_gpu_offload: bool = Falselow_cpu_mem_usage: bool = Falsekey_mapping: Optional[dict[str, str]] = Nonestrict_adapter_check: Literal['warn', 'error', 'ignore'] = 'warn'**kwargs: Any )
Tham số
- model (
torch.nn.Module) — Mô hình cần được thích ứng. Đối với các mô hình 🤗 Transformers, mô hình nên được khởi tạo bằng from_pretrained. - model_id (
strhoặcos.PathLike) — Tên của cấu hình PEFT cần sử dụng. Có thể là:- Một chuỗi,
model idcủa một cấu hình PEFT được lưu trữ trong một kho model trên Hugging Face Hub. - Đường dẫn đến một thư mục chứa tệp cấu hình PEFT được lưu bằng phương thức
save_pretrained(./my_peft_config_directory/).
- Một chuỗi,
- adapter_name (
str, tùy chọn, mặc định là"default") — Tên của adapter cần được nạp. Điều này hữu ích khi nạp nhiều adapter. - 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. - config (PeftConfig, tuỳ chọn) —
Đối tượng cấu hình để sử dụng thay cho cấu hình được tải tự động. Đối tượng cấu hình này loại trừ lẫn nhau với
model_idvàkwargs. Điều này hữu ích khi cấu hình đã được tải trước khi gọifrom_pretrained. - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng. - ephemeral_gpu_offload (
bool, tuỳ chọn) — Có sử dụng ephemeral GPU offloading cho các module được nạp một phần hay không. Mặc định làFalse. Tính năng này hữu ích khi một phần của mô hình và/hoặc các thành phần (chẳng hạn như adapter) được giữ trong bộ nhớ CPU cho đến khi cần. Thay vì thực hiện các thao tác tốn kém trên dữ liệu nhỏ, dữ liệu sẽ được chuyển đến GPU theo yêu cầu, thực hiện thao tác, và kết quả được chuyển ngược lại bộ nhớ CPU. Điều này gây ra một lượng VRAM tạm thời nhỏ nhưng mang lại tốc độ tăng lên hàng bậc trong một số trường hợp. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device trước khi tải trọng số đã lưu. Hữu ích để tăng tốc quá trình. - key_mapping (dict, tùy chọn, mặc định là None) —
Bản ánh xạ bổ sung cho các khóa
state_dictcủa PEFT được áp dụng trước khi nạpstate_dict. Khi bản ánh xạ này được áp dụng, tiền tố"base_model.model"đặc thù của PEFT sẽ được loại bỏ trước đó và tên adapter (ví dụ"default") sẽ chưa được chèn vào. Chỉ truyền tham số này nếu bạn biết rõ mình đang làm gì. - strict_adapter_check (
Literal["warn", "error", "ignore"], tùy chọn, mặc định là"warn") — Hành động cần thực hiện nếu checkpoint chứa các khóa adapter bị thiếu trong mô hình, hoặc không được mong đợi bởi mô hình, sau khi đã tính đến các khóa vốn được dự đoán là khác biệt do lý do cấu trúc (tham số dùng chung, đường dẫn của prompt encoder, v.v.)."warn"sẽ phát ra cảnh báo,"error"sẽ ném raRuntimeErrorvà"ignore"không làm gì. Đây không phải là cùng một phép kiểm tra vớistrictcủatorch.nn.Module.load_state_dict: các adapter PEFT luôn tồn tại cùng với một mô hình cơ sở đã đóng băng, do đó điều này chỉ liên quan đến các khóa cụ thể của adapter, không bao giờ là các tham số riêng của mô hình cơ sở. - kwargs — (
optional): Các đối số từ khóa bổ sung được truyền đến lớp cấu hình PEFT cụ thể. Điều này bao gồmtorch_device(str, optional): thiết bị để tải adapter lên (được chuyển tiếp đếnload_adapter[PeftModel.load_adapter]); nếuNone, thiết bị sẽ được suy luận.
Tạo một mô hình PEFT từ một mô hình được huấn luyện trước và các trọng số PEFT đã được nạp.
Lưu ý rằng model được truyền vào có thể bị thay đổi tại chỗ (inplace).
Trả về mô hình cơ sở.
get_layer_status
< source >( ) → listpeft.peft_model.TunerLayerStatus
Trả về
listpeft.peft_model.TunerLayerStatus
Một danh sách các dataclass, mỗi dataclass chứa trạng thái của lớp adapter tương ứng.
Lấy trạng thái của từng lớp adapter trong mô hình.
Phương thức này trả về một danh sách các instance của dataclass TunerLayerStatus, mỗi instance chứa các thuộc tính sau:
name(str): Tên của lớp adapter, ví dụmodel.encoder.block.0.layer.0.SelfAttention.q.module_type(str): Loại của lớp adapter, ví dụlora.Linear.enabled(bool): Xác định xem lớp adapter có được bật hay không.active_adapters(list[str]): Tên của các adapter đang hoạt động, nếu có, ví dụ["default"].merged_adapters(list[str]): Tên của các adapter đã được hợp nhất, nếu có, ví dụ["default"].available_adapters(list[str]): Tên của các adapter khả dụng, ví dụ["default"].quantization_backend(strhoặcNone): Tên của backend lượng tử hóa, ví dụ"bnb 4bit", hoặcNonenếu không lượng tử hóa.
get_model_status
< source >( ) → peft.peft_model.TunerModelStatus
Trả về
peft.peft_model.TunerModelStatus
Một dataclass chứa trạng thái của mô hình.
Lấy trạng thái của các bộ điều chỉnh (tuner) của mô hình.
Phương thức này trả về một instance của dataclass TunerModelStatus, bao gồm các thuộc tính sau:
base_model_type(str): Loại của mô hình cơ sở, ví dụT5Model.adapter_model_type(str): Loại của mô hình adapter, ví dụLoraModel.peft_types(dict[str, str]): Bản ánh xạ từ tên adapter sang loại adapter, ví dụ{"default": "LORA"}.trainable_params(int): Số lượng tham số có thể huấn luyện trong mô hình.total_params(int): Tổng số tham số trong mô hình.num_adapter_layers(int): Số lượng lớp adapter trong mô hình.enabled(bool,Literal["irregular"]): Liệu tất cả các lớp adapter có được bật hay không. Nếu một số được bật và một số không, giá trị này sẽ là"irregular". Điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.active_adapters(list[str],Literal["irregular"]): Tên của các adapter đang hoạt động. Nếu các adapter đang hoạt động không nhất quán giữa tất cả các lớp, giá trị này sẽ là"irregular", điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.merged_adapters(list[str],Literal["irregular"]): Tên của các adapter đã được hợp nhất. Nếu các adapter đã hợp nhất không nhất quán trên tất cả các lớp, giá trị này sẽ là"irregular", điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.available_adapters(list[str]): Tên của các adapter khả dụng, ví dụ["default"].quantization_backend(str,None,Literal["irregular"]): Tên của backend lượng tử hóa, ví dụ"bnb 4bit", hoặcNonenếu không được lượng tử hóa. Nếu backend không nhất quán trên tất cả các lớp, giá trị này sẽ là"irregular".
Trả về số lượng tham số có thể huấn luyện và tổng số tham số trong mô hình.
get_prompt
< source >( batch_size: inttask_ids: Optional[torch.Tensor] = Nonemax_cache_len: Optional[int] = None )
Trả về các prompt ảo để sử dụng cho Peft. Chỉ áp dụng khi sử dụng phương pháp học prompt.
Trả về prompt embedding để lưu khi lưu mô hình. Chỉ áp dụng khi sử dụng phương pháp học prompt.
kiểm tra sức khỏe
< source >( min_trainable_params: int = 1max_trainable_params_percent = 50 )
Tham số
- min_trainable_params (
int, tùy chọn, mặc định=1) — Số lượng tham số tối thiểu được kỳ vọng. Nếu số tham số tìm thấy ít hơn mức này, hệ thống sẽ báo lỗi. - max_trainable_params_percent (
int, tùy chọn, mặc định=50) — Tỷ lệ phần trăm tối đa của các tham số nên được huấn luyện. Nếu tìm thấy nhiều hơn số đó, điều này sẽ được báo cáo dưới dạng cảnh báo.
Kiểm tra mô hình này để tìm các trạng thái adapter đáng ngờ trước khi huấn luyện.
Hàm này tóm tắt các API về trạng thái mô hình và lớp, bao gồm các phát hiện về trạng thái adapter không nhất quán, adapter đã được hợp nhất, và số lượng tham số có thể huấn luyện không hợp lý. Nó không xác thực vòng lặp huấn luyện, optimizer, hoặc dataset. Trạng thái sẽ được báo cáo là "irregular" nếu phát hiện thấy sự không nhất quán trong mô hình, ví dụ như khi cùng một adapter, một số lớp được bật trong khi một số lớp khác bị tắt. Điều này gần như luôn có nghĩa là có điều gì đó đã xảy ra sai và bạn nên kiểm tra xem mình có vô tình thay đổi sai một số thuộc tính trên mô hình hay không.
Nếu quá trình kiểm tra phát hiện điều gì đó đáng ngờ, kết quả sẽ được báo cáo trong trường "findings". Danh sách "findings"" trống có nghĩa là không phát hiện được trạng thái adapter đáng ngờ nào, chứ không đảm bảo rằng một phiên huấn luyện sẽ thành công.
load_adapter
< source >( model_id: Union[str, os.PathLike]adapter_name: stris_trainable: bool = Falsetorch_device: Optional[str] = Noneautocast_adapter_dtype: bool = Trueephemeral_gpu_offload: bool = Falselow_cpu_mem_usage: bool = Falsekey_mapping: Optional[dict[str, str]] = Nonestrict_adapter_check: Literal['warn', 'error', 'ignore'] = 'warn'**kwargs: Any )
Tham số
- model_id (
strhoặcos.PathLike) — Tên của cấu hình PEFT cần sử dụng. Có thể là:- Một chuỗi,
model idcủa một cấu hình PEFT được lưu trữ trong một kho model trên Hugging Face Hub. - Đường dẫn đến một thư mục chứa tệp cấu hình PEFT được lưu bằng phương thức
save_pretrained(./my_peft_config_directory/).
- Một chuỗi,
- adapter_name (
str) — Tên của adapter cần được thêm vào. - 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. - torch_device (
str, tuỳ chọn, mặc định là None) — Thiết bị để nạp adapter. NếuNone, thiết bị sẽ được suy luận. - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng. - ephemeral_gpu_offload (
bool, tùy chọn, mặc định làFalse) — Có sử dụng ephemeral GPU offloading cho các module được nạp một phần hay không. Mặc định làFalse. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device trước khi tải trọng số đã lưu. Hữu ích để tăng tốc quá trình. - key_mapping (dict, tùy chọn, mặc định là None) —
Bản ánh xạ bổ sung cho các khóa
state_dictcủa PEFT được áp dụng trước khi nạpstate_dict. Khi bản ánh xạ này được áp dụng, tiền tố"base_model.model"đặc thù của PEFT sẽ được loại bỏ trước đó và tên adapter (ví dụ"default") sẽ chưa được chèn vào. Chỉ truyền tham số này nếu bạn biết rõ mình đang làm gì. - strict_adapter_check (
Literal["warn", "error", "ignore"], tùy chọn, mặc định là"warn") — Hành động cần thực hiện nếu checkpoint chứa các khóa adapter bị thiếu trong mô hình, hoặc không được mong đợi bởi mô hình, sau khi đã tính đến các khóa vốn được dự đoán là khác biệt do lý do cấu trúc (tham số dùng chung, đường dẫn của prompt encoder, v.v.)."warn"sẽ phát ra cảnh báo,"error"sẽ ném raRuntimeErrorvà"ignore"không làm gì. Đây không phải là cùng một phép kiểm tra vớistrictcủatorch.nn.Module.load_state_dict: các adapter PEFT luôn tồn tại cùng với một mô hình cơ sở đã đóng băng, do đó điều này chỉ liên quan đến các khóa cụ thể của adapter, không bao giờ là các tham số riêng của mô hình cơ sở. - kwargs — (
optional): Các đối số bổ sung để thay đổi cách adapter được tải, ví dụ như token cho Hugging Face Hub.
Tải adapter đã được huấn luyện vào mô hình.
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
Chuẩn bị mô hình cho việc kiểm tra điểm gradient nếu cần
Lưu ý: Trong các phiên bản mới hơn của Transformers, tính năng này được gọi là ‘activation checkpointing’.
print_healthcheck
< source >( sink = <built-in function print>min_trainable_params: int = 1max_trainable_params_percent = 50**kwargs )
Tham số
- sink (
callable, tùy chọn, mặc định=print) — Hàm được gọi để in kết quả. Mặc định là hàmprinttích hợp sẵn, nhưng cũng có thể là thứ khác nhưlogger.info. - min_trainable_params (
int, tùy chọn, mặc định=1) — Số lượng tham số tối thiểu được kỳ vọng. Nếu số tham số tìm thấy ít hơn mức này, hệ thống sẽ báo lỗi. - max_trainable_params_percent (
int, tùy chọn, mặc định=50) — Tỷ lệ phần trăm tối đa của các tham số nên được huấn luyện. Nếu tìm thấy nhiều hơn số đó, điều này sẽ được báo cáo dưới dạng cảnh báo. - kwargs —
Các đối số từ khóa bổ sung được truyền tiếp đến
format_healthcheck.
In báo cáo kiểm tra sức khỏe dạng ngắn gọn, dễ đọc cho người dùng.
Đầu ra tóm tắt trạng thái của mô hình PEFT của bạn và bao gồm các phát hiện về trạng thái adapter không nhất quán, các adapter đã được hợp nhất, và số lượng tham số có thể huấn luyện không hợp lý. Nó không xác thực vòng lặp huấn luyện, optimizer, hoặc tập dữ liệu. Trạng thái sẽ được báo cáo là "irregular" nếu tìm thấy sự không nhất quán trong mô hình, ví dụ như khi đối với cùng một adapter, một số lớp được bật và một số lớp bị tắt. Điều này gần như luôn có nghĩa là có điều gì đó đã xảy ra sai và bạn nên kiểm tra xem mình có vô tình thay đổi một số thuộc tính trên mô hình một cách không chính xác hay không.
Nếu phát hiện các vấn đề, chúng sẽ được hiển thị trong phần cuối cùng dưới mục “findings”. Nếu không phát hiện vấn đề nào, điều đó không có nghĩa là một lượt huấn luyện được đảm bảo sẽ thành công.
In ra số lượng tham số có thể huấn luyện trong mô hình.
Lưu ý: print_trainable_parameters() sử dụng get_nb_trainable_parameters(), khác với num_parameters(only_trainable=True) từ huggingface/transformers. get_nb_trainable_parameters() trả về (số tham số có thể huấn luyện, tổng số tham số) của Peft Model, bao gồm cả mô hình transformer backbone đã được sửa đổi. Đối với các kỹ thuật như LoRA, mô hình transformer backbone được sửa đổi tại chỗ bằng các module LoRA. Tuy nhiên, đối với prompt tuning, mô hình transformer backbone không bị thay đổi. num_parameters(only_trainable=True) trả về số lượng tham số có thể huấn luyện của mô hình transformer backbone, con số này có thể khác.
save_pretrained
< source >( save_directory: strsafe_serialization: bool = Trueselected_adapters: Optional[list[str]] = Nonesave_embedding_layers: Union[str, bool] = 'auto'is_main_process: bool = Truepath_initial_model_for_weight_conversion: Optional[str] = None**kwargs: Any )
Tham số
- save_directory (
str) — Thư mục nơi tệp cấu hình và mô hình adapter sẽ được lưu (sẽ được tạo nếu chưa tồn tại). - safe_serialization (
bool, tùy chọn) — Có lưu các tệp adapter ở định dạng safetensors hay không, mặc định làTrue. - selected_adapters (
List[str], tùy chọn) — Danh sách các adapter cần được lưu. Nếu làNone, mặc định sẽ là tất cả các adapter. - save_embedding_layers (
Union[bool, str], tùy chọn, mặc định là"auto") — NếuTrue, lưu các lớp embedding bên cạnh trọng số adapter. Nếuauto, kiểm tra các lớp embedding phổ biếnpeft.utils.other.EMBEDDING_LAYER_NAMEStrongtarget_modulescủa config khi có sẵn. và tự động đặt cờ boolean. Tính năng này chỉ hoạt động với các mô hình 🤗 transformers. - is_main_process (
bool, tùy chọn) — Xác định xem tiến trình gọi hàm này có phải là tiến trình chính hay không. Mặc định làTrue. Nếu không phải tiến trình chính, checkpoint sẽ không được lưu, điều này rất quan trọng trong các cấu hình đa thiết bị (ví dụ: DDP). - path_initial_model_for_weight_conversion (
str, tuỳ chọn) — Đường dẫn đến adapter đã được khởi tạo, được thu nhận sau khi khởi tạo model bằng PiSSA/CorDA/OLoRA và trước khi thực hiện bất kỳ bước huấn luyện nào. Khipath_initial_model_for_weight_conversionkhông phải là None, sự khác biệt của adapter trước và sau khi fine-tuning sẽ được tính toán. Sự khác biệt này có thể được biểu diễn dưới dạng các tham số của một adapter LoRA tiêu chuẩn. Khác với PiSSA và các phương pháp tương tự, việc sử dụng adapter đã chuyển đổi này không yêu cầu thay đổi model gốc, do đó cho phép sử dụng thuận tiện nhiều adapter PiSSA/CorDA/OLoRA cùng với các adapter LoRA, cũng như kích hoạt hoặc vô hiệu hóa bất kỳ adapter nào. Lưu ý rằng quá trình chuyển đổi này không được hỗ trợ nếurslorađược sử dụng kết hợp vớirank_patternhoặcalpha_pattern. Xem peft.tuners.lora.LoraModel.subtract_mutated_init() để biết thêm thông tin. - kwargs (các đối số từ khóa bổ sung, tùy chọn) —
Các đối số từ khóa bổ sung được truyền đến phương thức
push_to_hub.
Hàm này lưu mô hình adapter và các tệp cấu hình adapter vào một thư mục, để có thể nạp lại bằng phương thức lớp PeftModel.from_pretrained(), và cũng được sử dụng bởi phương thức PeftModel.push_to_hub().
Nếu trọng số adapter được chọn chứa các tensor phân tán (ví dụ: FSDP2/HSDP), tất cả các rank tham gia đều phải gọi phương thức này vì việc thu thập trọng số là một thao tác tập thể. Chỉ đặt is_main_process=True trên rank ghi checkpoint. Việc gọi phương thức này trên chỉ một rank có thể khiến nhóm tiến trình hết thời gian chờ.
set_adapter
< source >( adapter_name: strinference_mode: bool = False )
Đặt bộ thích ứng đang hoạt động.
Chỉ có một adapter có thể hoạt động tại một thời điểm vì không phải tất cả các phương pháp PEFT đều hỗ trợ nhiều adapter hoạt động đồng thời. Để kích hoạt nhiều adapter cho các phương pháp được hỗ trợ, hãy sử dụng model.base_model.set_adapter(adapter_names).
Ngoài ra, hàm này sẽ đặt adapter được chỉ định ở chế độ có thể huấn luyện (tức là requires_grad=True) trừ khi inference_mode là True.
set_requires_grad
< source >( adapter_names: str | Sequence[str]requires_grad: bool = True )
Bật hoặc tắt gradient trên adapter(s) được chỉ định.
Lưu ý: Không hỗ trợ các phương pháp học prompt như prompt tuning.
Liệu có thể chuyển đổi adapter của mô hình này sang LoRA hay không.
Thông thường, cách này hoạt động nếu phương pháp PEFT là cộng, tức là W’ = W_base + delta_weight.
PeftModelForSequenceClassification
Một PeftModel cho các tác vụ phân loại chuỗi.
lớp peft.PeftModelForSequenceClassification
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft cho các tác vụ phân loại chuỗi.
Thuộc tính:
- config (
PretrainedConfig) — Đối tượng cấu hình của mô hình cơ sở. - cls_layer_name (
str) — Tên của lớp phân loại.
Ví dụ:
>>> from transformers import AutoModelForSequenceClassification
>>> from peft import PeftModelForSequenceClassification, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "SEQ_CLS",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 768,
... "num_transformer_submodules": 1,
... "num_attention_heads": 12,
... "num_layers": 12,
... "encoder_hidden_size": 768,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForSequenceClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117PeftModelForTokenClassification
PeftModel cho các tác vụ phân loại token.
lớp peft.PeftModelForTokenClassification
< source >( model: torch.nn.Modulepeft_config: PeftConfig = Noneadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft cho các tác vụ phân loại token.
Thuộc tính:
- config (
PretrainedConfig) — Đối tượng cấu hình của mô hình cơ sở. - cls_layer_name (
str) — Tên của lớp phân loại.
Ví dụ:
>>> from transformers import AutoModelForTokenClassification
>>> from peft import PeftModelForTokenClassification, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "TOKEN_CLS",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 768,
... "num_transformer_submodules": 1,
... "num_attention_heads": 12,
... "num_layers": 12,
... "encoder_hidden_size": 768,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForTokenClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForTokenClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
Tham số
- adapter_name (
str) — Tên của adapter cần được thêm vào. - peft_config (PeftConfig) — Cấu hình của adapter sẽ được thêm vào.
- low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device. Hữu ích để tăng tốc quá trình khi nạp các adapter đã lưu. Không sử dụng tùy chọn này khi tạo một PEFT adapter mới để huấn luyện. - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Thêm một adapter vào mô hình dựa trên cấu hình được truyền vào.
Adapter này chưa được huấn luyện. Để tải một adapter đã được huấn luyện, hãy xem PeftModel.load_adapter().
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
PeftModelForCausalLM
Một PeftModel cho mô hình hóa ngôn ngữ nhân quả.
lớp peft.PeftModelForCausalLM
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft cho mô hình hóa ngôn ngữ nhân quả.
Ví dụ:
>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModelForCausalLM, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "CAUSAL_LM",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 1280,
... "num_transformer_submodules": 1,
... "num_attention_heads": 20,
... "num_layers": 36,
... "encoder_hidden_size": 1280,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForCausalLM.from_pretrained("gpt2-large")
>>> peft_model = PeftModelForCausalLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 1843200 || all params: 775873280 || trainable%: 0.23756456724479544PeftModelForSeq2SeqLM
Một PeftModel cho mô hình hóa ngôn ngữ từ chuỗi sang chuỗi.
Lưu ý: điều này sẽ tự động tạo ra các token đầu vào của bộ giải mã bằng cách dịch chuyển các token đầu vào sang phải một bước bằng shift_tokens_right() nếu bạn cung cấp các token đầu vào nhưng không cung cấp rõ ràng các token đầu vào của bộ giải mã.
lớp peft.PeftModelForSeq2SeqLM
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft cho mô hình hóa ngôn ngữ từ chuỗi sang chuỗi.
Ví dụ:
>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import PeftModelForSeq2SeqLM, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "SEQ_2_SEQ_LM",
... "inference_mode": False,
... "r": 8,
... "target_modules": ["q", "v"],
... "lora_alpha": 32,
... "lora_dropout": 0.1,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> peft_model = PeftModelForSeq2SeqLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 884736 || all params: 223843584 || trainable%: 0.3952474242013566PeftModelForQuestionAnswering
Một PeftModel cho câu hỏi và trả lời.
lớp peft.PeftModelForQuestionAnswering
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft cho câu hỏi trả lời trích xuất.
Thuộc tính:
- config (
PretrainedConfig) — Đối tượng cấu hình của mô hình cơ sở. - cls_layer_name (
str) — Tên của lớp phân loại.
Ví dụ:
>>> from transformers import AutoModelForQuestionAnswering
>>> from peft import PeftModelForQuestionAnswering, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "QUESTION_ANS",
... "inference_mode": False,
... "r": 16,
... "target_modules": ["query", "value"],
... "lora_alpha": 32,
... "lora_dropout": 0.05,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForQuestionAnswering.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForQuestionAnswering(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 592900 || all params: 108312580 || trainable%: 0.5473971721475013add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
Tham số
- adapter_name (
str) — Tên của adapter cần được thêm vào. - peft_config (PeftConfig) — Cấu hình của adapter sẽ được thêm vào.
- low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device. Hữu ích để tăng tốc quá trình khi nạp các adapter đã lưu. Không sử dụng tùy chọn này khi tạo một PEFT adapter mới để huấn luyện. - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Thêm một adapter vào mô hình dựa trên cấu hình được truyền vào.
Adapter này chưa được huấn luyện. Để tải một adapter đã được huấn luyện, hãy xem PeftModel.load_adapter().
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
PeftModelForFeatureExtraction
Một PeftModel để trích xuất đặc trưng/độ nhúng từ các mô hình transformer.
lớp peft.PeftModelForFeatureExtraction
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
Tham số
- model (PreTrainedModel) — Mô hình transformer cơ sở.
- peft_config (PeftConfig) — Cấu hình Peft.
- adapter_name (
str, tùy chọn) — Tên của adapter, mặc định là"default". - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Mô hình Peft để trích xuất đặc trưng/độ nhúng từ các mô hình transformer
Thuộc tính:
- config (
PretrainedConfig) — Đối tượng cấu hình của mô hình cơ sở.
Ví dụ:
>>> from transformers import AutoModel
>>> from peft import PeftModelForFeatureExtraction, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "FEATURE_EXTRACTION",
... "inference_mode": False,
... "r": 16,
... "target_modules": ["query", "value"],
... "lora_alpha": 32,
... "lora_dropout": 0.05,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModel.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForFeatureExtraction(model, peft_config)
>>> peft_model.print_trainable_parameters()PeftMixedModel
Một PeftModel để trộn các loại adapter khác nhau (ví dụ: LoRA và LoHa).
lớp peft.PeftMixedModel
< source >( model: nn.Modulepeft_config: PeftConfigadapter_name: str = 'default' )
Tham số
- model (
torch.nn.Module) — Mô hình cần được tinh chỉnh. - config (
PeftConfig) — Cấu hình của mô hình cần tinh chỉnh. Loại adapter phải tương thích. - adapter_name (
str,optional, mặc định là"default") — Tên của adapter đầu tiên. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên thiết bị meta. Hữu ích để tăng tốc quá trình tải.
PeftMixedModel để nạp các adapter có nhiều loại khác nhau cho suy luận.
Lớp này không hỗ trợ tải/lưu và thường không nên được khởi tạo trực tiếp. Thay vào đó, hãy sử dụng get_peft_model với tham số mixed=True.
> Đọc hướng dẫn Các loại adapter khác nhau để tìm hiểu > thêm về việc sử dụng các loại adapter khác nhau.
Ví dụ:
>>> base_model = ... # load the base model, e.g. from transformers
>>> peft_model = PeftMixedModel.from_pretrained(base_model, path_to_adapter1, "adapter1").eval()
>>> peft_model.load_adapter(path_to_adapter2, "adapter2")
>>> peft_model.set_adapter(["adapter1", "adapter2"]) # activate both adapters
>>> peft_model(data) # forward pass using both adaptersadd_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
Tham số
- adapter_name (
str) — Tên của adapter cần được thêm vào. - peft_config (PeftConfig) — Cấu hình của adapter sẽ được thêm vào.
- low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter trống trên meta device. Hữu ích để tăng tốc quá trình khi nạp các adapter đã lưu.> Không sử dụng
low_cpu_mem_usage=Truekhi tạo một adapter PEFT mới để huấn luyện (việc huấn luyện chưa được kiểm tra > và không được khuyến khích cho PeftMixedModel nói chung). - autocast_adapter_dtype (
bool, tuỳ chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. Nếu đặt thànhFalse, các kiểu dữ liệu sẽ giữ nguyên như của lớp tương ứng.
Thêm một adapter vào mô hình dựa trên cấu hình được truyền vào.
Adapter này chưa được huấn luyện. Để tải một adapter đã được huấn luyện, hãy xem PeftModel.load_adapter().
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
Tắt module adapter.
Quá trình truyền thẳng của mô hình.
from_pretrained
< source >( model: nn.Modulemodel_id: str | os.PathLikeadapter_name: str = 'default'is_trainable: bool = Falseconfig: Optional[PeftConfig] = None**kwargs: Any )
Tham số
- model (
nn.Module) — Mô hình cần được thích ứng. - model_id (
strhoặcos.PathLike) — Tên của cấu hình PEFT cần sử dụng. Có thể là:- Một chuỗi,
model idcủa một cấu hình PEFT được lưu trữ trong một kho model trên Hugging Face Hub. - Đường dẫn đến một thư mục chứa tệp cấu hình PEFT được lưu bằng phương thức
save_pretrained(./my_peft_config_directory/).
- Một chuỗi,
- adapter_name (
str, tùy chọn, mặc định là"default") — Tên của adapter cần được nạp. Điều này hữu ích khi nạp nhiều adapter. - 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ỉ dùng để suy luận - config (PeftConfig, tuỳ chọn) —
Đối tượng cấu hình để sử dụng thay cho cấu hình được tải tự động. Đối tượng cấu hình này loại trừ lẫn nhau với
model_idvàkwargs. Điều này hữu ích khi cấu hình đã được tải trước khi gọifrom_pretrained. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device trước khi tải trọng số đã lưu. Hữu ích để tăng tốc quá trình. - kwargs — (
optional): Các đối số từ khóa bổ sung được truyền đến lớp cấu hình PEFT cụ thể.
Tạo một mô hình PEFT hỗn hợp từ một mô hình được huấn luyện trước và các trọng số PEFT đã được nạp.
Lưu ý rằng model được truyền vào có thể bị thay đổi tại chỗ (inplace).
Tạo đầu ra.
Trả về số lượng tham số có thể huấn luyện và tổng số tham số trong mô hình.
load_adapter
< source >( model_id: stradapter_name: str*args: Any**kwargs: Any )
Tham số
- adapter_name (
str) — Tên của adapter cần được thêm vào. - peft_config (PeftConfig) — Cấu hình của adapter sẽ được thêm vào.
- 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. - torch_device (
str, tuỳ chọn, mặc định là None) — Thiết bị để nạp adapter. NếuNone, thiết bị sẽ được suy luận. - autocast_adapter_dtype (
bool, tùy chọn, mặc định làTrue) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, tham số này chỉ chuyển đổi trọng số adapter từ float16 và bfloat16 sang float32, vì điều này thường được yêu cầu để huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. - ephemeral_gpu_offload (
bool, tùy chọn, mặc định làFalse) — Có sử dụng ephemeral GPU offloading cho các module được nạp một phần hay không. Mặc định làFalse. - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên meta device trước khi tải trọng số đã lưu. Hữu ích để tăng tốc quá trình. - kwargs — (
optional): Các đối số bổ sung để thay đổi cách adapter được tải, ví dụ như token cho Hugging Face Hub.
Tải adapter đã được huấn luyện vào mô hình.
Tên của adapter mới phải là duy nhất.
Adapter mới không được tự động đặt làm adapter đang hoạt động. Sử dụng PeftModel.set_adapter() để đặt adapter đang hoạt động.
merge_and_unload
< source >( *args: Any**kwargs: Any )
Tham số
- progressbar (
bool) — liệu có hiển thị thanh tiến trình cho biết quá trình unloading và merge hay không - safe_merge (
bool) — liệu có kích hoạt kiểm tra gộp an toàn để kiểm tra xem có bất kỳ giá trị Nan tiềm ẩn nào trong trọng số adapter hay không - adapter_names (
List[str], tùy chọn) — Danh sách tên adapter cần được hợp nhất. Nếu là None, tất cả các adapter đang hoạt động sẽ được hợp nhất. Mặc định làNone.
Phương pháp này hợp nhất các lớp adapter vào mô hình cơ sở. Điều này cần thiết nếu ai đó muốn sử dụng mô hình cơ sở như một mô hình độc lập.
In ra số lượng tham số có thể huấn luyện trong mô hình.
Lưu ý: print_trainable_parameters() sử dụng get_nb_trainable_parameters(), khác với num_parameters(only_trainable=True) từ huggingface/transformers. get_nb_trainable_parameters() trả về (số tham số có thể huấn luyện, tổng số tham số) của Peft Model, bao gồm cả mô hình transformer backbone đã được sửa đổi. Đối với các kỹ thuật như LoRA, mô hình transformer backbone được sửa đổi tại chỗ bằng các module LoRA. Tuy nhiên, đối với prompt tuning, mô hình transformer backbone không bị thay đổi. num_parameters(only_trainable=True) trả về số lượng tham số có thể huấn luyện của mô hình transformer backbone, con số này có thể khác.
set_adapter
< source >( adapter_name: Union[str, list[str]]inference_mode: bool = False )
Đặt adapter đang hoạt động cho mô hình.
Lưu ý rằng thứ tự áp dụng các adapter trong quá trình truyền thẳng có thể không giống với thứ tự truyền vào hàm này. Thay vào đó, thứ tự trong quá trình truyền thẳng được xác định bởi thứ tự các adapter được nạp vào mô hình. Các adapter đang hoạt động chỉ xác định adapter nào được kích hoạt trong quá trình truyền thẳng, chứ không xác định thứ tự áp dụng của chúng.
Ngoài ra, hàm này sẽ đặt adapter được chỉ định ở chế độ có thể huấn luyện (tức là requires_grad=True) trừ khi inference_mode là True.
Lấy lại mô hình gốc bằng cách gỡ bỏ tất cả các module adapter mà không thực hiện gộp. Thao tác này trả về mô hình gốc ban đầu.
Công cụ tiện ích
peft.cast_mixed_precision_params
< source >( model: torch.nn.Moduledtype: torch.dtype )
Đổ (cast) tất cả các tham số không huấn luyện được của mô hình sang dtype đã cho. dtype có thể là torch.float16 hoặc torch.bfloat16 tùy theo kiểu huấn luyện độ chính xác hỗn hợp mà bạn đang thực hiện. Các tham số huấn luyện được sẽ được đổ sang độ chính xác đầy đủ. Mục đích của thao tác này là giảm mức sử dụng bộ nhớ GPU khi sử dụng các phương pháp PEFT bằng cách dùng dtype độ chính xác nửa cho các tham số không huấn luyện được. Việc giữ các tham số huấn luyện được ở độ chính xác đầy đủ giúp duy trì sự ổn định của quá trình huấn luyện khi sử dụng huấn luyện độ chính xác hỗn hợp tự động.
torch.bfloat16 theo như quá trình huấn luyện độ chính xác hỗn hợp mà bạn đang thực hiện.
peft.get_peft_model
< source >( model: nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'mixed: bool = Falseautocast_adapter_dtype: bool = Truerevision: Optional[str] = Nonelow_cpu_mem_usage: bool = False )
Tham số
- model (
torch.nn.Module) — Mô hình cần được bọc. Thông thường đây là một mô hình Transformers nhưng bất kỳnn.Modulenào cũng có thể hoạt động, với lưu ý rằng các tính năng cụ thể theo tác vụ (peft_config.task_type) yêu cầu mô hình phải tuân theo các quy ước của Transformers. - peft_config (PeftConfig) — Đối tượng cấu hình chứa các tham số của mô hình Peft.
- adapter_name (
str,optional, mặc định là"default") — Tên của adapter cần được tiêm; nếu không được cung cấp, tên adapter mặc định sẽ được sử dụng (“default”). - mixed (
bool,optional, mặc định làFalse) — Có cho phép trộn lẫn các loại adapter khác nhau (tương thích) hay không. - autocast_adapter_dtype (
bool, tùy chọn) — Có nên tự động chuyển đổi kiểu dữ liệu của adapter hay không. Mặc định làTrue. Hiện tại, điều này chỉ chuyển đổi trọng số adapter dùng float16 hoặc bfloat16 sang float32, vì đây thường là yêu cầu cần thiết cho việc huấn luyện ổn định, và chỉ ảnh hưởng đến một số bộ điều chỉnh PEFT nhất định. - revision (
str,optional, mặc định làmain) — Phiên bản của mô hình cơ sở. Nếu không được đặt, mô hình peft đã lưu sẽ tải phiên bảnmaincho mô hình cơ sở - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên thiết bị meta. Hữu ích để tăng tốc quá trình tải. Giữ cài đặt này là False nếu bạn có ý định huấn luyện mô hình, trừ khi trọng số adapter sẽ được thay thế bằng các trọng số khác trước khi bắt đầu huấn luyện.
Trả về một đối tượng mô hình Peft từ một mô hình và một cấu hình, trong đó mô hình sẽ được sửa đổi tại chỗ.
peft.inject_adapter_in_model
< source >( peft_config: PeftConfigmodel: torch.nn.Moduleadapter_name: str = 'default'low_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
Tham số
- peft_config (
PeftConfig) — Đối tượng cấu hình chứa các tham số của mô hình PEFT. - model (
torch.nn.Module) — Mô hình đầu vào mà adapter sẽ được tiêm vào. - adapter_name (
str,optional, mặc định là"default") — Tên của adapter cần được tiêm; nếu không được cung cấp, tên adapter mặc định sẽ được sử dụng (“default”). - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên thiết bị meta. Hữu ích để tăng tốc quá trình tải. - state_dict (
dict, tùy chọn, mặc định làNone) — Nếu mộtstate_dictđược truyền vào đây, các adapter sẽ được tiêm dựa trên các mục trong state_dict. Điều này có thể hữu ích khitarget_moduleschính xác của phương pháp PEFT không được biết, chẳng hạn như vì checkpoint được tạo mà không có meta data. Lưu ý rằng các giá trị từstate_dictkhông được sử dụng, chỉ các khóa (keys) được dùng để xác định các lớp (layers) đúng cần được thích ứng.
Tạo các lớp PEFT và tiêm chúng vào mô hình tại chỗ.
Hiện tại, API không hỗ trợ các phương pháp học prompt, adaption prompt, hoặc các tuner giữ trạng thái adapter được chia sẻ giữa nhiều lớp đích. Hãy sử dụng get_peft_model() cho trường hợp sau.
Hàm này tương tự get_peft_model() nhưng không trả về một instance của PeftModel. Thay vào đó, nó trả về instance gốc, đã bị thay đổi, của model được truyền vào.
peft.get_peft_model_state_dict
< source >( modelstate_dict = Noneadapter_name: str = 'default'unwrap_compiled: bool = Falsesave_embedding_layers: bool | Literal['auto'] = 'auto' )
Tham số
- model (PeftModel) — Mô hình Peft. Khi sử dụng torch.nn.DistributedDataParallel, DeepSpeed hoặc FSDP, mô hình phải là mô hình cơ bản/mô hình đã được unwrap (tức là model.module).
- state_dict (
dict, tùy chọn, mặc định làNone) — State dict của model. Nếu không được cung cấp, state dict của model được truyền vào sẽ được sử dụng. - adapter_name (
str, tùy chọn, mặc định là"default") — Tên của adapter mà state dict của nó sẽ được trả về. - unwrap_compiled (
bool, tùy chọn, mặc định làFalse) — Có nên gỡ bọc model nếu đã sử dụng torch.compile hay không. - save_embedding_layers (
Union[bool, str], , tùy chọn, mặc định làauto) — NếuTrue, lưu các lớp embedding bên cạnh trọng số adapter. Nếuauto, kiểm tra các lớp embedding phổ biếnpeft.utils.other.EMBEDDING_LAYER_NAMEStrongtarget_modulescủa config khi có sẵn. Dựa vào đó để đặt cờ boolean. Tính năng này chỉ hoạt động với các mô hình 🤗 transformers.
Lấy state dict của adapter đã cho của mô hình PEFT.
Điều này chỉ bao gồm các tham số PEFT, không bao gồm các tham số của mô hình cơ sở. Do đó, state_dict được trả về thường nhỏ hơn nhiều so với kích thước của toàn bộ mô hình. Để lấy state_dict đầy đủ, chỉ cần gọi model.state_dict().
Nếu các mục được chọn chứa các tensor phân tán (ví dụ: FSDP2 hoặc DTensor TP), tất cả các rank tham gia đều phải gọi hàm này: việc thu thập các mục đó thành các tensor đầy đủ là một thao tác tập thể. Các trọng số của mô hình cơ sở không được chọn vẫn được chia nhỏ.
Lưu ý rằng tên adapter được loại bỏ khỏi state_dict, vì đây chỉ là một tên tùy ý có thể được thay đổi khi nạp adapter. Ví dụ, nếu tên adapter là 'default' và khóa gốc là 'model.q_proj.lora_A.default.weight', thì khóa được trả về sẽ là 'model.q_proj.lora_A.weight'. Hãy sử dụng hàm này cùng với set_peft_model_state_dict() để xử lý tên adapter khi nạp trọng số.
peft.prepare_model_for_kbit_training
< source >( modeluse_gradient_checkpointing = Trueactivation_checkpointing_kwargs = Noneauto_clear_cache = Truegradient_checkpointing_kwargs = None )
Tham số
- model (
transformers.PreTrainedModel) — Mô hình đã được tải từtransformers - use_gradient_checkpointing (
bool, tùy chọn, mặc định làTrue) — Nếu là True, sử dụng gradient checkpointing để tiết kiệm bộ nhớ với chi phí là quá trình backward chậm hơn. - activation_checkpointing_kwargs (
dict, tùy chọn, mặc định làNone) — Các đối số dạng từ khóa để truyền cho hàm activation checkpointing, vui lòng tham khảo tài liệu củatorch.utils.checkpoint.checkpointđể biết thêm chi tiết về các đối số có thể truyền cho phương thức đó. Lưu ý rằng tính năng này chỉ khả dụng trong các phiên bản transformers (> 4.34.1). - auto_clear_cache (
bool, tùy chọn, mặc định làTrue) — Có nên làm trống bộ nhớ đệm của accelerator sau khi upcast các tham số lên fp32 hay không. Thao tác này giải phóng bộ nhớ do bộ cấp phát bộ nhớ đệm (caching allocator) giữ, đặc biệt hữu ích trên các thiết bị chia sẻ bộ nhớ giữa host và accelerator. Đặt thànhFalseđể bỏ qua bước này. - gradient_checkpointing_kwargs (
dict, tùy chọn, mặc định làNone) — Các đối số từ khóa để truyền cho hàm checkpointing activation. Tham số này chỉ tồn tại để đảm bảo tương thích ngược và đã bị ngừng hỗ trợ, vui lòng sử dụngactivation_checkpointing_kwargsthay thế. Nó sẽ bị loại bỏ trong PEFT v1.2.
Lưu ý rằng phương pháp này chỉ hoạt động với các mô hình transformers.
Phương pháp này bao bọc toàn bộ giao thức để chuẩn bị một mô hình trước khi chạy huấn luyện. Điều này bao gồm: 1- Chuyển layernorm sang fp32 2- Cho phép lớp output embedding yêu cầu grads 3- Thêm việc upcasting của lm head sang fp32 4- Đóng băng các lớp của mô hình cơ sở để đảm bảo chúng không được cập nhật trong quá trình huấn luyện
peft.get_layer_status
< source >( model: torch.nn.Module ) → listpeft.peft_model.TunerLayerStatus
Lấy trạng thái của từng lớp adapter trong mô hình.
Hàm này trả về một danh sách các instance của dataclass TunerLayerStatus, mỗi instance chứa các thuộc tính sau:
name(str): Tên của lớp adapter, ví dụmodel.encoder.block.0.layer.0.SelfAttention.q.module_type(str): Loại của lớp adapter, ví dụlora.Linear.enabled(bool): Xác định xem lớp adapter có được bật hay không.active_adapters(list[str]): Tên của các adapter đang hoạt động, nếu có, ví dụ["default"].merged_adapters(list[str]): Tên của các adapter đã được hợp nhất, nếu có, ví dụ["default"].- requires_grad : dict[str, bool | Literal[“irregular”]]
Trạng thái requires_grad của các tham số cho mỗi adapter module. Về lý tưởng, giá trị nên là
TruehoặcFalse. Nếu trạng thái requires_grad không nhất quán giữa tất cả các tham số, giá trị sẽ được đặt thành"irregular". available_adapters(list[str]): Tên của các adapter khả dụng, ví dụ["default"].devices(dict[str, list[str]]): Các thiết bị nơi lưu trữ các tham số của adapter được chỉ định, ví dụ:["cuda","xpu"].quantization_backend(strhoặcNone): Tên của backend lượng tử hóa, ví dụ"bnb 4bit", hoặcNonenếu không lượng tử hóa.
peft.get_model_status
< source >( model: torch.nn.Module ) → peft.peft_model.TunerModelStatus
Lấy trạng thái của các bộ điều chỉnh (tuner) của mô hình.
Hàm này trả về một instance của dataclass TunerModelStatus, bao gồm các thuộc tính sau:
base_model_type(str): Loại của mô hình cơ sở, ví dụT5Model.adapter_model_type(str): Loại của mô hình adapter, ví dụLoraModel.peft_types(dict[str, str]): Bản ánh xạ từ tên adapter sang loại adapter, ví dụ{"default": "LORA"}.trainable_params(int): Số lượng tham số có thể huấn luyện trong mô hình.total_params(int): Tổng số tham số trong mô hình.num_adapter_layers(int): Số lượng lớp adapter trong mô hình.enabled(bool,Literal["irregular"]): Liệu tất cả các lớp adapter có được bật hay không. Nếu một số được bật và một số không, giá trị này sẽ là"irregular". Điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.active_adapters(list[str],Literal["irregular"]): Tên của các adapter đang hoạt động. Nếu các adapter đang hoạt động không nhất quán giữa tất cả các lớp, giá trị này sẽ là"irregular", điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.merged_adapters(list[str],Literal["irregular"]): Tên của các adapter đã được hợp nhất. Nếu các adapter đã hợp nhất không nhất quán trên tất cả các lớp, giá trị này sẽ là"irregular", điều này có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.requires_grad(dict[str, bool | Literal["irregular"]]): Liệu tất cả các lớp adapter của adapter cho trước córequires_gradđược đặt thànhTruehayFalsehay không. Nếu có sự trộn lẫn, giá trị này sẽ được đặt thành"irregular", có nghĩa là mô hình của bạn đang ở trạng thái không nhất quán và có thể không hoạt động như mong đợi.available_adapters(list[str]): Tên của các adapter khả dụng, ví dụ["default"].devices(dict[str, list[str]]): Các thiết bị nơi lưu trữ các tham số của adapter được chỉ định, ví dụ:["cuda","xpu"].quantization_backend(str,None,Literal["irregular"]): Tên của backend lượng tử hóa, ví dụ"bnb 4bit", hoặcNonenếu không được lượng tử hóa. Nếu backend không nhất quán trên tất cả các lớp, giá trị này sẽ là"irregular".