PEFT documentation
GLoRA
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ụngr * (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ụngO(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:
trong đó mỗi đường dẫn được tham số hóa độc lập.
GloraConfig
lớp peft.GloraConfig
< 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 = 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ànhlora. - 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ợloravì 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ấpXd @ Xuvới các hình dạng(out, r)và(r, in). Sử dụngr * (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ụngouttham 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ếuTrue(mặc định), GLoRA được khởi tạo như một phép toán không làm gì (no-op). NếuFalse, sử dụng khởi tạo kaiming.
Ghi chú:
config_D_Ekhông hỗ trợ"lora".target_modulescó 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
< source >( 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_unloadvà các phương thức liên quan để quản lý adapter.
GloraLayer và GloraLinear
class peft.tuners.glora.GloraLinear
< source >( 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.
GloraLayerlà 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.GloraLinearlà một giải pháp thay thế trực tiếp chonn.Linearvới hỗ trợ GLoRA.- GLoRA hiện hỗ trợ các lớp cơ bản
torch.nn.Linearthô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.).