PEFT documentation
FourierFT: 이산 푸리에 변환 파인튜닝
FourierFT: 이산 푸리에 변환 파인튜닝
FourierFT는 이산 푸리에 변환(Discrete Fourier Transform)을 활용하여 모델의 조정 가능한 가중치를 압축하는 매개변수 효율적 파인튜닝 기법입니다. 이 방법은 훨씬 적은 매개변수를 사용하면서도 GLUE 벤치마크와 일반적인 ViT 분류 작업에서 LoRA보다 우수한 성능을 보입니다.
FourierFT에는 현재 다음과 같은 제약 사항이 있습니다:
nn.Linear레이어만 지원됩니다.- 양자화 레이어는 지원되지 않습니다.
이러한 제약 조건이 사용 사례에 적합하지 않다면, 다른 방법을 고려해 보세요.
해당 논문의 초록은 다음과 같습니다:
Low-rank adaptation (LoRA)는 최근 foundation model의 fine-tuning 분야에서 큰 관심을 받고 있습니다. 이는 weight change를 표현하기 위해 low-rank matrix A와 B를 도입하여 학습 가능한 파라미터의 수를 효과적으로 줄입니다. 즉, Delta W=BA입니다. LoRA의 발전에도 불구하고, 광범위한 customization adaptation이나 더 큰 base model을 처리할 때 저장 공간의 문제가 발생합니다. 본 연구에서는 Fourier transform의 강력한 표현력을 활용하여 학습 가능한 파라미터를 추가로 압축하는 것을 목표로 합니다. 구체적으로, 우리는 FourierFT를 소개합니다. FourierFT는 Delta W를 spatial domain의 matrix로 취급하고, 그 spectral coefficients의 일부만 학습합니다. 학습된 spectral coefficients를 사용하여 inverse discrete Fourier transform을 수행하여 Delta W를 복원합니다. 실험적으로, 자연어 이해, 자연어 생성, instruction tuning, 이미지 분류를 포함한 다양한 작업에서 FourierFT 방법은 LoRA보다 적은 파라미터로 동등하거나 더 나은 성능을 보여줍니다. 예를 들어, LLaMA2-7B 모델에 instruction tuning을 수행할 때, FourierFT는 LoRA의 33.5M에 비해 단 0.064M의 학습 가능한 파라미터만으로 LoRA를 능가합니다.
벤치마크 개요
API
FourierFTConfig
클래스 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 )
매개변수
- n_frequency (
int) — Discrete Fourier Transform에 사용할 학습 가능한 주파수의 수입니다. ‘n_frequency’는 0보다 크고 d^2 이하인 정수입니다(가중치 W의 차원이 d x d라고 가정). 또한, 각 delta W 가중치를 업데이트하는 데 필요한 학습 가능 매개변수의 수이기도 합니다. ‘n_frequency’는 PEFT의 성능과 효율성에 영향을 미칩니다. 구체적으로, 학습 속도에는 거의 영향을 주지 않지만, 값이 높을수록(일반적으로) GPU 메모리 비용이 증가하고 정확도가 향상됩니다.target_modules가 동일한 경우, LoRA의 매개변수 수는 FourierFT의 (2dr/n_frequency)배입니다. 사용자는 ‘n_frequency’ 설정에 대한 다음 예시를 참고할 수 있습니다. RoBERTa-large 모델을 사용하는 NLU 작업에서 ‘n_frequency’: 1000을 채택하면 LoRA의 ‘r’: 8과 거의 유사한 결과를 얻을 수 있습니다. 이 경우 LoRA의 매개변수 수는 FourierFT의 약 16배입니다. Vit-large 모델을 사용하는 이미지 분류 작업에서 ‘n_frequency’: 3000을 채택하면 LoRA의 ‘r’: 16과 거의 유사한 결과를 얻을 수 있으며, 이 경우 LoRA의 매개변수 수는 FourierFT의 약 11배입니다. - scaling (
float) — 델타 W 행렬에 적용되는 스케일링 값입니다. 이는 LoRA 방법의 ‘lora_alpha’ 매개변수와 유사하게 스케일링에 사용되는 중요한 하이퍼파라미터입니다. ‘scaling’은 하이퍼파라미터 탐색 과정에서 결정할 수 있습니다. 그러나 사용자가 이 과정을 건너뛰고자 한다면, 다음 시나리오의 설정을 참고할 수 있습니다. 이 매개변수는 모든 NLU(GLUE) 작업에서 RoBERTa-base 및 RoBERTa-large 모델 모두에 대해 100.0 또는 150.0으로 설정할 수 있습니다. 이 매개변수는 모든 instruction tuning에서 LLaMA 계열 모델 모두에 대해 300.0으로 설정할 수 있습니다. 이 매개변수는 모든 이미지 분류 작업에서 ViT-base 및 ViT-large 모델 모두에 대해 300.0으로 설정할 수 있습니다. - random_loc_seed (
int) — 주파수의 무작위 위치, 즉 스펙트럼 엔트리 행렬의 시드입니다. - target_modules (
Union[list[str],str]) — FourierFT로 대체할 모듈 이름의 목록 또는 모듈 이름의 정규식 표현입니다. 예를 들어, [‘q’, ‘v’] 또는 ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. 선형 레이어만 지원됩니다. - exclude_modules (
Optional[Union[List[str], str]]) — 어댑터를 적용하지 않을 모듈의 이름입니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. - fan_in_fan_out (
bool) — 교체할 레이어가 가중치를 (fan_in, fan_out) 형식으로 저장하는 경우 True로 설정합니다. - bias (
str) — FourierFT의 Bias 유형입니다. ‘none’, ‘all’, ‘fourier_only’ 중 하나를 사용할 수 있습니다. - modules_to_save (
list[str]) — FourierFT 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록입니다. 예를 들어, 시퀀스 분류 또는 토큰 분류 작업에서 최종 레이어인classifier/score는 무작위로 초기화되므로 학습 가능하게 설정하고 저장해야 합니다. - layers_to_transform (
Union[list[int],int]) — 변환할 레이어 인덱스입니다. 이 인수가 지정되면 PEFT는 이 리스트에 지정된 레이어 인덱스만 변환합니다. 단일 정수가 전달되면 PEFT는 해당 인덱스의 레이어만 변환합니다. - layers_pattern (
Optional[Union[List[str], str]]) —layers_to_transform가 None과 다르고, 해당 레이어 패턴이 공통 레이어 패턴에 포함되지 않는 경우에만 사용되는 레이어 패턴 이름입니다. 이는 모델의nn.ModuleList를 대상으로 해야 하며, 보통'layers'또는'h'라고 불립니다. - n_frequency_pattern (
dict) — 기본값과 다른 n_frequency가 지정된 레이어 이름 또는 정규식 표현에 대한 매핑입니다. 예를 들어,{model.decoder.layers.0.encoder_attn.k_proj: 1000}. - init_weights (
bool) — Fourier 가중치의 초기화입니다. 스펙트럼이 표준 정규 분포로 초기화되는 경우 이 값을 False(기본값)로 설정합니다. 스펙트럼이 0으로 초기화되는 경우 이 값을 True로 설정합니다.
이것은 FourierFTModel의 구성을 저장하기 위한 구성 클래스입니다.
FourierFTModel
class 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
매개변수
- model (
torch.nn.Module) — 적응할 모델. - config (FourierFTConfig) — FourierFT 모델의 설정입니다.
- adapter_name (
str) — 어댑터의 이름이며, 기본값은"default"입니다. - low_cpu_mem_usage (
bool,optional, 기본값False) — 메타 디바이스에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다.
반환값
torch.nn.Module
FourierFT 모델.
FourierFT 모델을 사전 학습된 transformers 모델에서 생성합니다.
해당 방법은 https://huggingface.co/papers/2405.03003에서 자세히 설명되어 있습니다.
속성:
- model (PreTrainedModel) — 적응할 모델.
- peft_config (FourierFTConfig): Fourier 모델의 구성입니다.