PEFT documentation
FRoD: 회전 자유도를 활용한 전체 랭크 효율적 파인튜닝
FRoD: 회전 자유도를 활용한 전체 랭크 효율적 파인튜닝
FRoD는 공유된 full-rank basis와 희소(sparse)한 학습 가능한 회전 자유도를 결합하는 매개변수 효율적 fine-tuning 방법입니다. 어댑터 업데이트는 고정된 투영 텐서와 학습 가능한 계수를 통해 표현되며, 이를 통해 FRoD는 학습된 매개변수의 수를 적게 유지하면서 full-rank 업데이트를 적용할 수 있습니다.
논문: Full-Rank Efficient Fine-Tuning with Rotational Degrees.
어댑터 파라미터를 저장할 때 FrodConfig에서 save_projection=False를 설정하여 투영 텐서 저장을 생략할 수 있습니다. 이 경우 투영은 베이스 모델 가중치와 projection_prng_key의 고정된 랜덤 시드로부터 복원됩니다. 이를 통해 체크포인트 크기를 줄일 수 있지만, 체크포인트 로딩이 재생성 세부 사항에 의존하지 않도록 기본값은 save_projection=True입니다.
LoRA와 비교하면, FRoD는 대각 계수와 희소 오프-대각 회전 계수만 학습하면서도 각 적응된 선형 계층에서 전체 랭크 업데이트를 표현할 수 있습니다. 이는 저랭크 업데이트가 지나치게 제한적인 경우에 유용할 수 있습니다. 단, FRoD는 어댑터 주입 시 기본 가중치에서 고정 투영 텐서를 계산하므로, 설정 비용이 더 높고 LoRA보다 구현 지원 범위가 넓지 않습니다.
대형 모델에서 FRoD는 어댑터를 주입하기 전에 대상 모듈 범주에 대해 행렬 분해를 수행하므로, Projection 초기화가 느릴 수 있습니다. 기본적으로 진행 표시줄이 표시되며, FrodConfig(progressbar=False)를 사용하여 비활성화할 수 있습니다.
메모리가 제한적인 학습 환경에서 runtime_offload_base_weight=True를 사용하면 활성 FRoD 경로가 해당 가중치를 필요로 하지 않을 때 대상 기반 가중치를 CPU에 유지합니다. 이는 선택적 옵션으로, PEFT 방식은 일반적으로 모델 이동 및 순전파 이후에도 모든 기반 매개변수를 가속기에 유지하기 때문입니다.
FRoD에는 현재 다음과 같은 제약 조건이 있습니다:
nn.Linear와transformers.pytorch_utils.Conv1D레이어만 지원됩니다.
빠른 시작
from transformers import AutoModelForSequenceClassification
from peft import FrodConfig, TaskType, get_peft_model
model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)
peft_config = FrodConfig(
task_type=TaskType.SEQ_CLS,
target_modules=["query", "value"],
modules_to_save=["classifier"],
sparse_rate=0.02,
frod_dropout=0.0,
runtime_offload_base_weight=True,
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()FrodConfig
클래스 peft.FrodConfig
< 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )
매개변수
- target_modules (
Union[List[str], str]) — FRoD를 적용할 모듈의 이름입니다. 선형 레이어만 지원됩니다. - projection_prng_key (
int) — 희소 FRoD COO 패턴을 초기화할 때 사용되는 랜덤 시드. - save_projection (
bool) — state dict에 FRoD projection 텐서를 저장할지 여부입니다. 체크포인트 크기가 증가하지만 로컬 캐시 재생성 없이 어댑터를 다시 로드할 수 있습니다. 기본값은True입니다. - frod_dropout (
float) — FRoD 레이어의 dropout 확률입니다. - fan_in_fan_out (
bool) — 교체할 레이어가 가중치를 (fan_in, fan_out) 형태로 저장하는 경우 True로 설정합니다. 예를 들어, gpt-2는 가중치를 (fan_in, fan_out) 형태로 저장하는Conv1D를 사용하므로 이 값을True로 설정해야 합니다. - bias (
str) — FRoD의 bias 유형입니다. ‘none’, ‘all’, ‘frod_only’ 중 하나를 지정할 수 있습니다. ‘all’ 또는 ‘frod_only’로 설정하면 해당 bias가 학습 중에 업데이트됩니다. 어댑터를 비활성화하더라도, 어댑팅이 적용되지 않은 기본 모델과 동일한 출력을 생성하지 않는다는 점에 유의하세요. - modules_to_save (
List[str]) — FRoD 레이어를 제외한 최종 체크포인트에 저장할 학습 가능 모듈 목록. - init_weights (
bool) — FRoD 레이어의 가중치를 기본 초기화로 초기화할지 여부입니다. 정확히 무엇을 하는지 알고 있는 경우를 제외하고는 이 설정을 변경하지 마세요. - layers_to_transform (
Union[List[int],int]) — 변환할 레이어의 인덱스입니다. 이 인수가 지정되면, 해당 목록에 명시된 레이어 인덱스에 FRoD 변환을 적용합니다. 단일 정수가 전달되면, 해당 인덱스의 레이어에 FRoD 변환을 적용합니다. - layers_pattern (
Optional[Union[List[str], str]]) —layers_to_transform가None과 다르면만 사용되는 레이어 패턴 이름입니다. 이는 모델의nn.ModuleList를 대상으로 해야 하며, 보통'layers'또는'h'라고 불립니다. - sparse_rate (
float) — 희소 학습 가능 회전 행렬의 대각 성분 외 항목 비율입니다. 값이 높을수록 용량과 학습 가능 매개변수가 증가하고, 값이 낮을수록 비용이 저렴합니다. 기본값은0.01입니다. - regularization_alpha (
float) — 기본 가중치로부터 공유 기저를 구성할 때 사용되는 작은 양수입니다. 같은 범주에 속한 레이어들의 가중치가 상관관계를 가질 때 행렬 역원을 안정화하는 데 사용됩니다. 기본값은1e-3입니다. - progressbar (
bool) — FRoD 투영을 구축하는 동안 진행 표시줄을 표시할지 여부입니다. 투영 초기화는 대상 모듈 범위에 대해 행렬 분해를 실행하기 때문에 대규모 모델에서 느릴 수 있습니다. 기본값은True입니다. - runtime_offload_base_weight (
bool) — 활성 FRoD 경로가 대상 기반 가중치를 필요로 하지 않을 때 CPU에 유지할지 여부입니다. FRoD가 적응된 가중치를 직접 재구성하므로 GPU 메모리를 줄일 수 있지만, 모델을 이동하거나 forward를 실행한 후 모든 기반 매개변수가 가속기에 남아 있어야 한다는 일반적인 PEFT 규약을 변경합니다. 기본값은False입니다.
이것은 FrodModel의 구성을 저장하기 위한 구성 클래스입니다.
FrodModel
class peft.FrodModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )