PEFT documentation
VB-LoRA: Tinh chỉnh hiệu quả tham số cực độ với các ngân hàng vector
VB-LoRA: Tinh chỉnh hiệu quả tham số cực độ với các ngân hàng vector
Tổng quan
VB-LoRA là một kỹ thuật tinh chỉnh hiệu quả về tham số, mở rộng LoRA bằng cách học một cơ chế chia sẻ tham số chi tiết ở cấp độ sub-vector, đạt được hiệu quả tham số cao hơn đáng kể. Điều này khiến VB-LoRA đặc biệt hữu ích trong các kịch bản mà chi phí lưu trữ và truyền tải là yếu tố then chốt. Phương pháp này hoạt động bằng cách phân rã các ma trận hạng thấp—from các lớp và module khác nhau như K, Q, V và FFN—thành các sub-vector, sau đó chia sẻ toàn cục chúng thông qua một vector bank.
Tóm tắt từ bài báo là:
Khi việc áp dụng các mô hình ngôn ngữ lớn ngày càng phổ biến và nhu cầu tùy chỉnh mô hình cho từng người dùng hoặc từng tác vụ tăng lên, các phương pháp tinh chỉnh hiệu quả về tham số (PEFT), chẳng hạn như thích ứng hạng thấp (LoRA) và các biến thể của nó, gây ra chi phí lưu trữ và truyền tải đáng kể. Để giảm thêm số tham số được lưu trữ, chúng tôi giới thiệu một hệ thống “chia và chia sẻ” phá vỡ các rào cản của phân rã hạng thấp trên các chiều ma trận, các module và các lớp bằng cách chia sẻ tham số toàn cục thông qua một ngân hàng vector. Là một hiện thực hóa của hệ thống này cho LoRA, VB-LoRA do chúng tôi đề xuất tổng hợp tất cả các ma trận hạng thấp của LoRA từ một ngân hàng vector được chia sẻ với một module pha trộn top-k có thể phân biệt. VB-LoRA đạt được hiệu quả tham số cực cao trong khi duy trì hiệu suất tương đương hoặc tốt hơn so với các phương pháp PEFT tiên tiến. Các thí nghiệm rộng rãi chứng minh hiệu quả của VB-LoRA trên các tác vụ hiểu ngôn ngữ tự nhiên, sinh ngôn ngữ tự nhiên và tinh chỉnh theo hướng dẫn. Khi tinh chỉnh mô hình Llama2-13B, VB-LoRA chỉ sử dụng 0,4% số tham số được lưu trữ của LoRA, nhưng vẫn đạt được kết quả vượt trội.
Mẹo sử dụng
VB-LoRA sử dụng một module top-k thưa để học cơ chế chia sẻ. Khi lưu các tham số adapter, bạn có thể chỉ lưu các trọng số top-k cùng chỉ số của chúng bằng cách đặt
save_only_topk_weights = TruetrongVBLoRAConfig, hoặc lưu tất cả các logits có thể huấn luyện bằng cách đặt giá trị này thànhFalse. Việc bậtsave_only_topk_weights = Truegiúp giảm đáng kể dung lượng lưu trữ; ví dụ, với Llama2-7B, kích thước tệp lưu trữ giảm từ 308MB xuống còn 2.5MB. Lưu ý rằng các mô hình được lưu vớisave_only_topk_weights = Truechỉ dành cho việc gộp hoặc suy luận và không thể dùng để tiếp tục huấn luyện.VB-LoRA có hai nhóm tham số huấn luyện: tham số vector bank và tham số logit. Trong thực tế, chúng tôi nhận thấy rằng tham số logit cần tốc độ học cao hơn, trong khi tham số vector bank cần tốc độ học thấp hơn. Khi sử dụng bộ tối ưu AdamW, các tốc độ học điển hình là 0.01 cho logits và 0.001 cho tham số vector bank.
Tổng quan về benchmark
API
VBLoRAConfig
lớp peft.VBLoRAConfig
< 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 = 4num_vectors: int = 256vector_length: int = 256topk: int = 2target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonesave_only_topk_weights: bool = Falsevblora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_vector_bank_bound: float = 0.02init_logits_std: float = 0.1layers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = None )
Tham số
- r (
int) — Bậc của các ma trận tăng dần. - num_vectors (
int) — Số lượng vector trong ngân hàng vector. Sử dụng giá trị cao hơn khi kích thước mô hình tăng lên. - vector_length (
int) — Độ dài của các vector trong ngân hàng vector. Độ dài của các vector phải chia hết cho chiều ẩn của mô hình. - topk (
int) — Giá trị K cho việc chọn top-K. Giá trị K lớn hơn sẽ làm tăng kích thước của mô hình được lưu. Trên thực tế, việc đặt K=2 thường mang lại hiệu suất và hiệu quả tham số tốt nhất. Để biết thêm chi tiết, hãy tham khảo bài thảo luận trong bài báo. - target_modules (
Union[List[str], str]) — Tên của các module cần áp dụng adapter. Nếu được chỉ định, chỉ các module có tên được chỉ định sẽ được thay thế. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Khi truyền một danh sách các chuỗi, một phép khớp chính xác sẽ được thực hiện hoặc kiểm tra xem tên của module có kết thúc bằng bất kỳ chuỗi nào được truyền hay không. Nếu được chỉ định là ‘all-linear’, thì tất cả các module linear/Conv1D sẽ được chọn, ngoại trừ lớp output. Nếu không được chỉ định, các module sẽ được chọn theo kiến trúc của 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 một cách thủ công. - exclude_modules (
Optional[Union[List[str], str]]) — Tên của các module không áp dụng adapter. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Khi truyền một danh sách các chuỗi, một phép khớp chính xác sẽ được thực hiện hoặc kiểm tra xem tên của module có kết thúc bằng bất kỳ chuỗi nào được truyền vào hay không. - save_only_topk_weights (
bool) — Có nên chỉ lưu các trọng số topk hay không. Đặtsave_only_topk_weights = Truesẽ giảm đáng kể không gian lưu trữ. Tuy nhiên, các mô hình được lưu ở chế độ này chỉ có thể dùng để gộp hoặc suy luận, không thể dùng để tiếp tục huấn luyện. - vblora_dropout (
float) — Xác suất dropout cho các lớp VBLoRA. - 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 VBLoRA. Can be ‘none’, ‘all’ or ‘vblora_only’. If ‘all’ or ‘vblora_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 VBLoRA cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng. - init_vector_bank_bound (
float) — Vector bank được khởi tạo bằng phân phối đều giữa -init_vector_bank_bound và init_vector_bank_bound. Tránh khởi tạo vector bank bằng tất cả các số 0 để ngăn ngừa gradient bằng 0. Một giá trị nhỏ, chẳng hạn như 0.02, thường hiệu quả. Khởi tạo bằng một giá trị lớn có thể gây ra sự bất ổn trong quá trình huấn luyện. - init_logits_std (
float) — Logits được khởi tạo bằng phân phối chuẩn với độ lệch chuẩn là init_logits_std. Mặc định là 0.1. - layers_to_transform (
Union[List[int],int]) — Các chỉ số lớp cần biến đổi. Nếu truyền vào một danh sách các số nguyên, adapter sẽ được áp dụng cho các chỉ số lớp được chỉ định trong danh sách này. Nếu truyền vào một số nguyên duy nhất, các phép biến đổi sẽ được áp dụng cho lớp tại chỉ số này. - 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'.
Đây là lớp cấu hình để lưu trữ cấu hình của một VBLoRAModel.
VBLoRAModel
lớp peft.VBLoRAModel
< 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 (VBLoRAConfig) — Cấu hình của mô hình VBLoRA.
- 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 VBLoRA.
Tạo mô hình VBLoRA từ một mô hình transformers được huấn luyện trước.
Phương pháp này được mô tả chi tiết tại https://huggingface.co/papers/2405.15179.
Ví dụ:
>>> from transformers import AutoModelForCausalLM
>>> from peft import VBLoRAConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = VBLoRAConfig(
... task_type="SEQ_CLS",
... r=4,
... target_modules=["fc1", "fc2", "k_proj", "out_proj", "q_proj", "v_proj"],
... num_vectors=60,
... vector_length=256,
... save_only_topk_weights=True,
... )
>>> model = get_peft_model(base_model, config)Thuộc tính:
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- peft_config (VBLoRAConfig): Cấu hình của mô hình VBLoRAConfig.
Trả về số lượng tham số VB-LoRA có thể lưu và các tham số khác có thể lưu.
In ra số lượng tham số VB-LoRA có thể lưu và tổng số tham số có thể lưu.