PEFT documentation

C3A: 원형 합성을 통한 매개변수 효율적 미세 조정

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

C3A: 원형 합성을 통한 매개변수 효율적 미세 조정

C3A는 Circular Convolution을 활용하여 합리적인 자원 한계 내에서 높은 랭크 적응을 달성하는 매개변수 효율적 파인튜닝 기법입니다.

C3A의 경우 다른 방법보다 훨씬 큰 학습률(LR)을 사용해야 한다는 점에 유의하세요. 예를 들어, C3A의 경우 1e-1의 학습률이 좋은 시작점이 됩니다. 또한, 훨씬 작은 weight decay를 사용해야 합니다. 자세한 내용은 method_comparison 폴더를 참고하세요.

의 경우 block_size, 은 조정 가능한 파라미터와 성능에 영향을 미칩니다. 처음에는 gcd(d1,d2)\mathrm{gcd}(d_1,d_2) 에 가까운 rr 을 선택할 수 있습니다. 여기서

C3A에는 현재 다음과 같은 제약 사항이 있습니다:

  • nn.Linear 레이어만 지원됩니다.
  • 양자화 레이어는 지원되지 않습니다.
  • block size는 대상 레이어의 입력 및 출력 크기의 공통 약수여야 합니다.

이러한 제약 조건이 사용 사례에 적합하지 않다면, 다른 방법을 고려해 보세요.

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

Low-Rank Adaptation (LoRA)는 저순위 행렬을 활용하여 대규모 foundation model을 fine-tuning하는 방법으로 인기를 얻고 있습니다. A\mathbf{A} 과 B\mathbf{B} 를 사용하여 가중치 변경(즉, $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$)을 표현합니다. 이 방법은 순차적으로 A\mathbf{A} 과 B\mathbf{B} 를 activation과 곱함으로써 학습 가능한 파라미터를 줄이고, 전체 delta 행렬과 관련된 높은 메모리 사용량을 완화합니다. 성공에도 불구하고, 내재된 저순위 특성은 성능을 제한할 수 있습니다. 이 문제를 해결하기 위해 여러 변형이 제안되었지만, LoRA가 제공하는 중요한 계산 및 메모리 효율성을 간과하는 경우가 많습니다. 본 논문에서는 C3A(Circular Convolution Adaptation)를 제안하며, 이는 향상된 성능으로 고순위 적응을 달성할 뿐만 아니라 계산 성능과 메모리 활용 모두에서 뛰어난 결과를 보입니다. 광범위한 실험을 통해 C3A가 다양한 fine-tuning 작업에서 LoRA 및 그 변형보다 일관되게 우수한 성능을 보임이 입증되었습니다.

벤치마크 개요

API

C3AConfig

클래스 peft.C3AConfig

< >

( 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 = Falseblock_size: int = 256target_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]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

매개변수

  • block_size (int) — C3A의 블록 크기입니다. 대상 레이어의 입력 크기와 출력 크기로 모두 나누어떨어져야 합니다. 어떤 block_size 값을 사용해야 할지 모르겠다면, 대상 레이어의 모든 입력 및 출력 크기의 최대공약수로 설정하세요. 이 값을 키우면 파라미터 수가 줄어듭니다.
  • target_modules (Union[list[str],str]) — C3A를 적용할 모듈의 이름들.
  • bias (str) — Bias type for C3A. Can be ‘none’, ‘all’ or ‘c3a_only’. If ‘all’ or ‘c3a_only’, the corresponding biases will be updated during training. Be aware that this means that, even when disabling the adapters, the model will not produce the same output as the base model would have without adaptation.
  • modules_to_save (list[str]) — C3A 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록
  • layers_to_transform (Union[list[int],int]) — 변환할 레이어의 인덱스입니다. 이 인수가 지정되면, 해당 목록에 명시된 레이어 인덱스에 C3A를 적용합니다. 단일 정수가 전달되면, 해당 인덱스의 레이어에 C3A를 적용합니다.
  • layers_pattern (str) — layers_to_transform가 None과 다르고 레이어 패턴이 공통 레이어 패턴에 없는 경우에만 사용되는 레이어 패턴 이름입니다.
  • block_size_pattern (dict) — The mapping from layer names or regexp expression to block_size which are different from the default specified. For example, {"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — 기본값은 ‘xavier_uniform’입니다. 이 값을 False로 설정해도 ‘xavier_uniform’이 사용됩니다. 가중치를 제로로 설정하여 C3A를 no-op으로 만들려면 값을 True로 설정하세요.

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

C3AModel

클래스 peft.C3AModel

< >

( 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 (C3AConfig) — C3A 모델의 구성입니다.
  • adapter_name (str) — 어댑터의 이름이며, 기본값은 "default"입니다.

반환값

torch.nn.Module

C3A 모델.

transformers 사전 학습 모델에서 C3A 모델을 생성합니다.

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

속성:

Update on GitHub