PEFT documentation

GLoRA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GLoRA

Generalized Low-Rank Adaptation (GLoRA) là một phương pháp PEFT tổng quát hóa LoRA và các cách tiếp cận liên quan. GLoRA phân rã các bản cập nhật thành các đường dẫn có thể cấu hình (A, B, C, D, E), trong đó mỗi đường dẫn có thể sử dụng tham số hóa dạng hạng thấp, vector, hằng số hoặc bị vô hiệu hóa tùy theo đường dẫn.

Mỗi đường dẫn hỗ trợ một trong bốn chế độ tham số hóa. Chúng đánh đổi số lượng tham số với tính biểu đạt (mức độ phong phú mà bản cập nhật có thể đạt được):

  • "lora": Phân rã hạng thấp (giống LoRA chuẩn). Sử dụng r * (out + in) tham số và có thể biểu diễn các hiệu chỉnh hạng-r. Có khả năng biểu diễn cao nhất, số tham số nhiều nhất.
  • "vector": Một vector đơn (ví dụ: shape (out, 1)), được broadcast trên toàn ma trận. Sử dụng O(out) tham số; chỉ có scaling hoặc shifts theo từng kênh.
  • "constant": Một giá trị vô hướng duy nhất được dùng chung cho tất cả các phần tử. Sử dụng 1 tham số; ít biểu cảm nhất trong số các tùy chọn có thể huấn luyện.
  • "none": Các giá trị bằng 0, không có tham số huấn luyện được; vô hiệu hóa hoàn toàn đường dẫn đó.

Không phải mọi đường dẫn đều chấp nhận mọi chế độ (ví dụ, config_D_E không hỗ trợ "lora"). Việc chọn "lora" trên nhiều đường dẫn hơn sẽ tăng dung lượng và số tham số có thể huấn luyện; "vector", "constant" hoặc "none" sẽ giảm cả hai.

GLoRA đặc biệt hữu ích cho nghiên cứu và các ứng dụng nâng cao, nơi bạn muốn thử nghiệm các mẫu cập nhật có cấu trúc và kết hợp nhiều cơ chế thích ứng trong một lớp duy nhất.

Ở cấp độ tổng quan, GLoRA sửa đổi một lớp tuyến tính đã đóng băng bằng cách: Weff=W0+W0⊙A+B W_{\mathrm{eff}} = W_0 + W_0 \odot A + B beff=b0+b0⊙D+E+W0C b_{\mathrm{eff}} = b_0 + b_0 \odot D + E + W_0 C

trong đó mỗi đường dẫn được tham số hóa độc lập.

GloraConfig

lớp peft.GloraConfig

< >

( 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 = 8target_modules: list[str] | str | None = Nonebias: str = 'none'modules_to_save: list[str] | None = Noneconfig_A_B: typing.Literal['lora', 'vector', 'constant', 'none'] = 'lora'config_C: typing.Literal['lora', 'vector', 'none'] = 'lora'config_D_E: typing.Literal['vector', 'constant', 'none'] = 'constant'init_weights: bool = True )

Tham số

  • r (int) — Bậc của phép phân rã hạng thấp được sử dụng khi một cấu hình được đặt thành lora.
  • target_modules (Optional[Union[List[str], str]]) — Tên của các module cần áp dụng Glora.
  • config_A_B (str) — Tham số hóa cho các ma trận A và B (các hiệu chỉnh nhân và cộng trọng số). Các giá trị hợp lệ: lora, vector, constant, none.
  • config_C (str) — Tham số hóa cho ma trận C (liên kết trọng số-sai lệch: b += W0 @ C). Các giá trị hợp lệ: lora, vector, none.
  • config_D_E (str) — Tham số hóa cho các số vô hướng D và E (các hiệu chỉnh nhân và cộng bias). Không hỗ trợ lora vì D và E là các vector có kích thước bias, không phải ma trận. Các giá trị hợp lệ: vector, constant, none.
  • init_weights (bool) — Nếu là True (mặc định), khởi tạo GLoRA như một phép toán không (zeros). Nếu là False, sử dụng khởi tạo kaiming để adapter không phải là một phép toán không.

Đây là lớp cấu hình để lưu trữ cấu hình của một GloraModel.

Glora sửa đổi một lớp tuyến tính đóng băng W0 như sau: W_eff = W0 + W0 * A + B và b_eff = b0 + b0 * D + E + W0 @ C.

Mỗi ma trận (A, B, C, D, E) có thể được tham số hóa độc lập. Các giá trị cấu hình kiểm soát số lượng tham số được sử dụng và các hình dạng mà chúng có thể biểu diễn:

  • lora: Phân rã hạng thấp Xd @ Xu với các hình dạng (out, r) và (r, in). Sử dụng r * (out + in) tham số và có thể biểu diễn bất kỳ hiệu chỉnh hạng-r nào. Giống như LoRA tiêu chuẩn.
  • vector: Một vector cột đơn lẻ có hình dạng (out, 1), được phát sóng (broadcast) trên toàn bộ ma trận. Sử dụng out tham số; chỉ thực hiện việc mở rộng (scaling) hoặc dịch chuyển (shift) theo từng kênh đầu ra.
  • constant: Một giá trị vô hướng duy nhất được dùng chung cho tất cả các phần tử. Sử dụng 1 tham số; bị ràng buộc nhất.
  • none: Các số 0, không có tham số có thể huấn luyện. Về cơ bản là vô hiệu hóa đường dẫn này.

Các tùy chọn cấu hình chính

  • r: Rank được sử dụng khi một đường dẫn được cấu hình là "lora" (mặc định: 8).
  • target_modules: Danh sách hoặc regex của tên module cần thích ứng (ví dụ: ["q_proj", "v_proj"]).
  • config_A_B: Kiểu đường dẫn cho A và B (“lora”, “vector”, “constant”, “none”).
  • config_C: Kiểu đường dẫn cho C (“lora”, “vector”, “none”).
  • config_D_E: Kiểu đường dẫn cho D và E (“constant”, “vector”, “none”).
  • bias: Xử lý thiên lệch ("none", "all" hoặc "glora_only").
  • init_weights: Nếu True (mặc định), GLoRA được khởi tạo như một phép toán không làm gì (no-op). Nếu False, sử dụng khởi tạo kaiming.

Ghi chú:

  • config_D_E không hỗ trợ "lora".
  • target_modules có thể được bỏ qua đối với các loại model được hỗ trợ (sử dụng ánh xạ mặc định của PEFT).

GloraModel

lớp peft.GloraModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Tạo mô hình Generalized Low Rank Adapter (GLoRA) từ một mô hình transformers được huấn luyện trước.

  • Bọc một mô hình cơ sở và tiêm các bộ thích ứng GLoRA vào các module được chỉ định.
  • Hỗ trợ nhiều adapter, chuyển đổi adapter, gộp/tách adapter và suy luận theo lô hỗn hợp.
  • Sử dụng set_adapter, merge_and_unload và các phương thức liên quan để quản lý adapter.

GloraLayer và GloraLinear

lớp peft.tuners.glora.GloraLayer

< >

( base_layer: nn.Module**kwargs )

class peft.tuners.glora.GloraLinear

< >

( base_layer: nn.Moduleadapter_name: strconfig**kwargs )

Bộ thích ứng GLoRA bao quanh lớp cơ sở base_layer dạng ~torch.nn.Linear đặc.

  • GloraLayer là logic cốt lõi cho thích ứng hạng thấp tổng quát, hỗ trợ nhiều adapter và cấu hình đường dẫn linh hoạt.
  • GloraLinear là một giải pháp thay thế trực tiếp cho nn.Linear với hỗ trợ GLoRA.
  • GLoRA hiện hỗ trợ các lớp cơ bản torch.nn.Linear thông thường.

Ví dụ sử dụng

from transformers import AutoModelForCausalLM
from peft import GloraConfig, get_peft_model

model = AutoModelForCausalLM.from_pretrained("your-model-id")
glora_config = GloraConfig(
    r=8,
    target_modules=["q_proj", "v_proj"],
    config_A_B="lora",
    config_C="vector",
    config_D_E="constant",
    task_type="CAUSAL_LM",
)
model = get_peft_model(model, glora_config)
model.print_healthcheck()

# Switch adapters, merge, etc.
model.set_adapter("default")
model.merge_and_unload()

Ghi chú

  • GLoRA là một tập con mở rộng của LoRA: việc đặt tất cả các đường dẫn thành “lora” sẽ khôi phục LoRA tiêu chuẩn.
  • Bạn có thể sử dụng các loại đường dẫn khác nhau cho A/B/C/D/E để thử nghiệm các chiến lược thích ứng mới.
  • GLoRA hỗ trợ tất cả các tính năng quản lý adapter PEFT tiêu chuẩn (thêm, xóa, chuyển đổi, gộp, v.v.).

Xem thêm

Update on GitHub