PEFT documentation

Điều chỉnh LayerNorm

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

Điều chỉnh LayerNorm

LayerNorm Tuning (LN Tuning) là một phương pháp PEFT chỉ tinh chỉnh các tham số của các lớp LayerNorm trong mô hình. Bài báo đã kiểm tra hiệu suất của phương pháp này trên các mô hình ngôn ngữ lớn và cho thấy nó có thể đạt được hiệu suất mạnh mẽ với sự giảm đáng kể số lượng tham số có thể huấn luyện và bộ nhớ GPU sử dụng. Tuy nhiên, phương pháp này không bị giới hạn ở các mô hình ngôn ngữ và có thể được áp dụng cho bất kỳ mô hình nào sử dụng các lớp LayerNorm. Trong bản triển khai này, mặc định là tất cả các lớp layernorm bên trong mô hình sẽ được tinh chỉnh, nhưng nó cũng có thể được sử dụng để nhắm đến các loại lớp khác như các lớp MLP hoặc Attention, điều này có thể thực hiện bằng cách chỉ định target_modules trong LNTuningConfig.

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

Bài báo này giới thiệu một chiến lược hiệu quả để chuyển đổi các Mô hình Ngôn ngữ Lớn (LLM) thành các Mô hình Ngôn ngữ Lớn Đa phương thức (MLLM). Bằng cách khái niệm hóa quá trình chuyển đổi này như một quy trình thích ứng miền, tức là chuyển từ việc hiểu văn bản sang tiếp nhận nhiều phương thức, chúng tôi nhận thấy một cách thú vị rằng, trong mỗi khối chú ý, việc tinh chỉnh LayerNorm là đủ để đạt được hiệu suất mạnh mẽ. Hơn nữa, khi được đánh giá so với các phương pháp tinh chỉnh khác như tinh chỉnh toàn bộ tham số hoặc LoRA, lợi ích của nó về mặt hiệu quả là đáng kể. Ví dụ, khi so sánh với LoRA ở quy mô mô hình 13B, hiệu suất có thể được cải thiện trung bình hơn 20% trên năm tác vụ đa phương thức, đồng thời, dẫn đến việc giảm đáng kể 41,9% số tham số có thể tinh chỉnh và giảm 17,6% lượng bộ nhớ GPU sử dụng. Trên nền tảng chiến lược LayerNorm này, chúng tôi cho thấy việc chọn lọc tinh chỉnh chỉ với dữ liệu hội thoại có thể cải thiện hiệu quả hơn nữa. Ngoài những kết quả thực nghiệm này, chúng tôi cung cấp một phân tích toàn diện để khám phá vai trò của LayerNorm trong việc thích ứng LLM với miền đa phương thức và cải thiện sức biểu đạt của mô hình.

Tổng quan về benchmark

API

LNTuningConfig

lớp peft.LNTuningConfig

< >

( 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]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[Union[list[str], str]] = None )

Tham số

  • target_modules (Optional[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 LNTuning. Ví dụ, ‘.decoder.’ hoặc ‘.encoder.’. 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.
  • modules_to_save (Optional[Union[List[str], str]]) — Danh sách các module sẽ được đặt là có thể huấn luyện và được lưu trong checkpoint cuối cùng. Ví dụ, trong các tác vụ Phân loại Câu (Sequence Classification) hoặc Phân loại Token (Token Classification), lớp cuối cùng classifier/score được khởi tạo ngẫu nhiên và do đó cần phải có thể huấn luyện và được lưu lại.

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

LNTuningModel

lớp peft.LNTuningModel

< >

( 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 (LNTuningConfig) — Cấu hình của mô hình điều chỉnh LN.
  • 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ùy chọn này không có tác dụng đối với việc điều chỉnh LN nhưng tồn tại để đảm bảo tính nhất quán với các phương pháp PEFT khác.

Trả về

‘torch.nn.Module’

Mô hình đã được điều chỉnh với LayerNorm được bật.

Tạo điều chỉnh LayerNorm từ một mô hình transformer đượ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/2312.11420.

Ví dụ:

>>> from transformers import AutoModelForCausalLM
>>> from peft import get_peft_model, TaskType, LNTuningConfig

>>> peft_config = LNTuningConfig(
...     task_type=TaskType.CAUSAL_LM,
... )

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
>>> model = get_peft_model(model, peft_config)
>>> model.print_trainable_parameters()

Thuộc tính:

Update on GitHub