PEFT documentation
PEFT 통합용 함수
PEFT 통합용 함수
PeftModel이 아닌 모델, 예: transformers 또는 diffusers 통합에 유용할 수 있는 함수 모음
여기 제공되는 함수들은 PEFT의 “공개 API”로 간주되므로, PEFT 통합을 제공하는 패키지에서 안전하게 사용할 수 있습니다.
어댑터 가중치의 dtype를 캐스팅합니다
peft.tuners.tuners_utils.cast_adapter_dtype
< source >( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = True )
어댑터 가중치를 올바른 dtype으로 캐스팅하는 헬퍼 메서드입니다. 어댑터 레이어에 새로운 파라미터를 재할당하며, 일부 객체가 기존 파라미터를 참조하고 있는 경우 해당 객체는 업데이트되지 않습니다.
현재 이 기능은 float dtype을 float32로만 업캐스트합니다.
model에서 PEFT 어댑터를 삭제합니다
peft.tuners.tuners_utils.delete_adapter
< source >( model: nn.Moduleadapter_name: strprefix: strlayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> ) → new_adapter (list[str] | None)
매개변수
- model (
nn.Module) — 어댑터를 삭제할 대상 모델입니다. - adapter_name (str) — 삭제할 어댑터의 이름입니다.
- prefix (str) — PEFT 방법의 접두사입니다. 예를 들어 LoRA의 경우 “lora_”입니다.
- layer_cls (type, optional) —
어댑터 레이어의 클래스입니다. 기본값은
BaseTunerLayer입니다.
반환값
new_adapter (list[str] | None)
삭제 후 남은 어댑터의 이름, 또는 활성 어댑터가 더 이상 없는 경우 None. 필요할 경우 모델의 새 활성 어댑터를 설정하는 데 이 값을 사용하세요.
기존 PEFT 어댑터를 삭제합니다.
Note: 이 함수는 모델에 PEFT config가 있는 경우 이를 삭제하지 않습니다. 또한 마지막 PEFT 어댑터가 삭제되더라도 PEFT 레이어를 완전히 제거하지 않습니다. 이를 위해 PEFT 모델 인스턴스를 사용하는 경우 model.unload()를 사용하는 것이 좋습니다. 아니면 기본 모델을 다시 로드하세요.
PEFT 어댑터의 state dict를 가져옵니다
peft.get_peft_model_state_dict
< source >( modelstate_dict = Noneadapter_name: str = 'default'unwrap_compiled: bool = Falsesave_embedding_layers: bool | Literal['auto'] = 'auto' )
매개변수
- model (PeftModel) — Peft 모델입니다. torch.nn.DistributedDataParallel, DeepSpeed 또는 FSDP를 사용하는 경우, 모델은 기반 모델/언랩핑된 모델(즉, model.module)이어야 합니다.
- state_dict (
dict, 선택 사항, 기본값None) — 모델의 state dict입니다. 제공되지 않으면 전달된 모델의 state dict가 사용됩니다. - adapter_name (
str, 선택 사항, 기본값"default") — 상태 딕을 반환할 어댑터의 이름입니다. - unwrap_compiled (
bool, 선택 사항, 기본값False) — torch.compile이 사용된 경우 모델을 unwrap할지 여부입니다. - save_embedding_layers (
Union[bool, str], , 선택 사항, 기본값auto) —True인 경우 어댑터 가중치 외에 임베딩 레이어도 저장합니다.auto인 경우 사용 가능한 경우 config의target_modules에서 일반적인 임베딩 레이어peft.utils.other.EMBEDDING_LAYER_NAMES를 확인합니다. 이를 기반으로 불리언 플래그를 설정합니다. 이 기능은 🤗 transformers 모델에서만 작동합니다.
PEFT 모델의 주어진 어댑터의 state dict를 가져옵니다.
이것은 PEFT 매개변수만 포함하며, 기본 모델의 매개변수는 포함하지 않습니다. 따라서 반환되는 state_dict는 일반적으로 전체 모델 크기보다 작습니다. 전체 state_dict를 가져오려면 model.state_dict()를 호출하면 됩니다.
선택된 항목에 분산 텐서(예: FSDP2 또는 DTensor TP)가 포함된 경우, 모든 참여 랭크가 이 함수를 호출해야 합니다. 해당 항목을 전체 텐서로 수집하는 작업은 집합 연산(collective)입니다. 선택되지 않은 기본 모델 가중치는 여전히 샤드된 상태로 유지됩니다.
어댑터 이름은 로드 시 변경할 수 있는 임의의 이름이므로 state_dict에서 제거된다는 점에 유의하세요. 예를 들어 어댑터 이름이 'default'이고 원래 키가 'model.q_proj.lora_A.default.weight'인 경우, 반환되는 키는 'model.q_proj.lora_A.weight'가 됩니다. 가중치를 로드할 때 어댑터 이름을 처리하려면 이 함수를 set_peft_model_state_dict()와 함께 사용하세요.
PEFT config를 기반으로 PEFT 어댑터를 모델에 주입합니다
peft.inject_adapter_in_model
< source >( peft_config: PeftConfigmodel: torch.nn.Moduleadapter_name: str = 'default'low_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
매개변수
- peft_config (
PeftConfig) — PEFT 모델의 매개변수를 포함하는 구성 객체. - model (
torch.nn.Module) — 어댑터가 주입될 입력 모델입니다. - adapter_name (
str,optional, 기본값"default") — 주입할 어댑터의 이름입니다. 제공되지 않으면 기본 어댑터 이름이 사용됩니다. - low_cpu_mem_usage (
bool,optional, 기본값False) — 메타 디바이스에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다. - state_dict (
dict, 선택 사항, 기본값None) — 여기에state_dict가 전달되면, state_dict의 항목을 기반으로 어댑터가 주입됩니다. PEFT 메서드의 정확한target_modules가 알려지지 않은 경우, 예를 들어 메타 데이터 없이 체크포인트가 생성된 경우 등에 유용할 수 있습니다.state_dict의 값은 사용되지 않으며, 어댑팅해야 할 올바른 레이어를 결정하는 데 키만 사용됩니다.
PEFT 레이어를 생성하고 모델을 인플레이스(in-place)로 주입합니다.
현재 API는 프롬프트 학습 방법, 어댑션 프롬프트, 또는 여러 대상 레이어 간에 어댑터 상태를 공유하는 튜너를 지원하지 않습니다. 후자의 경우 get_peft_model()을 사용하세요.
이 함수는 get_peft_model()과 유사하지만 PeftModel 인스턴스를 반환하지 않습니다. 대신 전달된 모델의 원래 인스턴스가 변경된 상태로 반환됩니다.
모델의 활성 PEPT 어댑터(들)를 설정합니다
peft.tuners.tuners_utils.set_adapter
< source >( modeladapter_name: str | list[str]inference_mode: bool = Falselayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> )
모델의 활성 PEPT 어댑터를 설정합니다.
Active adapters는 forward pass에 참여하는 어댑터입니다. 여러 PEFT 어댑터 사이를 전환하려면 이 함수를 사용하세요.
지정된 어댑터의 학습 모드를 설정합니다
peft.tuners.tuners_utils.set_training
< source >( modeladapter_names: str | Sequence[str]training: bool = True )
…
지정된 어댑터의 requires_grad 속성을 설정합니다
peft.tuners.tuners_utils.set_requires_grad
< source >( modeladapter_names: str | Sequence[str]requires_grad: bool = True )
지정된 어댑터에 대해 그라디언트를 활성화하거나 비활성화합니다.
PEFT 상태 사전의 가중치를 모델에 로드합니다
peft.set_peft_model_state_dict
< source >( modelpeft_model_state_dictadapter_name = 'default'ignore_mismatched_sizes: bool = Falselow_cpu_mem_usage: bool = False )
매개변수
- model (PeftModel) — Peft 모델입니다.
- peft_model_state_dict (
dict) — Peft 모델의 state dict입니다. - adapter_name (
str, 선택 사항, 기본값"default") — 상태 딕트를 설정할 어댑터의 이름입니다. - ignore_mismatched_sizes (
bool, 선택 사항, 기본값False) — state dict의 크기가 일치하지 않는 경우를 무시할지 여부입니다. - low_cpu_mem_usage (
bool,optional, 기본값False) —model이 meta device에 어댑터 가중치와 함께 로드된 경우, 예를 들어low_cpu_mem_usage=True로inject_adapter_in_model을 호출한 후라면, 이 인자는True여야 합니다. 그렇지 않으면False로 두세요.
PEFT 모델의 state dict를 설정합니다.
PEFT state_dict(get_peft_model_state_dict()에서 반환된 형태)가 주어지면, 가중치를 모델에 삽입합니다. 모델에는 이미 PEFT 어댑터가 설치되어 있어야 합니다(예: inject_adapter_in_model()를 통해).
어댑터 가중치를 설정하는 것은 어댑터 이름을 다시 삽입하는 작업도 함께 처리합니다. 이 이름은 원래 어댑터를 학습할 때 사용했던 이름과 다를 수 있습니다.