PEFT documentation
UniLoRA
UniLoRA
Uni-LoRA là một phương pháp PEFT chia sẻ một ngân hàng vector có thể huấn luyện gọn nhẹ giữa các trọng số adapter hạng thấp. Thay vì học độc lập từng phần tử của ma trận LoRA, UniLoRA chiếu các phần tử vào các giá trị theta_d chung một cách tất định và học các tham số chung được sử dụng bởi bản cập nhật của adapter.
Bắt đầu nhanh
from peft import UniLoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")
config = UniLoraConfig(
r=32,
theta_d_length=256,
proj_seed=42,
target_modules=["q_proj", "v_proj"],
unilora_dropout=0.0,
init_weights=True,
task_type="CAUSAL_LM",
)
peft_model = get_peft_model(model, config)
peft_model.print_healthcheck()Các tham số quan trọng
r kiểm soát chiều của adapter hạng thấp. Các giá trị lớn hơn làm tăng sức chứa và mức sử dụng bộ nhớ của adapter.
theta_d_length kiểm soát độ dài của ngân hàng vector UniLoRA dùng chung. Đây là bộ nhớ huấn luyện chính được chia sẻ bởi các mục adapter đã chiếu.
proj_seed kiểm soát việc tạo chỉ mục xác định cho các phép chiếu cố định vào theta_d. Việc sử dụng lại cùng một seed và cấu hình sẽ đảm bảo các chỉ mục adapter được tạo ra có thể tái lập được.
target_modules chọn các module nhận adapter UniLoRA. Hãy dùng các hậu tố module như ["q_proj", "v_proj"], một chuỗi regex, hoặc "all-linear" khi được kiến trúc mô hình hỗ trợ.
unilora_dropout áp dụng dropout bên trong các lớp adapter UniLoRA trong quá trình huấn luyện.
init_weights kiểm soát việc khởi tạo tham số UniLoRA. Đặt nó thành False để giữ lại khởi tạo theta_d ngẫu nhiên khi bạn cần quản lý việc khởi tạo thủ công.
save_indices kiểm soát việc checkpoint UniLoRA có lưu các tensor index và scale được tạo ra cùng với các tham số theta_d dùng chung hay không. Việc giữ tùy chọn này ở trạng thái tắt sẽ tạo ra các checkpoint nhỏ hơn và tái tạo index từ proj_seed; việc bật nó sẽ làm cho các adapter đã lưu độc lập khỏi những thay đổi trong tương lai của quy trình tạo index.
Tổng quan về benchmark
API
UniLoraConfig
lớp peft.UniLoraConfig
< 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 = 4proj_seed: int = 42theta_d_length: int = 256target_modules: list[str] | str | None = Noneunilora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_theta_d_bound: float = 0.02init_weights: bool = Truesave_indices: bool = Falselayers_to_transform: list[int] | int | None = Nonelayers_pattern: list[str] | str | None = None )
Tham số
- r (
int) — Rank của low-rank adaptation. Tham số này kiểm soát khả năng biểu đạt của bản cập nhật UniLora. - proj_seed (
int) — Hạt ngẫu nhiên được sử dụng để tạo ra gán chỉ số cố định. Điều này đảm bảo khả năng tái lập giữa các lần chạy. - theta_d_length (
int) — Độ dài của vector UniLora dùng chungtheta_d. - target_modules (
Union[list[str], str], tuỳ chọn) — Tên hoặc mẫu của các module mà adapter UniLora được áp dụng.- Nếu một chuỗi được cung cấp, nó sẽ được xử lý như một biểu thức chính quy.
- Nếu một danh sách được cung cấp, các module sẽ được khớp theo tên chính xác hoặc hậu tố.
- Giá trị đặc biệt ‘all-linear’ áp dụng UniLora cho tất cả các lớp Linear / Conv1D ngoại trừ lớp output. Nếu không được chỉ định, các module sẽ được suy ra từ kiến trúc mô hình. Một lỗi sẽ được ném ra nếu kiến trúc không được hỗ trợ.
- unilora_dropout (
float) — Xác suất dropout được áp dụng bên trong các lớp UniLora. - fan_in_fan_out (
bool) — Xác định xem lớp được thay thế có lưu trọng số ở định dạng (fan_in, fan_out) hay không. Nên đặt giá trị này là True cho các mô hình như GPT-2 sử dụng các lớp Conv1D. - bias (
str) — Chỉ định các hệ số chệch (bias) nào có thể huấn luyện được:- ‘none’: không có tham số bias nào được cập nhật
- ‘all’: tất cả các tham số bias được cập nhật
- ‘unilora_only’: chỉ cập nhật các bias bên trong các lớp UniLora Lưu ý: việc bật cập nhật bias sẽ làm thay đổi đầu ra của mô hình ngay cả khi các adapter bị vô hiệu hóa.
- modules_to_save (
list[str], tùy chọn) — Các module bổ sung (nằm ngoài các lớp UniLora) cần được giữ ở trạng thái có thể huấn luyện và được lưu trong checkpoint cuối cùng. Tham số này thường được sử dụng cho các đầu ra (heads) dành riêng cho tác vụ, chẳng hạn như bộ phân loại. - init_theta_d_bound (
float) — Giới hạn khởi tạo cho ngân hàng vector UniLora. Các vector được lấy mẫu đều từ [-init_theta_d_bound, init_theta_d_bound]. Việc khởi tạo bằng số 0 được tránh để ngăn chặn hiện tượng biến mất gradient. Các giá trị nhỏ (ví dụ: 0.02) được khuyến nghị để huấn luyện ổn định. - init_weights (
bool) — Có nên khởi tạotheta_dbằng khởi tạo mặc định của UniLora hay không. Nếu đặt thànhFalse,theta_dsẽ giữ khởi tạo ngẫu nhiên. - save_indices (
bool) — Có nên lưu các bộ đệm chỉ mục và thang đo UniLora đã tạo cùng vớitheta_dhay không. Việc này làm tăng kích thước checkpoint, nhưng giúp các adapter đã lưu độc lập khỏi những thay đổi trong tương lai của quy trình tạo chỉ mục. - layers_to_transform (
Union[list[int], int], tùy chọn) — Chỉ số của các lớp transformer mà UniLora được áp dụng. Nếu được chỉ định, chỉ các lớp này sẽ bị thay đổi. Tùy chọn này chỉ hợp lệ khitarget_moduleslà một danh sách. - layers_pattern (
Union[list[str], str], tùy chọn) — Mẫu tên lớp tùy chỉnh được sử dụng cùng vớilayers_to_transformkhi mô hình không tuân theo các quy ước đặt tên lớp tiêu chuẩn. Tùy chọn này chỉ hợp lệ khitarget_moduleslà một danh sách.
Lớp cấu hình cho các bộ thích ứng UniLora.
Lớp này định nghĩa tất cả các siêu tham số cần thiết để khởi tạo và áp dụng các lớp UniLora trong khung PEFT. Cấu hình được thiết kế tối giản và chỉ bao gồm các tham số đang được sử dụng tích cực bởi triển khai UniLora hiện tại.
Tham khảo: Uni-LoRA: One Vector Is All You Need https://arxiv.org/abs/2506.00799
UniLoraModel
lớp peft.UniLoraModel
< source >( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )
Tạo một adapter UniLora bao quanh một mô hình được huấn luyện trước.
Gán các chỉ số theta_d tất định cho không gian tham số UniLora đã được làm phẳng.
Một lệnh np.random.choice(np.arange(theta_d_length), size=lora_param_count) thông thường sẽ lấy mẫu từng vị trí một cách độc lập, điều này có thể khiến một số mục theta_d không được sử dụng đối với các adapter nhỏ hơn. UniLora thay vào đó sử dụng một gán cân bằng và tất định: mỗi chỉ số xuất hiện floor(D / d) hoặc ceil(D / d) lần, trong đó D là số lượng tham số LoRA đã được làm phẳng và d là theta_d_length. Cách này giữ cho việc chuẩn hóa theo từng chỉ số ổn định trong khi vẫn xáo trộn sự gán bằng proj_seed.