PEFT documentation
PVeRA: Điều chỉnh ma trận ngẫu nhiên dựa trên vector xác suất
PVeRA: Điều chỉnh ma trận ngẫu nhiên dựa trên vector xác suất
PVeRA là một kỹ thuật tinh chỉnh hiệu quả tham số dựa trên VeRA, thuộc họ các adapter dựa trên LoRA. Nó giữ nguyên ngân sách tham số rất thấp của VeRA nhưng tăng hiệu suất bằng cách học một phân phối của các thích ứng tiềm ẩn. Điều này cũng cho phép các mô hình được thích ứng bằng PVeRA tạo ra các ước lượng khoảng tin cậy Monte Carlo, bằng cách lấy mẫu từ phân phối đã học tại thời điểm suy luận.
Khi lưu các tham số adapter, bạn có thể bỏ qua việc lưu trữ các ma trận hạng thấp bằng cách đặt save_projection=False trên PveraConfig. Trong trường hợp đó, các ma trận này sẽ được khôi phục dựa trên hạt ngẫu nhiên cố định từ đối số projection_prng_key. Điều này giúp giảm kích thước của checkpoint, nhưng chúng tôi không thể đảm bảo khả năng tái lập trên tất cả các thiết bị và cho tất cả các phiên bản PyTorch trong tương lai. Nếu bạn muốn đảm bảo khả năng tái lập, hãy đặt save_projection=True (đây là mặc định).
Để xử lý các hình dạng khác nhau của các lớp đã thích ứng, PVeRA khởi tạo các ma trận A và B dùng chung với kích thước lớn nhất cần thiết cho từng chiều. Trong quá trình truyền thuận, các ma trận con A và B cho một lớp cụ thể sẽ được cắt ra từ các ma trận dùng chung này và được sử dụng như đã mô tả trong bài báo. Ví dụ, việc thích ứng hai lớp tuyến tính có hình dạng (100, 20) và (80, 50) sẽ tạo ra các ma trận A và B có hình dạng lần lượt là (rank, 50) và (100, rank). Sau đó, để thích ứng một lớp có hình dạng (100, 20), các ma trận con A và B có hình dạng (rank, 20) và (100, rank) sẽ được trích xuất.
PVeRA hiện có ràng buộc sau:
- Chỉ hỗ trợ các lớp
nn.Linear. - Biểu diễn ẩn không dễ tiếp cận để huấn luyện bằng phân kỳ KL.
Tóm tắt từ bài báo là:
Các mô hình nền tảng lớn đã xuất hiện trong những năm gần đây và đang đẩy mạnh giới hạn hiệu suất cho nhiều loại tác vụ khác nhau. Việc huấn luyện hoặc thậm chí tinh chỉnh các mô hình như vậy đòi hỏi các bộ dữ liệu khổng lồ và tài nguyên tính toán, vốn thường khan hiếm và tốn kém. Các phương pháp thích ứng cung cấp một giải pháp hiệu quả về mặt tính toán để giải quyết những hạn chế này bằng cách cho phép tinh chỉnh các mô hình đó trên một lượng nhỏ dữ liệu và công suất tính toán. Điều này được thực hiện bằng cách gắn các module có thể huấn luyện mới vào các khung xương (backbone) đã đóng băng, chỉ với một phần nhỏ các tham số có thể huấn luyện, và chỉ khớp các module này trên các tác vụ mới. Gần đây, adapter VeRA đã được chứng minh là vượt trội trong các thích ứng hiệu quả về tham số bằng cách sử dụng một cặp ma trận hạng thấp ngẫu nhiên đã đóng băng được chia sẻ giữa tất cả các lớp. Trong bài báo này, chúng tôi đề xuất PVeRA, một phiên bản xác suất của adapter VeRA, trong đó các ma trận hạng thấp của VeRA được sửa đổi theo cách xác suất. Sự sửa đổi này tự nhiên cho phép xử lý các sự mơ vốn có trong đầu vào và cho phép các cấu hình lấy mẫu khác nhau trong quá trình huấn luyện và kiểm tra. Một đánh giá toàn diện đã được thực hiện trên bộ chuẩn VTAB-1k và bảy adapter, trong đó PVeRA vượt trội hơn VeRA và các adapter khác.
Tổng quan về benchmark
API
PveraConfig
lớp peft.PveraConfig
< 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 = Falser: int = 256target_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truepvera_dropout: float = 0.0d_initial: float = 0.1fan_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]] = Nonesample_at_inference: bool = Falsegenerator_seed: Optional[int] = None )
Tham số
- r (
int, tuỳ chọn, mặc định là256) — Chiều tham số (“rank”) của PVeRA. Hãy chọn các giá trị cao hơn rank của LoRA ở đây, vì PVeRA chia sẻ tham số giữa các lớp và do đó sử dụng ít tham số hơn nhiều so với LoRA. - target_modules (
Union[List[str], str]) — Tên của các module cần áp dụng PVeRA. Chỉ hỗ trợ các lớp tuyến tính. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Nếu giá trị này được chỉ định là ‘all-linear’, thì tất cả các module tuyến tính/Conv1D sẽ được chọn. Nếu không được chỉ định, các module sẽ được chọn theo kiến trúc của mô hình. Nếu kiến trúc không được biết đến, một lỗi sẽ được ném ra. - projection_prng_key (
int) — Khóa khởi tạo PRNG của PVeRA. Được dùng để khởi tạo pvera_A và pvera_B cho các mô hình mới hoặc khi nạp checkpoint không bao gồm các phép chiếu này. Mặc định là0. - save_projection (
bool) — Có nên lưu các phép chiếu pvera_A / pvera_B trong state dict cùng với trọng số lambda_b / lambda_d của từng lớp hay không. Việc này sẽ làm tăng kích thước của checkpoint, nhưng đảm bảo rằng chúng ta có thể tải lại checkpoint trên tất cả các cấu hình hệ thống. Mặc định làTrue. - pvera_dropout (
float) — Xác suất dropout cho các lớp PVeRA. - d_initial (
float, tuỳ chọn, mặc định là0.1) — Giá trị ban đầu cho vectorpvera_lambda_dđược sử dụng khi khởi tạo các tham số PVeRA. Khuyến nghị sử dụng các giá trị nhỏ (<=0.1). - 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 PVeRA. Can be ‘none’, ‘all’ or ‘pvera_only’. If ‘all’ or ‘pvera_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 PVeRA 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 PVeRA với 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 PVeRA 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 PVeRA 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'. - sample_at_inference (
bool, mặc định làFalse) — Có lấy mẫu từ phân phối PVeRA đã học ở giai đoạn suy luận hay không. Nếu là False, giá trị trung bình đã học sẽ được sử dụng. - generator_seed (
int, mặc định là None) — Hạt ngẫu nhiên cho trình tạo được dùng để lấy mẫu từ phân phối đã học.
Đây là lớp cấu hình để lưu trữ cấu hình của một PveraModel.
Bài báo: https://www.arxiv.org/abs/2512.07703.
PveraModel
lớp peft.PveraModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
Tham số
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- config (PveraConfig) — Cấu hình của mô hình PVeRA.
- adapter_name (
str) — Tên của adapter, mặc định là"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.
Trả về
torch.nn.Module
Mô hình PVeRA.
Tạo mô hình Probabilistic Vector-based Random Matrix Adaptation (PVeRA) từ một mô hình transformers đã được huấn luyện trước.
Ví dụ:
>>> from transformers import AutoModel
>>> from peft import PveraConfig, get_peft_model
>>> base_model = AutoModel.from_pretrained("facebook/dinov2-base")
>>> config = PveraConfig(r=128, sample_at_inference=False)
>>> model = get_peft_model(base_model, config)Thuộc tính:
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- peft_config (PveraConfig): Cấu hình của mô hình PVeRA.