PEFT documentation
GraLoRA
GraLoRA
Granular Low-Rank Adaptation (GraLoRA) là một phương pháp PEFT được thiết kế để tăng cường khả năng biểu diễn của low-rank adaptation đồng thời cải thiện sự bền vững với các kích hoạt ngoại lai, dựa trên những hiểu biết từ các vấn đề phổ biến trong lượng tử hóa.

Khác với LoRA tiêu chuẩn, vốn áp dụng một adapter hạng thấp duy nhất trên toàn bộ không gian đặc trưng, GraLoRA giới thiệu một phương án thích ứng có cấu trúc và chi tiết hơn. Nó chia không gian thích ứng thành một lưới gồm các cặp adapter nhỏ hơn, độc lập, mỗi cặp chịu trách nhiệm cho một tập con cục bộ của các chiều đầu vào và đầu ra. Kết quả là, mỗi adapter hoạt động trên một không gian con có kích thước nhỏ hơn lần theo cả hai chiều so với adapter LoRA gốc.
Việc phân rã chi tiết này cho phép các cập nhật được định vị theo không gian và nhận thức ngữ cảnh, từ đó tăng hiệu quả khả năng biểu diễn mà không cần thêm tham số hay chi phí tính toán. Bằng cách cô lập ảnh hưởng của các kích hoạt cực đoan trong các không gian con nhỏ hơn, GraLoRA giảm thiểu sự méo mó của gradient và duy trì sự cân bằng giữa các kênh trong quá trình thích ứng.
Tóm tắt từ bài báo là:
Low-Rank Adaptation (LoRA) là một phương pháp phổ biến để tinh chỉnh hiệu quả tham số (PEFT) các mô hình sinh, được đánh giá cao nhờ sự đơn giản và hiệu quả. Mặc dù đã có những cải tiến gần đây, LoRA vẫn tồn tại một hạn chế cơ bản: quá khớp (overfitting) khi mở rộng nút cổ chai (bottleneck). Phương pháp này đạt hiệu suất tốt nhất ở bậc (rank) 32–64, nhưng độ chính xác lại chững lại hoặc giảm ở các bậc cao hơn, vẫn chưa đạt được hiệu suất của tinh chỉnh đầy đủ (FFT). Chúng tôi xác định nguyên nhân gốc rễ là nút cổ chai cấu trúc của LoRA, gây ra sự vướng víu gradient (gradient entanglement) giữa các kênh đầu vào không liên quan và làm méo mó sự lan truyền gradient. Để giải quyết vấn đề này, chúng tôi đề xuất một cấu trúc mới, Granular Low-Rank Adaptation (GraLoRA), chia các ma trận trọng số thành các khối con (sub-blocks), mỗi khối có bộ thích ứng bậc thấp (low-rank adapter) riêng. Với chi phí tính toán hoặc lưu trữ không đáng kể, GraLoRA khắc phục các hạn chế của LoRA, tăng hiệu quả năng lực biểu diễn và xấp xỉ hành vi của FFT sát hơn. Các thí nghiệm trên các bộ chuẩn (benchmarks) về tạo mã, suy luận thông thường, suy luận toán học, hiểu ngôn ngữ chung và tạo ảnh cho thấy GraLoRA luôn vượt trội hơn LoRA và các phương pháp cơ sở khác, đạt mức tăng tuyệt đối lên đến +8,5% về Pass@1 trên HumanEval+. Những cải thiện này được duy trì qua các kích thước mô hình và cài đặt bậc khác nhau, khiến GraLoRA trở thành một giải pháp có khả năng mở rộng và bền vững cho PEFT.
Tổng quan về benchmark
API
GraloraConfig
lớp peft.GraloraConfig
< 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 = 32hybrid_r: int = 0target_modules: list[str] | str | None = Nonealpha: int = 64gralora_dropout: float = 0.0gralora_k: int = 2fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_weights: bool = Truelayers_to_transform: list[int] | int | None = Nonelayers_pattern: str | None = None )
Tham số
- r (
int) — Chiều attention của GraLoRA xác định rank của adapter GraLoRA. Tổng số tham số của adapter GraLoRA bằng với LoRA có cùng rank r, trong khi khả năng biểu diễn được nhân lên gralora_k lần. - hybrid_r (
int) — Rank của Hybrid GraLoRA xác định rank được phân bổ cho phương pháp LoRA thông thường khi sử dụng phương pháp Hybrid GraLoRA. Hybrid GraLoRA, sự kết hợp giữa GraLoRA và LoRA thông thường, sẽ khả dụng khi hybrid_r > 0. Số lượng tham số của adapter GraLoRA là r + hybrid_r. - target_modules (
Union[List[str], str]) — Danh sách tên module hoặc biểu thức regex của các tên module cần thay thế bằng GraLoRA. Ví dụ: [‘q’, ‘v’] hoặc ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Giá trị này cũng có thể là ký tự đại diện ‘all-linear’, khớp với tất cả các lớp linear/Conv1D (nếu model là PreTrainedModel, lớp output sẽ bị loại trừ). Nếu không được chỉ định, các module sẽ được chọn theo kiến trúc model. Nếu kiến trúc không được biết đến, một lỗi sẽ được ném ra — trong trường hợp này, bạn nên chỉ định các module đích thủ công. - alpha (
int) — Alpha của GraLoRA. Alpha của GraLoRA là hệ số tỷ lệ cho bộ thích ứng GraLoRA. Hệ số tỷ lệ sẽ là alpha / (r + hybrid_r). - gralora_dropout (
float) — GraLoRA dropout là xác suất dropout cho adapter GraLoRA. Nó được sử dụng để ngăn chặn overfitting và cải thiện khả năng tổng quát hóa của adapter GraLoRA. - gralora_k (
int) — GraLoRA k xác định số lượng subblock trong adapter GraLoRA. Rank r phải chia hết cho gralora_k để adapter GraLoRA hợp lệ. Tổng số tham số được giữ nguyên bất kể gralora_k. Toàn bộ rank của adapter GraLoRA được tăng lên bằng gralora_k, trong khi rank của mỗi subblock được giảm đi bằng gralora_k. Khuyến nghị dùng gralora_k=2 cho rank 32 trở xuống và gralora_k=4 cho rank 64 trở lên. - 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 gralora. Can be ‘none’, ‘all’ or ‘gralora_only’. If ‘all’ or ‘gralora_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 (
Optional[list[str]]) — Danh sách các module ngoài các lớp gralora cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng. Ví dụ, trong các tác vụ Phân loại Chuỗi hoặc Phân loại Token, lớp cuối cùngclassifier/scoređược khởi tạo ngẫu nhiên và do đó cần phải có thể huấn luyện và được lưu lại. - init_weights (
bool) — Có nên khởi tạo trọng số của các lớp GraLoRA 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, PEFT sẽ chỉ biến đổi 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, PEFT sẽ chỉ biến đổi lớp tại chỉ số đó. Điều này chỉ hoạt động khi target_modules là một danh sách các str. - layers_pattern (
Optional[Union[List[str], str]]) — Tên mẫu lớp, chỉ được sử dụng nếulayers_to_transformkhác None và nếu mẫu lớp không nằm trong các mẫu lớp phổ biến. Điều này chỉ hoạt động khi target_modules là một danh sách str. Tham số này nên nhắm đếnnn.ModuleListcủa mô hình, thường được gọi là'layers'hoặc'h'.
Đây là lớp cấu hình để lưu trữ cấu hình của một GraloraModel.
GraloraModel
lớp peft.GraloraModel
< 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 (GraloraConfig) — Cấu hình của mô hình Gralora.
- adapter_name (
str) — Tên của adapter, mặc định là"default".
Trả về
torch.nn.Module
Mô hình Gralora.
Tạo mô hình Random Matrix Adaptation dựa trên Vector (Gralora) từ một mô hình transformers được huấn luyện trước.
Ví dụ:
>>> from transformers import AutoModelForCausalLM
>>> from peft import GraloraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = GraloraConfig(r=128)
>>> model = get_peft_model(base_model, config)Thuộc tính:
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- peft_config (GraloraConfig): Cấu hình của mô hình Gralora.