PEFT documentation

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

LayerNorm 튜닝

LayerNorm Tuning(LN Tuning)은 모델의 LayerNorm 레이어 파라미터만 미세 조정하는 PEFT 방법입니다. 해당 논문은 이 방법의 성능을 대규모 언어 모델에서 테스트했으며, 학습 가능한 파라미터 수와 GPU 메모리 사용량을 크게 줄이면서도 강력한 성능을 달성할 수 있음을 보여주었습니다. 그러나 이 방법은 언어 모델에 국한되지 않으며, LayerNorm 레이어를 사용하는 모든 모델에 적용할 수 있습니다. 이 구현에서는 기본적으로 모델 내부의 모든 layernorm 레이어가 미세 조정되도록 설정되어 있지만, MLP 또는 Attention 레이어와 같은 다른 레이어 유형을 대상으로 사용할 수도 있습니다. LNTuningConfig에서 target_modules를 지정하여 이를 수행할 수 있습니다.

해당 논문의 초록은 다음과 같습니다:

이 논문은 대규모 언어 모델(LLM)을 멀티모달 대규모 언어 모델(MLLM)로 변환하는 효율적인 전략을 소개합니다. 이러한 변환을 도메인 적응 과정, 즉 텍스트 이해에서 여러 모달리티 수용으로의 전환으로 개념화했을 때, 각 어텐션 블록 내에서 LayerNorm만 튜닝해도 강력한 성능을 달성할 수 있음을 흥미롭게 관찰했습니다. 또한, 전체 파라미터 파인튜닝이나 LoRA와 같은 다른 튜닝 방식과 벤치마크를 비교했을 때, 효율성 측면에서의 이점이 상당합니다. 예를 들어, 13B 모델 규모에서 LoRA와 비교할 경우, 5가지 멀티모달 작업 전반에서 평균 20% 이상 성능이 향상되는 동시에, 학습 가능한 파라미터가 41.9% 감소하고 GPU 메모리 사용량이 17.6% 줄어듭니다. 이 LayerNorm 전략을 기반으로, 대화형 데이터만 선택적으로 튜닝하면 효율성을 더욱 높일 수 있음을 보여줍니다. 이러한 실증적 결과 외에도, LLM을 멀티모달 도메인에 적응시키고 모델의 표현력을 향상시키는 데 있어 LayerNorm의 역할을 탐구하기 위한 포괄적인 분석을 제공합니다.

벤치마크 개요

API

LNTuningConfig

클래스 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 )

매개변수

  • target_modules (Optional[Union[List[str], str]]) — LNTuning으로 교체할 모듈 이름의 목록 또는 모듈 이름의 정규식 표현식입니다. 예를 들어, ‘.decoder.’ 또는 ‘.encoder.’입니다. 이 값이 지정되지 않으면 모델 아키텍처에 따라 모듈이 선택됩니다. 아키텍처가 알려지지 않은 경우 오류가 발생하며, 이 경우 대상 모듈을 수동으로 지정해야 합니다.
  • exclude_modules (Optional[Union[List[str], str]]) — 어댑터를 적용하지 않을 모듈의 이름입니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다.
  • modules_to_save (Optional[Union[List[str], str]]) — 최종 체크포인트에서 학습 가능(trainable)으로 설정되고 저장될 모듈 목록입니다. 예를 들어, Sequence Classification 또는 Token Classification 작업에서 최종 레이어인 classifier/score는 무작위로 초기화되므로 학습 가능하도록 설정하고 저장해야 합니다.

이것은 LNTuningModel의 구성을 저장하기 위한 구성 클래스입니다.

LNTuningModel

클래스 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’

매개변수

  • model (torch.nn.Module) — 적응할 모델.
  • config (LNTuningConfig) — LN 튜닝 모델의 구성입니다.
  • adapter_name (str) — 어댑터의 이름이며, 기본값은 "default"입니다.
  • low_cpu_mem_usage (bool, optional, 기본값 False) — 이 옵션은 LN 튜닝에 영향을 주지 않지만, 다른 PEFT 방법과의 일관성을 위해 존재합니다.

반환값

‘torch.nn.Module’

LayerNorm이 활성화된 상태로 조정된 적응 모델.

LayerNorm 튜닝을 사전 학습된 transformer 모델에서 생성합니다.

해당 방법은 https://huggingface.co/papers/2312.11420에서 자세히 설명되어 있습니다.

예:

>>> 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()

속성:

Update on GitHub