PEFT documentation

Super-Tuning

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

Super-Tuning

Super-Tuning là một phương pháp fine-tuning thưa, trong đó trọng lượng cơ sở được đóng băng và chỉ một tập hợp các phần tử vô hướng thưa được chọn theo độ lớn của trọng lượng sẽ được huấn luyện. Việc đặt r sẽ bổ sung thêm một adapter hạng thấp theo phong cách LoRA, được cộng thêm lên trên tập hợp thưa đó (gọi là hybrid “Supra” trong bài báo).

Điểm đánh giá mặc định chỉ dựa trên độ lớn và không cần dữ liệu. Phần ablation 8B trong bài báo cho thấy magnitude-topk đạt trung bình 79,02%, vượt trội so với độ nhạy trọng số Wanda ở mức 78,66%, trong khi không yêu cầu bước hiệu chuẩn. Việc chấm điểm có trọng số kích hoạt theo kiểu Wanda không được cung cấp trong bản triển khai này.

Super-Tuning 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à:

Việc tinh chỉnh các mô hình ngôn ngữ lớn bằng các phương pháp hiệu quả về tham số đã trở thành thực hành tiêu chuẩn, nhưng các cách tiếp cận hiện có như LoRA giới hạn không gian con có thể huấn luyện xuống một phân rã hạng thấp. Chúng tôi giới thiệu Super-Tuning, một phương pháp tinh chỉnh thưa, thay vào đó chọn một tập hỗ trợ nhỏ gồm các mục trọng lượng vô hướng riêng lẻ — một tập có thể huấn luyện không bị ràng buộc về hạng với ngân sách tham số cố định. Việc lựa chọn được dẫn dắt bởi các tín hiệu độ nổi bật lấy cảm hứng từ cắt tỉa: chấm điểm chỉ dựa trên độ lớn (kiểu PaFi) hoặc chấm điểm có trọng số kích hoạt (kiểu Wanda). Chúng tôi chỉ ra rằng trên các bản tinh chỉnh của Llama-3.2-1B và Meta-Llama-3-8B được đánh giá trên Math17K, Super-Tuning dựa trên độ lớn đạt kết quả tương đương hoặc vượt trội so với LoRA ở các ngân sách tham số tương đương, và rằng một biến thể lai “Supra” — kết hợp hỗ trợ thưa với một thành phần hạng thấp — cải thiện thêm độ chính xác của các tác vụ hạ nguồn.

Tổng quan về benchmark

Cách sử dụng

Super thuần túy (đánh giá độ lớn, không cần dữ liệu):

from peft import SupertuningConfig, get_peft_model

config = SupertuningConfig(target_modules=["q_proj", "v_proj"], sparsity=0.99)
model = get_peft_model(base_model, config)

Supra hybrid (hỗ trợ thưa + LoRA được kết hợp theo cách cộng):

config = SupertuningConfig(
    target_modules=["q_proj", "v_proj"], sparsity=0.99,
    r=8, lora_alpha=16,   # lora_alpha defaults to 2 * r when omitted
)
model = get_peft_model(base_model, config)

SupertuningConfig

lớp peft.SupertuningConfig

< >

( 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Nonesparsity: float = 0.99select_top: bool = Truer: Optional[int] = Nonelora_alpha: Optional[float] = Nonelora_dropout: float = 0.0init_weights: bool = Truesave_precomputed_indices: bool = True )

Tham số

  • target_modules (Optional[Union[List[str], str]]) — Tên của các module cần áp dụng adapter. Chuỗi → khớp regex; danh sách → khớp hậu tố / khớp chính xác; None → mặc định theo kiến trúc mô hình.
  • modules_to_save (Optional[List[str]]) — Các module nằm ngoài các lớp Supertuning cũng cần được huấn luyện và lưu trong checkpoint cuối cùng (ví dụ: các đầu phân loại được khởi tạo ngẫu nhiên).
  • sparsity (float) — Tỷ lệ sparsity mục tiêu trong [0.0, 1.0). 0.99 = 1% các phần tử trọng số có thể huấn luyện. Mặc định là 0.99.
  • select_top (bool) — Đầu nào của điểm độ lớn sẽ được giữ làm phần hỗ trợ có thể huấn luyện. True giữ các mục có độ lớn lớn nhất (Super / Supra trong bài báo); False giữ các mục nhỏ nhất (các biến thể -bottom trong bài báo). Bài báo báo cáo rằng hướng tốt nhất phụ thuộc vào mô hình và tác vụ. Mặc định là True.
  • r (Optional[int]) — Rank LoRA cho hybrid “Supra”. Khi None (mặc định), chỉ có phần hỗ trợ thưa (sparse support) là có thể huấn luyện (chế độ Super). Khi được đặt thành một số nguyên dương, sẽ bổ sung phân bổ các tham số LoRA A ([r, in_features]) và B ([out_features, r]), trong đó đóng góp của chúng được cộng thêm vào phần hỗ trợ thưa trong bước truyền thẳng (forward pass).
  • lora_alpha (Optional[float]) — Hệ số tỷ lệ LoRA cho chế độ Supra. Nếu None và r được đặt, mặc định là 2 * r. Bị bỏ qua khi r is None.
  • lora_dropout (float) — Xác suất dropout của LoRA cho chế độ Supra. Mặc định là 0.0. Bị bỏ qua khi r is None.
  • init_weights (bool) — Khi True (mặc định), các values thưa được khởi tạo bằng 0 và LoRA B được khởi tạo bằng 0 — adapter là một phép cập nhật đồng nhất tại thời điểm khởi tạo. Khi False, cả hai đều dùng Kaiming-uniform (được dùng trong các bài kiểm tra để thử nghiệm một adapter không tầm thường). LoRA A dùng Kaiming-uniform trong cả hai trường hợp.
  • save_precomputed_indices (bool) — Xác định có lưu các chỉ số sparse-support trong state dict hay không. Mặc định là True. Đặt thành False để giảm kích thước checkpoint — các chỉ số sẽ được tái tạo một cách tất định từ độ lớn của trọng lượng cơ bản khi tải. Việc tái tạo giả định rằng trọng lượng của mô hình cơ bản giống hệt với những gì được sử dụng trong quá trình huấn luyện; sự trôi dạt số nhỏ có thể khiến việc phân tách các giá trị topk bằng nhau khác đi.

Lớp cấu hình cho SupertuningModel.

Super-Tuning (arXiv:2607.09287) đóng băng trọng số cơ sở và chỉ huấn luyện một tập hỗ trợ thưa các phần tử vô hướng, được chọn theo độ lớn của trọng số. Việc đặt r sẽ bổ sung thêm một bộ thích ứng hạng thấp kiểu LoRA trên tập hỗ trợ thưa đó (gọi là “Supra” hybrid trong bài báo).

Cấu hình mặc định (đánh giá theo độ lớn, r=None) tái tạo cấu hình cơ chế đơn tốt nhất được báo cáo trong bài báo: trên Meta-Llama-3-8B, magnitude-topk đạt trung bình 79,02% vượt trội hơn Wanda ở mức 78,66% VÀ không yêu cầu bước hiệu chuẩn. Việc đánh giá có trọng số kích hoạt theo kiểu Wanda không được cung cấp trong bản triển khai này.

Bài báo: https://arxiv.org/abs/2607.09287

SupertuningModel

lớp peft.SupertuningModel

< >

( 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ơ bản cần thích ứng.
  • config (SupertuningConfig) — Cấu hình Supertuning.
  • adapter_name (str) — Tên adapter. Mặc định là "default".
  • low_cpu_mem_usage (bool, tùy chọn) — Tạo trọng số adapter rỗng trên thiết bị meta để tăng tốc độ tải.

Trả về

torch.nn.Module

Mô hình được bọc bởi Supertuning.

Bộ điều chỉnh Super-Tuning (arXiv:2607.09287).

Đóng băng trọng số cơ sở và chỉ huấn luyện một tập hỗ trợ thưa gồm các phần tử vô hướng được chọn theo độ lớn của trọng số (cấu hình cơ chế đơn tốt nhất trong bài báo; không cần dữ liệu). Khi config.r được đặt, hệ thống sẽ bổ sung các tham số LoRA A/B được tổ hợp cộng thêm với tập hỗ trợ thưa — đây là cấu hình Supra hybrid trong bài báo.

Ví dụ (chỉ dùng Super):

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

>>> base = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
>>> config = SupertuningConfig(target_modules=["q_proj", "v_proj"], sparsity=0.99)
>>> model = get_peft_model(base, config)

Ví dụ (Supra hybrid):

>>> config = SupertuningConfig(
...     target_modules=["q_proj", "v_proj"],
...     sparsity=0.99,
...     r=8,
...     lora_alpha=16,
... )
>>> model = get_peft_model(base, config)

Bài báo: https://arxiv.org/abs/2607.09287

Update on GitHub