PEFT documentation
DeLoRA: 분리된 저순위 적응
DeLoRA: 분리된 저순위 적응
DeLoRA는 학습 가능한 저랭크 행렬을 정규화하고 스케일링하여 사전 학습된 가중에 대한 Frobenius 경계를 암묵적으로 유지하는 매개변수 효율적 파인튜닝 기법입니다. 이를 통해 가중치 업데이트의 방향(BA 항)과 크기(경계 항) 학습을 효과적으로 분리하여, 적응된 가중치에서 발생하는 급격한 변화를 방지하고 하이퍼파라미터 선택에 대한 견고성을 높입니다.
참고:
- 1e-3/1e-2/..와 같은 일반적인 값을 사용하여 표준 LoRA 변형보다 10~100배 큰 학습률을 사용하세요
- 초기 경계 매개변수 lambda가 너무 작지 않도록 확인하세요(일반적인 값은 10/15/.. 정도입니다). 서로 다른 레이어에 서로 다른 lambda를 설정하는 것도 가능합니다
DeLoRA에는 현재 다음과 같은 제약 사항이 있습니다:
- nn.Linear 레이어만 지원됩니다.
- 양자화 레이어는 지원되지 않습니다.
이러한 제약 조건이 사용 사례에 적합하지 않다면, 다른 방법을 고려해 보세요.
해당 논문의 초록은 다음과 같습니다:
Parameter-Efficient FineTuning(PEFT) 기법은 대규모 사전 학습 모델의 보편적 가용성 덕분에 최근 큰 인기를 얻고 있습니다. 이러한 기법은 최소한의 계산 비용으로 다운스트림 작업에 빠르게 적응할 수 있게 해줍니다. 그러나 LoRA와 같은 인기 있는 파인튜닝 기법은 하이퍼파라미터 선택이나 확장된 학습 환경에 대해 제한적인 견고성을 보여, 최적의 기본 성능을 달성하는 것을 방해합니다. 반면, ETHER와 같은 경계 설정 접근법은 더 큰 견고성을 제공하지만 극도로 낮은 랭크 적응과 고정 강도 변환으로 제한되어 적응 표현력을 떨어뜨립니다. 본 연구에서는 학습 가능한 저랭크 행렬을 정규화하고 스케일링하는 새로운 파인튜닝 기법인 Decoupled Low-rank Adaptation(DeLoRA)을 제안합니다. 변환의 거리를 경계 설정함으로써 DeLoRA는 각도 학습을 적응 강도와 효과적으로 분리하여, 성능을 희생하지 않으면서 견고성을 향상시킵니다. 주제 기반 이미지 생성, 자연어 이해, 지시 튜닝에 대한 평가를 통해 DeLoRA가 경쟁 PEFT 기법의 성능을匹敵하거나 초과하면서도 더 강한 견고성을 보임을 보여줍니다.
벤치마크 개요
API
DeloraConfig
class peft.DeloraConfig
< 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 = Falser: int = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )
매개변수
- r (
int) — DeLoRA 어댑터의 랭크입니다. - delora_lambda (
int) — DeLoRA 어댑터 경계의 초기 값입니다. 이 변수는 가중치 변경의 Frobenius 노름에 상한을 설정하여, 파인튜닝된 모델이 원래 모델에서 과도하게 벗어나는 것을 방지합니다. - module_dropout (
float) — 학습 중 DeLoRA 모듈을 비활성화할 때 사용할 dropout 확률입니다. - target_modules (
Optional[Union[List[str], str]]) — 어댑터를 적용할 모듈의 이름입니다. 이 값이 지정되면, 지정된 이름을 가진 모듈만 교체됩니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. 이 값이 ‘all-linear’로 지정되면, 출력 레이어를 제외한 모든 linear/Conv1D 모듈이 선택됩니다. 이 값이 지정되지 않으면, 모델 아키텍처에 따라 모듈이 선택됩니다. 아키텍처가 알려지지 않은 경우 오류가 발생하며, 이 경우 대상 모듈을 수동으로 지정해야 합니다. - exclude_modules (
Optional[Union[List[str], str]]) — 어댑터를 적용하지 않을 모듈의 이름입니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. - bias (
str) — DeLoRA의 bias 유형입니다. ‘none’, ‘all’, ‘delora_only’ 중 하나를 지정할 수 있습니다. ‘all’ 또는 ‘delora_only’로 설정하면 해당 bias가 학습 중에 업데이트됩니다. 어댑터를 비활성화하더라도, 어댑팅이 적용되지 않은 기본 모델과 동일한 출력을 생성하지 않는다는 점에 유의하세요. - init_weights (
bool) — 어댑터 가중치 초기화를 수행할지 여부입니다.True(기본값)인 경우: A는 kaiming uniform 초기화로, B는 0으로 초기화됩니다.False인 경우: A와 B 모두 kaiming uniform으로 초기화되어 즉시 0이 아닌 델타를 기여합니다. 일반적인 사용에서는 이를 권장하지 않습니다. - layers_to_transform (
Union[List[int], int]) — 변환할 레이어의 인덱스입니다. 정수 목록을 전달하면 이 목록에 지정된 레이어 인덱스에 어댑터를 적용합니다. 단일 정수를 전달하면 해당 인덱스의 레이어에 변환을 적용합니다. - layers_pattern (
Optional[Union[List[str], str]]) —layers_to_transform가None과 다르면만 사용되는 레이어 패턴 이름입니다. 이는 모델의nn.ModuleList를 대상으로 해야 하며, 보통'layers'또는'h'라고 불립니다. - rank_pattern (
dict) —r로 지정된 기본 rank와 다른 rank를 가지는 레이어 이름 또는 정규식 표현식에서 해당 rank로의 매핑입니다. 예를 들어,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - lambda_pattern (
dict) —delora_lambda로 지정된 기본 lambda와 다른 lambda를 레이어 이름 또는 정규식 표현으로 매핑합니다. 예를 들어,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - modules_to_save (
Optional[List[str]]) — 어댑터 레이어를 제외한 최종 체크포인트에 학습 가능 상태로 설정되고 저장될 모듈 목록.
이것은 DeloraModel의 구성을 저장하기 위한 구성 클래스입니다.
DeloraModel
class peft.DeloraModel
< 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 (DeloraConfig) — DeLoRA 모델의 구성입니다.
- adapter_name (
str) — 어댑터의 이름이며, 기본값은"default"입니다.
반환값
torch.nn.Module
DeLoRA 모델.
DeLoRA 모델을 사전 학습된 transformers 모델에서 생성합니다.
해당 방법은 DeLoRA: Decoupled Low-rank Adaptation에서 자세히 설명되어 있습니다.
속성:
- model (PreTrainedModel) — 적응할 모델.
- peft_config (DeloraConfig): DeLoRA 모델의 구성입니다.