PEFT documentation
PEANuT: Điều chỉnh hiệu quả tham số với các bộ chỉnh sửa mạng nơ-ron nhận thức trọng số
PEANuT: Điều chỉnh hiệu quả tham số với các bộ chỉnh sửa mạng nơ-ron nhận thức trọng số
PEANuT là một kỹ thuật tinh chỉnh hiệu quả về tham số, đưa vào các bộ điều chỉnh mạng nơ-ron nhận thức trọng số để tạo ra các bản cập nhật adapter từ chính các trọng số tiền huấn luyện đã đóng băng. Thay vì học một bản cập nhật hạng thấp tuyến tính thuần túy như trong LoRA, PEANuT đặt điều kiện cho phép biến đổi adapter dựa trên trọng số cơ sở, giúp quy tắc cập nhật trở nên biểu cảm hơn trong khi vẫn giữ số lượng tham số có thể huấn luyện ở mức nhỏ.
PEANuT sử dụng một phép chiếu đầu vào A, một phép chiếu đầu ra B, và các cặp encoder/decoder residual trung gian tùy chọn với các hàm kích hoạt phi tuyến. Điều này cho phép mô hình hóa các mẫu cập nhật phức tạp hơn so với các adapter tuyến tính không phụ thuộc trọng số, trong khi vẫn nằm trong phạm vi của PEFT.
PEANuT hiện có các đánh đổi sau:
Ưu điểm:
- Khả năng biểu diễn lý thuyết cao hơn so với các cập nhật hạng thấp tuyến tính.
- Hiệu suất tốt hơn LoRA trên một loạt các tác vụ với ngân sách tương đương.
- Hoạt động tốt trong các chế độ có rất ít tham số, ví dụ khoảng
0.2Mtham số có thể huấn luyện.
Nhược điểm:
- Mức sử dụng bộ nhớ cao hơn so với LoRA, vì
ΔWđược xây dựng một cách tường minh trước khi được áp dụng. - Tốc độ huấn luyện và suy luận chậm hơn so với LoRA, và các lớp trung gian sâu hơn sẽ làm tăng thêm chi phí này.
- Tính phi tuyến có thể đòi hỏi việc tinh chỉnh siêu tham số cẩn thận hơn, đặc biệt là tốc độ học và các cài đặt tối ưu hóa liên quan.
Nếu các đánh đổi này không phù hợp với trường hợp sử dụng của bạn, hãy cân nhắc các phương pháp PEFT khác như LoRA.
Tóm tắt từ bài báo là:
Việc tinh chỉnh các mô hình nền tảng tiền huấn luyện lớn thường mang lại hiệu suất hạ nguồn xuất sắc nhưng lại quá tốn kém khi cập nhật tất cả các tham số. Các phương pháp tinh chỉnh hiệu quả về tham số (PEFT) như LoRA giảm bớt điều này bằng cách giới thiệu các module cập nhật nhẹ, nhưng chúng thường dựa vào các xấp xỉ tuyến tính không phụ thuộc trọng số, làm hạn chế khả năng biểu diễn. Trong công việc này, chúng tôi đề xuất PEANuT, một khung PEFT mới giới thiệu các bộ chỉnh sửa mạng nơ-ron nhận thức trọng số, các module mạng nơ-ron gọn nhẹ tạo ra các cập nhật thích ứng với tác vụ có điều kiện dựa trên các trọng số tiền huấn luyện đã đóng băng. PEANuT cung cấp một cách linh hoạt nhưng hiệu quả để nắm bắt các mẫu cập nhật phức tạp mà không cần tinh chỉnh toàn bộ mô hình. Chúng tôi chứng minh về mặt lý thuyết rằng PEANuT đạt được khả năng biểu diễn tương đương hoặc lớn hơn so với các phương pháp PEFT tuyến tính hiện có với số tham số tương đương hoặc ít hơn. Các thí nghiệm rộng rãi trên bốn bộ chuẩn với hơn hai mươi bộ dữ liệu cho thấy PEANuT luôn vượt trội hơn các đường cơ sở mạnh trong cả các tác vụ NLP và thị giác, trong khi vẫn duy trì chi phí tính toán thấp.
Tổng quan về benchmark
API
PeanutConfig
lớp peft.PeanutConfig
< 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 = 32depth: int = 0act_fn: str = 'relu'scaling: float = 1.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )
Tham số
- r (
int) — Rank của PEANuT. Đây là chiều ẩn được sử dụng bởi các adapter. Tương tự như rank của LoRA,rlớn hơn sẽ tăng dung lượng adapter và số tham số có thể huấn luyện. - depth (
int) — Số lượng lớp adapter ẩn cho mỗi phía encoder/decoder trong PEANuT. Lớp chiếu đầu vàoAvà lớp chiếu đầu raBluôn luôn có mặt bên cạnh các lớp ẩn này. Do đó,depthphải là một số nguyên không âm.depth=0:A,B.depth=1:A, một encoder, một decoder,B.depth=2:A, hai bộ mã hóa, hai bộ giải mã,B.depth=3:A, ba bộ mã hóa, ba bộ giải mã,B, v.v.
- act_fn (
str) — Hàm kích hoạt phi tuyến được áp dụng trong mạng PEANuT. Điều này tương ứng vớinon_lineartrong cài đặt PyTorch gốc. Mặc định là"relu". Mọi khóa kích hoạt có sẵn trongtransformers.activations.ACT2FNđều được hỗ trợ và có thể cho hiệu suất tốt hơn trên các tác vụ khác nhau. - scaling (
float) — Hệ số nhân vô hướng được áp dụng cho đầu ra của PEANuT trước khi cộng vào đầu ra của lớp cơ sở đóng băng. Đóng góp cuối cùng của adapter làscaling * (x @ delta_w). - target_modules (
Union[List[str], str], tùy chọn) — Tên của các module cần áp dụng PEANuT. Có thể là một danh sách các chuỗi tên module (ví dụ:['q_proj', 'v_proj']) hoặc một mẫu regex. - modules_to_save (
List[str], tùy chọn) — Danh sách các module ngoài các lớp PEANuT cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng. - exclude_modules (
Union[List[str], str], tùy chọn) — 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. - layers_to_transform (
Union[list[int], int], tùy chọn) — Các chỉ số lớp cần biến đổi. Nếu đối 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ố đó. - layers_pattern (
Optional[Union[List[str], str]], tùy chọn) — Tên mẫu lớp, chỉ được sử dụng nếulayers_to_transformkhông phải là None và nếu mẫu lớp không nằm trong các mẫu lớp phổ biến. - init_weights (
bool) — Có nên khởi tạo trọng số của adapter PEANuT bằng phương thức khởi tạo mặc định không:- Nếu
True: tất cả các trọng số ngoại trừBđược khởi tạo bằng Kaiming uniform, vàBđược khởi tạo bằng số không. - Nếu
False: tất cả các trọng số (bao gồmB) được khởi tạo bằng Kaiming uniform.
Việc khởi tạo
Bbằng 0 khiến adapter bắt đầu như một phép toán không làm gì (no-op) chính xác. - Nếu
Đây là lớp cấu hình để lưu trữ cấu hình của PeanutModel.
Ghi chú:
PEANuT sử dụng một đường dẫn nhận thức trọng số, trong đó trọng số delta được điều kiện bởi trọng số cơ sở. Bộ thích ứng A
được áp dụng trên chiều đầu ra của trọng số cơ sở, do đó A có hình dạng (out_dim -> r) thay vì hình dạng thông thường (in_dim -> r) được sử dụng bởi các phương pháp kiểu LoRA.
PeanutModel
lớp peft.PeanutModel
< 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 (
torch.nn.Module) — Mô hình cần được thích ứng. - config (PeanutConfig) — Cấu hình của mô hình PEANuT.
- adapter_name (
str) — Tên của adapter, mặc định là"default".
Trả về
torch.nn.Module
Mô hình PEFT PEANuT.
Tạo một mô hình PEANuT 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://arxiv.org/abs/2410.01870.
Thuộc tính:
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- peft_config (PeanutConfig): Cấu hình của mô hình PEANuT.