PEFT documentation

Bộ thích ứng bậc cao thưa

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

Bộ thích ứng bậc cao thưa

Sparse High Rank Adapters hay SHiRA là một loại adapter thay thế và đã được chứng minh là có nhiều ưu thế đáng kể so với các adapter bậc thấp. Cụ thể, SHiRA đạt độ chính xác cao hơn LoRA trên nhiều tác vụ thị giác và ngôn ngữ. Nó cũng cung cấp phương pháp kết hợp nhiều adapter đơn giản và chất lượng cao hơn bằng cách giảm đáng kể hiện tượng mất khái niệm, một vấn đề phổ biến mà các adapter bậc thấp thường gặp phải. SHiRA trực tiếp tinh chỉnh một số lượng nhỏ các tham số của mô hình gốc để tinh chỉnh mô hình cho bất kỳ tác vụ thích ứng nào.

SHiRA hiện có ràng buộc sau:

  • Chỉ hỗ trợ các lớp nn.Linear.

Tóm tắt từ bài báo là:

Low Rank Adaptation (LoRA) đã thu hút sự chú ý lớn trong nghiên cứu AI tạo sinh gần đây. Một trong những lợi thế chính của LoRA là khả năng được hợp nhất (fuse) với các mô hình được huấn luyện trước, không gây thêm chi phí trong quá trình suy luận. Tuy nhiên, từ góc độ triển khai trên thiết bị di động, chúng ta có thể tránh chi phí suy luận ở chế độ hợp nhất nhưng mất khả năng chuyển đổi bộ thích ứng (adapter) nhanh chóng, hoặc phải chịu độ trễ suy luận cao hơn đáng kể (lên đến 30%) khi cho phép chuyển đổi nhanh ở chế độ chưa hợp nhất. LoRA cũng thể hiện hiện tượng mất khái niệm (concept-loss) khi nhiều bộ thích ứng được sử dụng đồng thời. Trong bài báo này, chúng tôi đề xuất Sparse High Rank Adapters (SHiRA), một phương pháp tiếp cận mới không gây chi phí suy luận, cho phép chuyển đổi nhanh và giảm đáng kể hiện tượng mất khái niệm. Cụ thể, SHiRA có thể được huấn luyện bằng cách chỉ điều chỉnh trực tiếp 1-2% trọng số của mô hình cơ sở trong khi giữ nguyên các phần còn lại. Điều này tạo ra một bộ thích ứng có độ thưa (sparse) cao, có thể được chuyển đổi trực tiếp ở chế độ hợp nhất. Chúng tôi cũng cung cấp các nhận định lý thuyết và thực nghiệm về cách độ thưa cao trong SHiRA có thể hỗ trợ việc hợp nhất nhiều bộ thích ứng bằng cách giảm mất khái niệm. Các thí nghiệm mở rộng của chúng tôi trên LVM và LLM cho thấy việc tinh chỉnh chỉ một phần nhỏ các tham số trong mô hình cơ sở vượt trội hơn đáng kể so với LoRA, đồng thời cho phép cả chuyển đổi nhanh và hợp nhất nhiều bộ thích ứng. Cuối cùng, chúng tôi cung cấp một triển khai SHiRA hiệu quả về độ trễ và bộ nhớ dựa trên Thư viện Parameter-Efficient Finetuning (PEFT), huấn luyện với tốc độ gần như tương đương LoRA nhưng tiêu thụ ít hơn tới 16% bộ nhớ GPU đỉnh, từ đó giúp SHiRA dễ dàng áp dụng cho các trường hợp sử dụng thực tế. Để minh họa lợi ích của việc chuyển đổi nhanh trong quá trình suy luận, chúng tôi cho thấy việc nạp SHiRA vào một mô hình cơ sở có thể nhanh hơn 5 lần đến 16 lần so với việc hợp nhất LoRA trên CPU.

Tổng quan về benchmark

API

ShiraConfig

lớp peft.ShiraConfig

< >

( 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 = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )

Tham số

  • r (int, tuỳ chọn, mặc định là 32) — Đối với một module đích cho trước, số lượng tham số SHiRA được tính là r(m+n), trong đó các chiều tensor gốc là m x n. Điều này có nghĩa là số lượng tham số SHiRA bằng với số lượng tham số của một adapter LoRA. SHiRA là một adapter bậc cao. Việc đặt tham số r này không giới hạn bậc xuống đúng giá trị đó.
  • mask_type (str, mặc định là random) — Loại hàm mask. Mặc định là một mask thưa ngẫu nhiên. Bạn cũng có thể cung cấp một mask_fn do người dùng định nghĩa tùy chọn để tính toán giá trị mask bằng cách khởi tạo config = ShiraConfig(...) và sau đó đặt config.mask_fn = <your custom mask function>. Đối với trọng số được huấn luyện trước có hình dạng m x n, hàm mask tùy chỉnh phải chỉ trả về một mask (hình dạng: m x n) phải là nhị phân 0 hoặc 1 với num_shira_parameters = r(m + n) cho các lớp tuyến tính. Thiết bị và dtype của mask phải giống với thiết bị và dtype của trọng số lớp cơ sở. Vui lòng xem mask_functions.py để biết thêm chi tiết và để xem cài đặt mask thưa ngẫu nhiên mặc định.
  • random_seed (int, tùy chọn, mặc định là None) — hạt ngẫu nhiên cho trình tạo torch của random_mask.
  • 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 SHiRA. Ví dụ: [‘q’, ‘v’] hoặc ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Chỉ hỗ trợ các lớp linear.
  • 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ụng Conv1D lưu trọng số theo dạng (fan_in, fan_out) do đó giá trị này nên được đặt thành True.
  • init_weights (bool, mặc định là True) — Khởi tạo trọng số SHiRA với giá trị bằng 0. Nếu đặt thành False, trọng số SHiRA sẽ được khởi tạo bằng các giá trị randn thay vì số 0, và điều này chỉ được sử dụng cho mục đích kiểm thử.
  • modules_to_save (List[str]) — Danh sách các module ngoài các lớp SHiRA cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng.

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

ShiraModel

lớp peft.ShiraModel

< >

( 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 (ShiraConfig) — Cấu hình của mô hình SHiRA.
  • adapter_name (str) — Tên của adapter, mặc định là "default".

Trả về

torch.nn.Module

Mô hình SHiRA.

Tạo một Mô hình Sparse High Rank Adapter (SHiRA) từ một mô hình được huấn luyện trước.

Ví dụ:

>>> from transformers import AutoModelForCausalLM
>>> from peft import ShiraConfig, get_peft_model

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = ShiraConfig(r=32)
>>> model = get_peft_model(base_model, config)

Thuộc tính:

Update on GitHub