PEFT documentation
FourierFT: Tinh chỉnh biến đổi Fourier rời rạc
FourierFT: Tinh chỉnh biến đổi Fourier rời rạc
FourierFT là một kỹ thuật tinh chỉnh hiệu quả về tham số, tận dụng Biến đổi Fourier rời rạc để nén các trọng số có thể điều chỉnh của mô hình. Phương pháp này vượt trội hơn LoRA trên bộ chuẩn GLUE và các tác vụ phân loại ViT thông thường khi sử dụng ít tham số hơn rất nhiều.
FourierFT hiện có các ràng buộc sau:
- Chỉ hỗ trợ các lớp
nn.Linear. - Các lớp lượng tử hóa không được hỗ trợ.
Nếu các ràng buộc 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 khác.
Tóm tắt từ bài báo là:
Kỹ thuật thích ứng hạng thấp (LoRA) gần đây thu hút nhiều sự quan tâm trong việc tinh chỉnh các mô hình nền tảng. Phương pháp này giảm hiệu quả số lượng tham số có thể huấn luyện bằng cách tích hợp các ma trận hạng thấp A và B để biểu diễn sự thay đổi trọng số, tức là Delta W=BA. Mặc dù LoRA đã đạt được nhiều tiến bộ, nhưng nó vẫn đối mặt với thách thức về lưu trữ khi xử lý các thích ứng tùy chỉnh quy mô lớn hoặc các mô hình cơ sở lớn hơn. Trong công việc này, chúng tôi hướng tới việc nén thêm các tham số có thể huấn luyện bằng cách tận dụng khả năng biểu diễn mạnh mẽ của phép biến đổi Fourier. Cụ thể, chúng tôi giới thiệu FourierFT, phương pháp coi Delta W là một ma trận trong miền không gian và chỉ học một phần nhỏ các hệ số phổ của nó. Với các hệ số phổ đã được huấn luyện, chúng tôi thực hiện phép biến đổi Fourier rời rạc ngược để khôi phục Delta W. Về mặt thực nghiệm, phương pháp FourierFT của chúng tôi cho thấy hiệu suất tương đương hoặc tốt hơn với ít tham số hơn so với LoRA trên nhiều tác vụ, bao gồm hiểu ngôn ngữ tự nhiên, sinh ngôn ngữ tự nhiên, tinh chỉnh theo chỉ thị và phân loại hình ảnh. Ví dụ, khi thực hiện tinh chỉnh theo chỉ thị trên mô hình LLaMA2-7B, FourierFT vượt trội hơn LoRA với chỉ 0.064M tham số có thể huấn luyện, so với 33.5M của LoRA.
Tổng quan về benchmark
API
FourierFTConfig
lớp peft.FourierFTConfig
< 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 = Falsen_frequency: int = 1000scaling: float = 150.0random_loc_seed: Optional[int] = 777fan_in_fan_out: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonen_frequency_pattern: Optional[dict] = <factory>init_weights: bool = False )
Tham số
- n_frequency (
int) — Số lượng tần số có thể học cho Biến đổi Fourier rời rạc. ‘n_frequency’ là một số nguyên lớn hơn 0 và nhỏ hơn hoặc bằng d^2 (giả sử trọng số W có kích thước d x d). Ngoài ra, đây là số lượng tham số có thể huấn luyện cần thiết để cập nhật mỗi trọng số delta W. ‘n_frequency’ sẽ ảnh hưởng đến hiệu suất và hiệu quả của PEFT. Cụ thể, nó có ít tác động đến tốc độ huấn luyện, nhưng các giá trị cao hơn (thường là) dẫn đến chi phí bộ nhớ GPU lớn hơn và độ chính xác tốt hơn. Với cùngtarget_modules, số lượng tham số của LoRA gấp (2dr/n_frequency) lần so với FourierFT. Các ví dụ sau về cài đặt liên quan đến ‘n_frequency’ có thể được dùng làm tham khảo cho người dùng. Đối với các tác vụ NLU sử dụng mô hình RoBERTa-large, việc áp dụng ‘n_frequency’: 1000 có thể đạt được kết quả gần tương đương với ‘r’: 8 trong LoRA. Lúc này, số lượng tham số của LoRA gấp khoảng 16 lần so với FourierFT. Đối với các tác vụ phân loại hình ảnh sử dụng mô hình Vit-large, việc áp dụng ‘n_frequency’: 3000 có thể đạt được kết quả gần tương đương với ‘r’: 16 trong LoRA, trong đó số lượng tham số của LoRA gấp khoảng 11 lần so với FourierFT. - scaling (
float) — Giá trị scaling cho ma trận delta W. Đây là một siêu tham số quan trọng được sử dụng để scaling, tương tự như tham số ‘lora_alpha’ trong phương pháp LoRA. ‘scaling’ có thể được xác định trong quá trình tìm kiếm siêu tham số. Tuy nhiên, nếu người dùng muốn bỏ qua quá trình này, có thể tham khảo các cài đặt trong các kịch bản sau. Tham số này có thể được đặt thành 100.0 hoặc 150.0 cho cả các mô hình RoBERTa-base và RoBERTa-large trên tất cả các tác vụ NLU (GLUE). Tham số này có thể được đặt thành 300.0 cho cả các mô hình thuộc họ LLaMA cho tất cả các tác vụ instruction tuning. Tham số này có thể được đặt thành 300.0 cho cả các mô hình ViT-base và ViT-large trên tất cả các tác vụ phân loại ảnh. - random_loc_seed (
int) — Hạt giống cho vị trí ngẫu nhiên của các tần số, tức là ma trận mục phổ. - 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 FourierFT. Ví dụ: [‘q’, ‘v’] hoặc ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Chỉ hỗ trợ các lớp linear. - 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. - 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). - bias (
str) — Bias type for FourierFT. Can be ‘none’, ‘all’ or ‘fourier_only’. - modules_to_save (
list[str]) — Danh sách các module, ngoài các lớp FourierFT, cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng. Ví dụ, trong các tác vụ Phân loại Chuỗi hoặc Phân loại Token, lớp cuối cùngclassifier/scoređược khởi tạo ngẫu nhiên và do đó cần được huấn luyện và lưu lại. - layers_to_transform (
Union[list[int],int]) — Các chỉ số lớp cần biến đổi. Nếu tham 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ên mẫu lớp, chỉ được sử dụng nếulayers_to_transformkhác None và nếu mẫu lớp không nằm trong các mẫu lớp phổ biến. Tham số này nên nhắm đếnnn.ModuleListcủa mô hình, thường được gọi là'layers'hoặc'h'. - n_frequency_pattern (
dict) — Bản ánh xạ từ tên lớp hoặc biểu thức chính quy đến n_frequency khác với giá trị mặc định được chỉ định. Ví dụ,{model.decoder.layers.0.encoder_attn.k_proj: 1000}. - init_weights (
bool) — Khởi tạo trọng số Fourier. Đặt giá trị này là False (mặc định) nếu phổ được khởi tạo thành phân phối chuẩn chuẩn. Đặt giá trị này là True nếu phổ được khởi tạo thành các số không.
Đây là lớp cấu hình để lưu trữ cấu hình của FourierFTModel.
FourierFTModel
lớp peft.FourierFTModel
< 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 (FourierFTConfig) — Cấu hình của mô hình FourierFT.
- 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 FourierFT.
Tạo mô hình FourierFT 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.03003.
Thuộc tính:
- model (PreTrainedModel) — Mô hình cần được thích ứng.
- peft_config (FourierFTConfig): Cấu hình của mô hình Fourier.