PEFT documentation
FRoD: Fine-Tuning hiệu quả bậc đầy đủ với các bậc tự do quay
FRoD: Fine-Tuning hiệu quả bậc đầy đủ với các bậc tự do quay
FRoD là một phương pháp tinh chỉnh hiệu quả về tham số, kết hợp một cơ sở hạng đầy đủ dùng chung với các bậc tự do quay thưa có thể học được. Bản cập nhật adapter được biểu diễn thông qua các tensor chiếu cố định và các hệ số có thể huấn luyện, cho phép FRoD áp dụng các bản cập nhật hạng đầy đủ trong khi vẫn giữ số lượng tham số được huấn luyện ở mức thấp.
Bài báo: Full-Rank Efficient Fine-Tuning with Rotational Degrees.
Khi lưu các tham số adapter, bạn có thể tránh việc lưu trữ các tensor chiếu bằng cách đặt save_projection=False trên FrodConfig. Trong trường hợp đó, các phép chiếu sẽ được khôi phục từ trọng số của mô hình cơ sở và
hạt ngẫu nhiên cố định từ projection_prng_key. Điều này làm giảm kích thước checkpoint, nhưng mặc định là save_projection=True để việc nạp checkpoint không phụ thuộc vào các chi tiết tái tạo.
So với LoRA, FRoD có thể biểu diễn một bản cập nhật hạng đầy đủ (full-rank) trong mỗi lớp tuyến tính được thích ứng, trong khi chỉ huấn luyện các hệ số đường chéo và một tập hợp thưa các hệ số xoay ngoài đường chéo. Điều này có thể hữu ích khi một bản cập nhật hạng thấp (low-rank) quá hạn chế. Đổi lại, FRoD tính toán các tensor chiếu cố định từ trọng lượng cơ bản trong quá trình tiêm adapter, khiến việc thiết lập trở nên tốn kém hơn và việc triển khai ít được hỗ trợ rộng rãi hơn so với LoRA.
Việc khởi tạo projection có thể chậm trên các mô hình lớn vì FRoD thực hiện phân rã ma trận trên các danh mục module đích trước khi tiêm các adapter. Thanh tiến trình được hiển thị theo mặc định và có thể tắt bằng FrodConfig(progressbar=False).
Đối với huấn luyện bị giới hạn về bộ nhớ, runtime_offload_base_weight=True giữ các trọng số cơ sở đích trên CPU khi đường dẫn FRoD đang hoạt động không cần đến chúng. Đây là tùy chọn vì các phương pháp PEFT thường giữ tất cả các tham số cơ sở trên bộ tăng tốc sau khi di chuyển mô hình và sau các bước truyền thẳng.
FRoD hiện có ràng buộc sau:
- Chỉ hỗ trợ các lớp
nn.Linearvàtransformers.pytorch_utils.Conv1D.
Bắt đầu nhanh
from transformers import AutoModelForSequenceClassification
from peft import FrodConfig, TaskType, get_peft_model
model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)
peft_config = FrodConfig(
task_type=TaskType.SEQ_CLS,
target_modules=["query", "value"],
modules_to_save=["classifier"],
sparse_rate=0.02,
frod_dropout=0.0,
runtime_offload_base_weight=True,
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()FrodConfig
lớp peft.FrodConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )
Tham số
- target_modules (
Union[List[str], str]) — Tên của các module cần áp dụng FRoD. Chỉ hỗ trợ các lớp tuyến tính. - projection_prng_key (
int) — Hạt ngẫu nhiên được sử dụng khi khởi tạo mẫu FRoD COO thưa. - save_projection (
bool) — Có nên lưu các tensor chiếu FRoD trong state dict hay không. Điều này làm tăng kích thước checkpoint nhưng giúp việc nạp lại adapter không phụ thuộc vào việc tạo lại bộ nhớ đệm cục bộ. Mặc định làTrue. - frod_dropout (
float) — Xác suất dropout cho các lớp FRoD. - fan_in_fan_out (
bool) — Đặt giá trị này thành True nếu lớp cần thay thế lưu trọng số theo dạng (fan_in, fan_out). Ví dụ, gpt-2 sử dụngConv1Dlưu trọng số theo dạng (fan_in, fan_out) do đó giá trị này nên được đặt thànhTrue. - bias (
str) — Bias type for FRoD. Can be ‘none’, ‘all’ or ‘frod_only’. If ‘all’ or ‘frod_only’, the corresponding biases will be updated during training. Be aware that this means that, even when disabling the adapters, the model will not produce the same output as the base model would have without adaptation. - modules_to_save (
List[str]) — Danh sách các module ngoài các lớp FRoD cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng. - init_weights (
bool) — Có nên khởi tạo trọng số của các lớp FRoD với giá trị khởi tạo mặc định hay không. Không thay đổi cài đặt này, trừ khi bạn biết chính xác mình đang làm gì. - layers_to_transform (
Union[List[int],int]) — Các chỉ số lớp cần biến đổi. Nếu tham số này được chỉ định, các phép biến đổi FRoD sẽ được áp dụng lên các chỉ số lớp được liệt kê trong danh sách này. Nếu một số nguyên duy nhất được truyền vào, các phép biến đổi FRoD sẽ được áp dụng lên lớp tại chỉ số đó. - layers_pattern (
Optional[Union[List[str], str]]) — Tên mẫu lớp, chỉ được sử dụng nếulayers_to_transformkhácNone. Giá trị này cần nhắm đếnnn.ModuleListcủa mô hình, thường được gọi là'layers'hoặc'h'. - sparse_rate (
float) — Tỷ lệ các phần tử ngoài đường chéo trong ma trận xoay có thể huấn luyện dạng thưa. Giá trị cao hơn làm tăng dung lượng và số tham số có thể huấn luyện; giá trị thấp hơn có chi phí thấp hơn. Mặc định là0.01. - regularization_alpha (
float) — Giá trị dương nhỏ được sử dụng khi xây dựng cơ sở chung từ trọng số gốc. Nó ổn định phép nghịch đảo ma trận khi các lớp trong cùng một danh mục có trọng số tương quan. Mặc định là1e-3. - progressbar (
bool) — Có hiển thị thanh tiến trình khi xây dựng các phép chiếu FRoD hay không. Việc khởi tạo phép chiếu có thể chậm trên các mô hình lớn vì nó thực hiện phân rã ma trận trên các danh mục module đích. Mặc định làTrue. - runtime_offload_base_weight (
bool) — Có nên giữ trọng số cơ sở đích trên CPU khi đường dẫn FRoD đang hoạt động không cần chúng hay không. Điều này có thể giảm bộ nhớ GPU vì FRoD tái tạo trực tiếp trọng số đã thích ứng, nhưng nó thay đổi quy ước PEFT thông thường rằng tất cả các tham số cơ sở đều ở trên bộ tăng tốc sau khi di chuyển mô hình hoặc chạy forward. Mặc định làFalse.
Đây là lớp cấu hình để lưu trữ cấu hình của một FrodModel.
FrodModel
lớp peft.FrodModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )