# 모델

[PeftModel](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel)은 PEFT 방법을 적용할 기본 Transformer 모델과 구성을 지정하기 위한 기본 모델 클래스입니다. 기본 `PeftModel`에는 Hub에서 모델을 로드하고 저장하는 메서드가 포함되어 있습니다.

## PeftModel[[peft.PeftModel]]

#### peft.PeftModel[[peft.PeftModel]]

```python
peft.PeftModel(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', autocast_adapter_dtype: bool = True, low_cpu_mem_usage: bool = False)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L140)

**매개변수:**

model (`torch.nn.Module`) : 적응할 대상이 되는 기본 모델로, 일반적으로 Transformers 모델입니다.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 모델의 구성입니다.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다. > [!TIP] > 학습을 위해 새로운 PEFT 어댑터를 생성할 때 `low_cpu_mem_usage=True`를 사용하지 마세요.

다양한 Peft 방법을 포함하는 기본 모델.

**속성**:
- **base_model** (`torch.nn.Module`) -- Peft에 사용되는 기본 transformer 모델입니다.
- **peft_config** ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) -- Peft 모델의 구성입니다.
- **modules_to_save** (`list` of `str`) -- 모델을 저장할 때 저장할 서브 모듈 이름 목록입니다.
- **prompt_encoder** ([PromptEncoder](/docs/peft/main/ko/package_reference/p_tuning#peft.PromptEncoder)) -- [PromptLearningConfig](/docs/peft/main/ko/package_reference/config#peft.PromptLearningConfig)를 사용하는 경우 Peft에 사용되는 프롬프트 인코더입니다.
- **prompt_tokens** (`torch.Tensor`) -- [PromptLearningConfig](/docs/peft/main/ko/package_reference/config#peft.PromptLearningConfig)를 사용하는 경우 Peft에 사용되는 가상 프롬프트 토큰입니다.
- **transformer_backbone_name** (`str`) -- [PromptLearningConfig](/docs/peft/main/ko/package_reference/config#peft.PromptLearningConfig)를 사용하는 경우, 기본 모델의 transformer backbone 이름입니다.
- **word_embeddings** (`torch.nn.Embedding`) -- [PromptLearningConfig](/docs/peft/main/ko/package_reference/config#peft.PromptLearningConfig)를 사용하는 경우, 베이스 모델의 트랜스포머 백본에 대한 단어 임베딩입니다.

#### add_adapter[[peft.PeftModel.add_adapter]]

```python
add_adapter(adapter_name: str, peft_config: PeftConfig, low_cpu_mem_usage: bool = False, autocast_adapter_dtype: bool = True)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1113)

**매개변수:**

adapter_name (`str`) : 추가할 어댑터의 이름.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : 추가할 어댑터의 구성입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 저장된 어댑터를 로드할 때 프로세스를 가속하는 데 유용합니다. 학습을 위해 새로운 PEFT 어댑터를 생성할 때는 이 옵션을 사용하지 마세요.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

전달된 구성에 따라 모델에 어댑터를 추가합니다.

이 어댑터는 학습되지 않았습니다. 학습된 어댑터를 로드하려면 [PeftModel.load_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.load_adapter)를 확인하세요.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

#### create_or_update_model_card[[peft.PeftModel.create_or_update_model_card]]

```python
create_or_update_model_card(output_dir: str)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1884)

peft에 대한 정보를 포함하도록 모델 카드를 업데이트하거나 생성합니다:
1. `peft` 라이브러리 태그를 추가합니다
2. peft 버전을 추가합니다
3. base model 정보를 추가합니다
4. 사용된 경우 양자화 정보를 추가합니다

#### delete_adapter[[peft.PeftModel.delete_adapter]]

```python
delete_adapter(adapter_name: str)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1194)

**매개변수:**

adapter_name (str) : 삭제할 어댑터의 이름.

기존 어댑터를 삭제합니다.

#### disable_adapter[[peft.PeftModel.disable_adapter]]

```python
disable_adapter()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1048)

어댑터 모듈을 비활성화하는 컨텍스트 매니저입니다. 이를 사용하여 베이스 모델에서 추론을 실행합니다.

예:

```py
>>> with model.disable_adapter():
...     model(inputs)
```

#### forward[[peft.PeftModel.forward]]

```python
forward(*args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1027)

모델의 순전파(forward pass).

#### from_pretrained[[peft.PeftModel.from_pretrained]]

```python
from_pretrained(model: torch.nn.Module, model_id: Union[str, os.PathLike], adapter_name: str = 'default', is_trainable: bool = False, config: Optional[PeftConfig] = None, autocast_adapter_dtype: bool = True, ephemeral_gpu_offload: bool = False, low_cpu_mem_usage: bool = False, key_mapping: Optional[dict[str, str]] = None, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L438)

**매개변수:**

model (`torch.nn.Module`) : 적응할 모델입니다. 🤗 Transformers 모델의 경우, 모델은 [from_pretrained](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained)로 초기화되어야 합니다.

model_id (`str` 또는 `os.PathLike`) : 사용할 PEFT 구성의 이름. 다음 중 하나일 수 있습니다: - Hugging Face Hub의 모델 저장소에 호스팅된 PEFT 구성의 `model id`인 문자열. - `save_pretrained` 메서드를 사용하여 저장된 PEFT 구성 파일이 포함된 디렉터리의 경로 (`./my_peft_config_directory/`).

adapter_name (`str`, *선택 사항*, 기본값 `"default"`) : 로드할 어댑터의 이름입니다. 여러 어댑터를 로드할 때 유용합니다.

is_trainable (`bool`, *선택 사항*, 기본값 `False`) : 어댑터가 학습 가능해야 하는지 여부입니다. `False`인 경우, 어댑터는 고정(frozen)되며 추론에만 사용할 수 있습니다.

config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig), *선택*) : 자동으로 로드된 구성 대신 사용할 구성 객체입니다. 이 구성 객체는 `model_id` 및 `kwargs`와 상호 배타적입니다. `from_pretrained`를 호출하기 전에 구성이 이미 로드된 경우 유용합니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

ephemeral_gpu_offload (`bool`, *선택 사항*) : 부분적으로 로드된 모듈에 대해 임시 GPU 오프로딩을 사용할지 여부입니다. 기본값은 `False`입니다. 모델의 일부 또는 어댑터와 같은 구성 요소가 필요할 때까지 CPU 메모리에 유지되는 경우에 유용합니다. 소량의 데이터에 대해 비용이 높은 연산을 수행하는 대신, 데이터가 필요할 때 GPU로 전송되고, 연산이 수행된 후, 결과가 다시 CPU 메모리로 이동합니다. 이로 인해 순간적인 VRAM 오버헤드가 약간 발생하지만, 특정 상황에서 수 배 이상의 속도 향상을 가져옵니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : 저장된 가중치를 로드하기 전에 meta device에서 빈 어댑터 가중치를 생성합니다. 프로세스를 가속하는 데 유용합니다.

key_mapping (dict, *선택 사항*, 기본값 None) : `state_dict`를 로드하기 전에 적용되는 PEFT `state_dict` 키의 추가 매핑입니다. 이 매핑이 적용되면 PEFT 전용 `"base_model.model"` 접두사가 먼저 제거되고 어댑터 이름(예: `"default"`)은 아직 삽입되지 않습니다. 이 인수를 전달하는 것이 무엇인지 정확히 알고 있을 때만 전달하십시오.

kwargs : (`optional`): 특정 PEFT 구성 클래스로 전달되는 추가 키워드 인수입니다. 여기에는 `torch_device` (`str`, *optional*)가 포함됩니다: 어댑터를 로드할 디바이스(`load_adapter`[PeftModel.load_adapter]로 전달됨)입니다. `None`인 경우 디바이스가 추론됩니다.

pretrained model과 로드된 PEFT 가중치에서 PEFT 모델을 인스턴스화합니다.

`model`이 인플레이스로 수정될 수 있다는 점에 유의하세요.

#### get_base_model[[peft.PeftModel.get_base_model]]

```python
get_base_model()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1107)

기본 모델을 반환합니다.

#### get_layer_status[[peft.PeftModel.get_layer_status]]

```python
get_layer_status()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1248)

**반환값:** list`peft.peft_model.TunerLayerStatus`

각 어댑터 레이어의 상태를 포함하는 dataclass 목록입니다.

모델의 각 어댑터 레이어 상태를 가져옵니다.

이 메서드는 `TunerLayerStatus` dataclass 인스턴스의 목록을 반환하며, 각 인스턴스는 다음 속성을 포함합니다:

- `name` (`str`): 어댑터 레이어의 이름, 예: `model.encoder.block.0.layer.0.SelfAttention.q`.
- `module_type` (`str`): 어댑터 레이어의 유형, 예: `lora.Linear`.
- `enabled` (`bool`): 어댑터 레이어가 활성화되어 있는지 여부.
- `active_adapters` (`list[str]`): 활성화된 어댑터의 이름(있는 경우), 예: `["default"]`.
- `merged_adapters` (`list[str]`): 병합된 어댑터의 이름(있는 경우), 예: `["default"]`.
- `available_adapters` (`list[str]`): 사용 가능한 어댑터의 이름 목록, 예: `["default"]`.
- `quantization_backend` (`str` 또는 `None`): 양자화 백엔드의 이름, 예: `"bnb 4bit"`, 양자화되지 않은 경우 `None`.

#### get_model_status[[peft.PeftModel.get_model_status]]

```python
get_model_status()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1276)

**반환값:** `peft.peft_model.TunerModelStatus`

모델의 상태를 포함하는 dataclass입니다.

모델의 튜너 상태를 가져옵니다.

이 메서드는 다음 속성을 포함하는 `TunerModelStatus` dataclass 인스턴스를 반환합니다:

- `base_model_type` (`str`): 베이스 모델의 유형, 예: `T5Model`.
- `adapter_model_type` (`str`): 어댑터 모델의 유형, 예: `LoraModel`.
- `peft_types` (`dict[str, str]`): 어댑터 이름에서 어댑터 유형으로의 매핑입니다. 예: `{"default": "LORA"}`.
- `trainable_params` (`int`): 모델의 학습 가능 매개변수 개수.
- `total_params` (`int`): 모델의 전체 파라미터 수.
- `num_adapter_layers` (`int`): 모델의 어댑터 레이어 수입니다.
- `enabled` (`bool`, `Literal["irregular"]`): 모든 어댑터 레이어가 활성화되어 있는지 여부입니다. 일부만 활성화되고 일부는 비활성화되어 있으면 이 값은 `"irregular"`가 됩니다. 이는 모델이 일관되지 않은 상태에 있으며 예상대로 작동하지 않을 수 있음을 의미합니다.
- `active_adapters` (`list[str]`, `Literal["irregular"]`): 활성화된 어댑터의 이름입니다. 활성화된 어댑터가 모든 레이어에서 일관되지 않으면 `"irregular"`가 반환되며, 이는 모델이 일관되지 않은 상태에 있어 예상대로 작동하지 않을 수 있음을 의미합니다.
- `merged_adapters` (`list[str]`, `Literal["irregular"]`): 병합된 어댑터의 이름입니다. 병합된 어댑터가 모든 레이어에서 일관되지 않은 경우, 이는 `"irregular"`가 되며, 이는 모델이 일관되지 않은 상태에 있고 예상대로 작동하지 않을 수 있음을 의미합니다.
- `available_adapters` (`list[str]`): 사용 가능한 어댑터의 이름 목록, 예: `["default"]`.
- `quantization_backend` (`str`, `None`, `Literal["irregular"]`): 양자화 백엔드의 이름입니다. 예를 들어 `"bnb 4bit"`이며, 양자화가 적용되지 않은 경우 `None`입니다. 모든 레이어에서 백엔드가 일관되지 않으면 `"irregular"`가 됩니다.

#### get_nb_trainable_parameters[[peft.PeftModel.get_nb_trainable_parameters]]

```python
get_nb_trainable_parameters()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L958)

모델의 학습 가능한 매개변수 수와 전체 매개변수 수를 반환합니다.

#### get_prompt[[peft.PeftModel.get_prompt]]

```python
get_prompt(batch_size: int, task_ids: Optional[torch.Tensor] = None, max_cache_len: Optional[int] = None)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L791)

Peft에 사용할 가상 프롬프트를 반환합니다. 프롬프트 학습 방법을 사용하는 경우에만 적용됩니다.

#### get_prompt_embedding_to_save[[peft.PeftModel.get_prompt_embedding_to_save]]

```python
get_prompt_embedding_to_save(adapter_name: str)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L770)

모델을 저장할 때 저장할 프롬프트 임베딩을 반환합니다. 프롬프트 학습 방법을 사용하는 경우에만 적용됩니다.

#### healthcheck[[peft.PeftModel.healthcheck]]

```python
healthcheck(min_trainable_params: int = 1, max_trainable_params_percent = 50)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1315)

**매개변수:**

min_trainable_params (`int`, *선택 사항*, 기본값=`1`) : 예상되는 최소 매개변수 수입니다. 이보다 적은 매개변수가 발견되면 오류로 보고됩니다.

max_trainable_params_percent (`int`, *선택 사항*, 기본값=`50`) : 학습 가능한 매개변수의 최대 백분율입니다. 이 값을 초과하는 매개변수가 발견되면 경고로 보고됩니다.

**반환값:**

result 다양한 결과를 포함하는 Dictionary입니다. 반환되는 dictionary는 JSON 직렬화가 가능합니다.

학습 전에 의심스러운 어댑터 상태를 가진 이 모델을 확인하세요.

이 함수는 모델 및 레이어 상태 API를 요약하며, 어댑터 상태 불일치, 병합된 어댑터, 비현실적인 학습 가능 매개변수 수에 대한 조사 결과를 포함합니다. 학습 루프, 옵티마이저, 데이터셋은 검증하지 않습니다. 모델에서 불일치가 발견되면, 예를 들어 동일한 어댑터에서 일부 레이어는 활성화되고 일부 레이어는 비활성화된 경우와 같이 상태가 `"irregular"`로 보고됩니다. 이는 거의 항상 무언가 잘못되었음을 의미하며, 모델의 일부 속성을 실수로 잘못 변경하지 않았는지 확인해야 합니다.

검사 과정에서 의심스러운 항목이 발견되면 `"findings"` 필드에 보고됩니다. `"findings""` 목록이 비어 있다는 것은 의심스러운 어댑터 상태가 감지되지 않았다는 의미이지, 학습 실행이 반드시 성공한다는 보장은 아닙니다.

#### load_adapter[[peft.PeftModel.load_adapter]]

```python
load_adapter(model_id: Union[str, os.PathLike], adapter_name: str, is_trainable: bool = False, torch_device: Optional[str] = None, autocast_adapter_dtype: bool = True, ephemeral_gpu_offload: bool = False, low_cpu_mem_usage: bool = False, key_mapping: Optional[dict[str, str]] = None, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1519)

**매개변수:**

model_id (`str` 또는 `os.PathLike`) : 사용할 PEFT 구성의 이름. 다음 중 하나일 수 있습니다: - Hugging Face Hub의 모델 저장소에 호스팅된 PEFT 구성의 `model id`인 문자열. - `save_pretrained` 메서드를 사용하여 저장된 PEFT 구성 파일이 포함된 디렉터리의 경로 (`./my_peft_config_directory/`).

adapter_name (`str`) : 추가할 어댑터의 이름.

is_trainable (`bool`, *선택 사항*, 기본값 `False`) : 어댑터가 학습 가능해야 하는지 여부입니다. `False`인 경우, 어댑터는 고정(frozen)되며 추론에만 사용할 수 있습니다.

torch_device (`str`, *선택 사항*, 기본값 None) : 어댑터를 로드할 장치입니다. `None`인 경우 장치는 추론됩니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

ephemeral_gpu_offload (`bool`, *선택 사항*, 기본값 `False`) : 부분적으로 로드된 모듈에 대해 임시 GPU 오프로딩을 사용할지 여부입니다. 기본값은 `False`입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : 저장된 가중치를 로드하기 전에 meta device에서 빈 어댑터 가중치를 생성합니다. 프로세스를 가속하는 데 유용합니다.

key_mapping (dict, *선택 사항*, 기본값 None) : `state_dict`를 로드하기 전에 적용되는 PEFT `state_dict` 키의 추가 매핑입니다. 이 매핑이 적용되면 PEFT 전용 `"base_model.model"` 접두사가 먼저 제거되고 어댑터 이름(예: `"default"`)은 아직 삽입되지 않습니다. 이 인수를 전달하는 것이 무엇인지 정확히 알고 있을 때만 전달하십시오.

kwargs : (`optional`): 어댑터 로딩 방식을 수정하기 위한 추가 인자, 예: Hugging Face Hub의 토큰.

학습된 어댑터를 모델에 로드합니다.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

#### prepare_model_for_gradient_checkpointing[[peft.PeftModel.prepare_model_for_gradient_checkpointing]]

```python
prepare_model_for_gradient_checkpointing(model: PreTrainedModel)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L745)

필요한 경우 모델을 그래디언트 체크포인트링을 위해 준비합니다

Note: 새로운 Transformers 버전에서는 이를 'activation checkpointing'이라고 부릅니다.

#### print_healthcheck[[peft.PeftModel.print_healthcheck]]

```python
print_healthcheck(sink = <built-in function print>, min_trainable_params: int = 1, max_trainable_params_percent = 50, **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1345)

**매개변수:**

sink (`callable`, *선택 사항*, 기본값=`print`) : 출력을 인쇄하기 위해 호출되는 함수입니다. 기본적으로 내장 `print` 함수를 사용하지만, `logger.info`와 같은 다른 함수도 사용할 수 있습니다.

min_trainable_params (`int`, *선택 사항*, 기본값=`1`) : 예상되는 최소 매개변수 수입니다. 이보다 적은 매개변수가 발견되면 오류로 보고됩니다.

max_trainable_params_percent (`int`, *선택 사항*, 기본값=`50`) : 학습 가능한 매개변수의 최대 백분율입니다. 이 값을 초과하는 매개변수가 발견되면 경고로 보고됩니다.

kwargs : 추가 키워드 인수는 `format_healthcheck`로 전달됩니다.

컴팩트하고 사람이 읽기 쉬운 헬스체크 보고서를 출력합니다.

출력은 PEFT 모델의 상태를 요약하며, 일관성 없는 어댑터 상태, 병합된 어댑터, 비합리적인 학습 가능 매개변수 수에 대한 조사 결과를 포함합니다. 학습 루프, 옵티마이저, 데이터셋은 검증하지 않습니다. 모델에서 불일치가 발견되면, 예를 들어 동일한 어댑터에서 일부 레이어는 활성화되고 일부 레이어는 비활성화된 경우와 같이, 상태가 `"irregular"`로 보고됩니다. 이는 거의 항상 무언가 잘못되었음을 의미하며, 모델의 일부 속성을 실수로 잘못 변경하지 않았는지 확인해야 합니다.

문제가 감지된 경우, 해당 문제는 마지막 섹션의 "findings" 아래에 표시됩니다. 문제가 감지되지 않았다고 해서 학습 실행이 반드시 성공한다는 보장은 없습니다.

#### print_trainable_parameters[[peft.PeftModel.print_trainable_parameters]]

```python
print_trainable_parameters()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L988)

모델의 학습 가능한 매개변수 수를 출력합니다.

Note: print_trainable_parameters()은 get_nb_trainable_parameters()를 사용하며, 이는 huggingface/transformers의 num_parameters(only_trainable=True)와 다릅니다. get_nb_trainable_parameters()는 수정된 backbone transformer 모델을 포함하는 Peft Model의 (trainable parameters, all parameters)를 반환합니다. LoRA와 같은 기법의 경우, backbone transformer 모델이 LoRA 모듈로 in place로 수정됩니다. 그러나 prompt tuning의 경우, backbone transformer 모델은 수정되지 않습니다. num_parameters(only_trainable=True)는 backbone transformer 모델의 trainable parameters 수를 반환하며, 이는 다를 수 있습니다.

#### save_pretrained[[peft.PeftModel.save_pretrained]]

```python
save_pretrained(save_directory: str, safe_serialization: bool = True, selected_adapters: Optional[list[str]] = None, save_embedding_layers: Union[str, bool] = 'auto', is_main_process: bool = True, path_initial_model_for_weight_conversion: Optional[str] = None, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L258)

**매개변수:**

save_directory (`str`) : 어댑터 모델 및 구성 파일이 저장될 디렉터리 (존재하지 않으면 생성됩니다).

safe_serialization (`bool`, *선택 사항*) : 어댑터 파일을 safetensors 형식으로 저장할지 여부이며, 기본값은 `True`입니다.

selected_adapters (`List[str]`, *선택 사항*) : 저장할 어댑터 목록입니다. `None`인 경우 모든 어댑터가 기본값으로 사용됩니다.

save_embedding_layers (`Union[bool, str]`, *선택 사항*, 기본값은 `"auto"`) : `True`인 경우 어댑터 가중치 외에도 임베딩 레이어를 저장합니다. `auto`인 경우 사용 가능한 경우 config의 `target_modules`에서 일반적인 임베딩 레이어 `peft.utils.other.EMBEDDING_LAYER_NAMES`를 확인하고 부울 플래그를 자동으로 설정합니다. 이 기능은 🤗 transformers 모델에서만 작동합니다.

is_main_process (`bool`, *선택 사항*) : 이 메서드를 호출하는 프로세스가 메인 프로세스인지 여부. 기본값은 `True`입니다. 메인 프로세스가 아닌 경우 체크포인트를 저장하지 않으며, 이는 멀티 디바이스 설정(예: DDP)에서 중요합니다.

path_initial_model_for_weight_conversion (`str`, *선택 사항*) : 모델 초기화 후, 학습 수행 전에 PiSSA/CorDA/OLoRA로 모델을 초기화했을 때 얻은 초기화된 어댑터의 경로입니다. `path_initial_model_for_weight_conversion`가 None이 아닌 경우, 파인튜닝 전후의 어댑터 차이를 계산합니다. 이 차이는 표준 LoRA 어댑터의 매개변수로 표현할 수 있습니다. PiSSA 및 관련 방법과 달리, 이 변환된 어댑터를 사용하면 베이스 모델을 변경할 필요가 없으므로 LoRA 어댑터와 여러 PiSSA/CorDA/OLoRA 어댑터를 함께 사용하고, 임의의 어댑터를 활성화하거나 비활성화하는 것이 편리합니다. `rslora`를 `rank_pattern` 또는 `alpha_pattern`와 함께 사용하는 경우 이 변환은 지원되지 않습니다. 자세한 내용은 [peft.tuners.lora.LoraModel.subtract_mutated_init()](/docs/peft/main/ko/package_reference/lora#peft.LoraModel.subtract_mutated_init)을 참조하세요.

kwargs (추가 키워드 인자, *선택 사항*) : `push_to_hub` 메서드로 전달되는 추가 키워드 인자입니다.

이 함수는 어댑터 모델과 어댑터 구성 파일을 디렉터리에 저장하여 [PeftModel.from_pretrained()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.from_pretrained) 클래스 메서드를 사용해 다시 로드할 수 있게 하고, `PeftModel.push_to_hub()` 메서드에서도 사용할 수 있게 합니다.

#### set_adapter[[peft.PeftModel.set_adapter]]

```python
set_adapter(adapter_name: str, inference_mode: bool = False)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1709)

**매개변수:**

adapter_name (`str`) : 활성으로 설정할 어댑터의 이름입니다. 어댑터는 먼저 로드되어야 합니다.

inference_mode (`bool`, optional) : 활성화된 어댑터를 고정(freeze)할지 여부(즉, `requires_grad=False`). 기본값은 False입니다.

활성 어댑터를 설정합니다.

모든 PEFT 방법이 여러 개의 활성 어댑터를 지원하지 않으므로 한 번에 하나의 어댑터만 활성화할 수 있습니다. 지원되는 방법에서 여러 어댑터를 활성화하려면 `model.base_model.set_adapter(adapter_names)`를 사용하세요.

또한, 이 함수는 inference_mode가 True가 아닌 한, 지정된 어댑터를 학습 가능하도록 설정합니다(즉, requires_grad=True).

#### set_requires_grad[[peft.PeftModel.set_requires_grad]]

```python
set_requires_grad(adapter_names: str | Sequence[str], requires_grad: bool = True)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1755)

**매개변수:**

adapter_names (`str` 또는 `Sequence[str]`) : 그라디언트를 활성화/비활성화할 어댑터의 이름.

requires_grad (`bool`, *선택 사항*) : 활성화(`True`, 기본값) 또는 비활성화(`False`) 여부를 지정합니다.

지정된 어댑터에 대해 그라디언트를 활성화하거나 비활성화합니다.

Note: prompt tuning와 같은 프롬프트 학습 방식은 지원하지 않습니다.

#### supports_lora_conversion[[peft.PeftModel.supports_lora_conversion]]

```python
supports_lora_conversion(adapter_name: str = 'default')
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1949)

이 모델의 어댑터를 LoRA로 변환할 수 있는지 여부

일반적으로 PEFT 방법이 가산적(additive)인 경우, 즉 W' = W_base + delta_weight인 경우 이 방식이 작동합니다.

## PeftModelForSequenceClassification[[peft.PeftModelForSequenceClassification]]

시퀀스 분류 작업을 위한 `PeftModel`입니다.

#### peft.PeftModelForSequenceClassification[[peft.PeftModelForSequenceClassification]]

```python
peft.PeftModelForSequenceClassification(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L1965)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

시퀀스 분류 작업을 위한 Peft 모델.

**속성**:
- **config** (`PretrainedConfig`) -- 기본 모델의 구성 객체.
- **cls_layer_name** (`str`) -- 분류 레이어의 이름.

예:

```py
>>> from transformers import AutoModelForSequenceClassification
>>> from peft import PeftModelForSequenceClassification, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "SEQ_CLS",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 768,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 12,
...     "num_layers": 12,
...     "encoder_hidden_size": 768,
...     "prefix_projection": False,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForSequenceClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117
```

## PeftModelForTokenClassification[[peft.PeftModelForTokenClassification]]

토큰 분류 작업을 위한 `PeftModel`입니다.

#### peft.PeftModelForTokenClassification[[peft.PeftModelForTokenClassification]]

```python
peft.PeftModelForTokenClassification(model: torch.nn.Module, peft_config: PeftConfig = None, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L2806)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

토큰 분류 작업을 위한 Peft 모델.

**속성**:
- **config** (`PretrainedConfig`) -- 기본 모델의 구성 객체.
- **cls_layer_name** (`str`) -- 분류 레이어의 이름.

예:

```py
>>> from transformers import AutoModelForTokenClassification
>>> from peft import PeftModelForTokenClassification, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "TOKEN_CLS",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 768,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 12,
...     "num_layers": 12,
...     "encoder_hidden_size": 768,
...     "prefix_projection": False,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForTokenClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForTokenClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117
```

#### add_adapter[[peft.PeftModelForTokenClassification.add_adapter]]

```python
add_adapter(adapter_name: str, peft_config: PeftConfig, low_cpu_mem_usage: bool = False, autocast_adapter_dtype: bool = True)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L2871)

**매개변수:**

adapter_name (`str`) : 추가할 어댑터의 이름.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : 추가할 어댑터의 구성입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 저장된 어댑터를 로드할 때 프로세스를 가속하는 데 유용합니다. 학습을 위해 새로운 PEFT 어댑터를 생성할 때는 이 옵션을 사용하지 마세요.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

전달된 구성에 따라 모델에 어댑터를 추가합니다.

이 어댑터는 학습되지 않았습니다. 학습된 어댑터를 로드하려면 [PeftModel.load_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.load_adapter)를 확인하세요.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

## PeftModelForCausalLM[[peft.PeftModelForCausalLM]]

causal language modeling을 위한 `PeftModel`입니다.

#### peft.PeftModelForCausalLM[[peft.PeftModelForCausalLM]]

```python
peft.PeftModelForCausalLM(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L2212)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

causal language modeling을 위한 Peft 모델.

예:

```py
>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModelForCausalLM, get_peft_config

>>> config = {
...     "peft_type": "PREFIX_TUNING",
...     "task_type": "CAUSAL_LM",
...     "inference_mode": False,
...     "num_virtual_tokens": 20,
...     "token_dim": 1280,
...     "num_transformer_submodules": 1,
...     "num_attention_heads": 20,
...     "num_layers": 36,
...     "encoder_hidden_size": 1280,
...     "prefix_projection": False,
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForCausalLM.from_pretrained("gpt2-large")
>>> peft_model = PeftModelForCausalLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 1843200 || all params: 775873280 || trainable%: 0.23756456724479544
```

## PeftModelForSeq2SeqLM[[peft.PeftModelForSeq2SeqLM]]

시퀀스-투-시퀀스 언어 모델링을 위한 `PeftModel`입니다.

참고: 입력 토큰은 제공하되 decoder 입력 토큰을 명시적으로 제공하지 않으면, `shift_tokens_right()`를 사용하여 입력 토큰을 한 단계 오른쪽으로 이동시켜 decoder 입력 토큰을 자동으로 생성합니다.

#### peft.PeftModelForSeq2SeqLM[[peft.PeftModelForSeq2SeqLM]]

```python
peft.PeftModelForSeq2SeqLM(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L2555)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

시퀀스-투-시퀀스 언어 모델링을 위한 Peft 모델.

예:

```py
>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import PeftModelForSeq2SeqLM, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "SEQ_2_SEQ_LM",
...     "inference_mode": False,
...     "r": 8,
...     "target_modules": ["q", "v"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.1,
...     "fan_in_fan_out": False,
...     "bias": "none",
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> peft_model = PeftModelForSeq2SeqLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 884736 || all params: 223843584 || trainable%: 0.3952474242013566
```

## PeftModelForQuestionAnswering[[peft.PeftModelForQuestionAnswering]]

질문 답변을 위한 `PeftModel`입니다.

#### peft.PeftModelForQuestionAnswering[[peft.PeftModelForQuestionAnswering]]

```python
peft.PeftModelForQuestionAnswering(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L3034)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

추출형 질의응답을 위한 Peft 모델.

**속성**:
- **config** (`PretrainedConfig`) -- 기본 모델의 구성 객체.
- **cls_layer_name** (`str`) -- 분류 레이어의 이름.

예:

```py
>>> from transformers import AutoModelForQuestionAnswering
>>> from peft import PeftModelForQuestionAnswering, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "QUESTION_ANS",
...     "inference_mode": False,
...     "r": 16,
...     "target_modules": ["query", "value"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.05,
...     "fan_in_fan_out": False,
...     "bias": "none",
... }

>>> peft_config = get_peft_config(config)
>>> model = AutoModelForQuestionAnswering.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForQuestionAnswering(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 592900 || all params: 108312580 || trainable%: 0.5473971721475013
```

#### add_adapter[[peft.PeftModelForQuestionAnswering.add_adapter]]

```python
add_adapter(adapter_name: str, peft_config: PeftConfig, low_cpu_mem_usage: bool = False, autocast_adapter_dtype: bool = True)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L3099)

**매개변수:**

adapter_name (`str`) : 추가할 어댑터의 이름.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : 추가할 어댑터의 구성입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 저장된 어댑터를 로드할 때 프로세스를 가속하는 데 유용합니다. 학습을 위해 새로운 PEFT 어댑터를 생성할 때는 이 옵션을 사용하지 마세요.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

전달된 구성에 따라 모델에 어댑터를 추가합니다.

이 어댑터는 학습되지 않았습니다. 학습된 어댑터를 로드하려면 [PeftModel.load_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.load_adapter)를 확인하세요.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

## PeftModelForFeatureExtraction[[peft.PeftModelForFeatureExtraction]]

Transformer 모델에서 특징/임베딩을 추출하기 위한 `PeftModel`입니다.

#### peft.PeftModelForFeatureExtraction[[peft.PeftModelForFeatureExtraction]]

```python
peft.PeftModelForFeatureExtraction(model: torch.nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', **kwargs)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L3286)

**매개변수:**

model ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) : 기본 transformer 모델.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 설정.

adapter_name (`str`,  *선택 사항*) : 어댑터의 이름이며, 기본값은 `"default"`입니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

transformer 모델에서 특징/임베딩을 추출하기 위한 Peft 모델

**속성**:
- **config** (`PretrainedConfig`) -- 기본 모델의 구성 객체.

예:

```py
>>> from transformers import AutoModel
>>> from peft import PeftModelForFeatureExtraction, get_peft_config

>>> config = {
...     "peft_type": "LORA",
...     "task_type": "FEATURE_EXTRACTION",
...     "inference_mode": False,
...     "r": 16,
...     "target_modules": ["query", "value"],
...     "lora_alpha": 32,
...     "lora_dropout": 0.05,
...     "fan_in_fan_out": False,
...     "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModel.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForFeatureExtraction(model, peft_config)
>>> peft_model.print_trainable_parameters()
```

## PeftMixedModel[[peft.PeftMixedModel]]

서로 다른 어댑터 유형(예: LoRA와 LoHa)을 혼합하기 위한 `PeftModel`입니다.

#### peft.PeftMixedModel[[peft.PeftMixedModel]]

```python
peft.PeftMixedModel(model: nn.Module, peft_config: PeftConfig, adapter_name: str = 'default')
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L69)

**매개변수:**

model (`torch.nn.Module`) : 튜닝할 모델.

config (`PeftConfig`) : 튜닝할 모델의 설정입니다. 어댑터 유형이 호환되어야 합니다.

adapter_name (`str`, `optional`, 기본값 `"default"`) : 첫 번째 어댑터의 이름.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다.

추론을 위해 서로 다른 유형의 어댑터를 혼합하여 로드하는 PeftMixedModel.

이 클래스는 로드/저장을 지원하지 않으며, 일반적으로 직접 초기화하지 않아야 합니다. 대신 `get_peft_model`을 `mixed=True` 인수를 사용하여 사용하세요.

> [!TIP] > [Mixed adapter types](https://huggingface.co/docs/peft/en/developer_guides/mixed_models) 가이드를 읽어보세요
다양한 어댑터 유형을 사용하는 방법에 대해 자세히 알아보려면

예:

```py
>>> base_model = ...  # load the base model, e.g. from transformers
>>> peft_model = PeftMixedModel.from_pretrained(base_model, path_to_adapter1, "adapter1").eval()
>>> peft_model.load_adapter(path_to_adapter2, "adapter2")
>>> peft_model.set_adapter(["adapter1", "adapter2"])  # activate both adapters
>>> peft_model(data)  # forward pass using both adapters
```

#### add_adapter[[peft.PeftMixedModel.add_adapter]]

```python
add_adapter(adapter_name: str, peft_config: PeftConfig, low_cpu_mem_usage: bool = False, autocast_adapter_dtype: bool = True)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L205)

**매개변수:**

adapter_name (`str`) : 추가할 어댑터의 이름.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : 추가할 어댑터의 구성입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 저장된 어댑터를 로드할 때 프로세스를 가속하는 데 유용합니다. > [!TIP] > 학습을 위해 새로운 PEFT 어댑터를 생성할 때 `low_cpu_mem_usage=True`를 사용하지 마세요 (PeftMixedModel의 경우 학습은 일반적으로 테스트되지 않았으며 권장되지 않습니다).

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터의 dtype을 자동 변환할지 여부입니다. 기본값은 `True`입니다. 현재 이 설정은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 변환하며, 일부 PEFT 튜너에만 영향을 미칩니다. `False`로 설정하면 dtype은 해당 레이어의 dtype과 동일하게 유지됩니다.

전달된 구성에 따라 모델에 어댑터를 추가합니다.

이 어댑터는 학습되지 않았습니다. 학습된 어댑터를 로드하려면 [PeftModel.load_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.load_adapter)를 확인하세요.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

#### disable_adapter[[peft.PeftMixedModel.disable_adapter]]

```python
disable_adapter()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L194)

어댑터 모듈을 비활성화합니다.

#### forward[[peft.PeftMixedModel.forward]]

```python
forward(*args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L182)

모델의 순전파(forward pass).

#### from_pretrained[[peft.PeftMixedModel.from_pretrained]]

```python
from_pretrained(model: nn.Module, model_id: str | os.PathLike, adapter_name: str = 'default', is_trainable: bool = False, config: Optional[PeftConfig] = None, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L407)

**매개변수:**

model (`nn.Module`) : 적응할 모델.

model_id (`str` 또는 `os.PathLike`) : 사용할 PEFT 구성의 이름. 다음 중 하나일 수 있습니다: - Hugging Face Hub의 모델 저장소에 호스팅된 PEFT 구성의 `model id`인 문자열. - `save_pretrained` 메서드를 사용하여 저장된 PEFT 구성 파일이 포함된 디렉터리의 경로 (`./my_peft_config_directory/`).

adapter_name (`str`, *선택 사항*, 기본값 `"default"`) : 로드할 어댑터의 이름입니다. 여러 어댑터를 로드할 때 유용합니다.

is_trainable (`bool`, *선택 사항*, 기본값 `False`) : 어댑터가 학습 가능해야 하는지 여부입니다. `False`인 경우, 어댑터는 고정되어 추론에 사용됩니다.

config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig), *선택*) : 자동으로 로드된 구성 대신 사용할 구성 객체입니다. 이 구성 객체는 `model_id` 및 `kwargs`와 상호 배타적입니다. `from_pretrained`를 호출하기 전에 구성이 이미 로드된 경우 유용합니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : 저장된 가중치를 로드하기 전에 meta device에서 빈 어댑터 가중치를 생성합니다. 프로세스를 가속하는 데 유용합니다.

kwargs : (`optional`): 특정 PEFT 구성 클래스로 전달되는 추가 키워드 인자.

pretrained model과 로드된 PEFT 가중치에서 PEFT 혼합 모델을 인스턴스화합니다.

`model`이 인플레이스로 수정될 수 있다는 점에 유의하세요.

#### generate[[peft.PeftMixedModel.generate]]

```python
generate(*args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L188)

출력을 생성합니다.

#### get_nb_trainable_parameters[[peft.PeftMixedModel.get_nb_trainable_parameters]]

```python
get_nb_trainable_parameters()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L128)

모델의 학습 가능한 매개변수 수와 전체 매개변수 수를 반환합니다.

#### load_adapter[[peft.PeftMixedModel.load_adapter]]

```python
load_adapter(model_id: str, adapter_name: str, *args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L350)

**매개변수:**

adapter_name (`str`) : 추가할 어댑터의 이름.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : 추가할 어댑터의 구성입니다.

is_trainable (`bool`, *선택 사항*, 기본값 `False`) : 어댑터가 학습 가능해야 하는지 여부입니다. `False`인 경우, 어댑터는 고정(frozen)되며 추론에만 사용할 수 있습니다.

torch_device (`str`, *선택 사항*, 기본값 None) : 어댑터를 로드할 장치입니다. `None`인 경우 장치는 추론됩니다.

autocast_adapter_dtype (`bool`, *선택 사항*, 기본값 `True`) : 어댑터 dtype를 자동 캐스팅할지 여부입니다. 기본값은 `True`입니다. 현재 이 옵션은 안정적인 학습에 일반적으로 필요하기 때문에 float16과 bfloat16으로 된 어댑터 가중치만 float32로 캐스팅하며, 일부 PEFT 튜너에만 영향을 미칩니다.

ephemeral_gpu_offload (`bool`, *선택 사항*, 기본값 `False`) : 부분적으로 로드된 모듈에 대해 임시 GPU 오프로딩을 사용할지 여부입니다. 기본값은 `False`입니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : 저장된 가중치를 로드하기 전에 meta device에서 빈 어댑터 가중치를 생성합니다. 프로세스를 가속하는 데 유용합니다.

kwargs : (`optional`): 어댑터 로딩 방식을 수정하기 위한 추가 인자, 예: Hugging Face Hub의 토큰.

학습된 어댑터를 모델에 로드합니다.

새로운 어댑터의 이름은 고유해야 합니다.

새로운 어댑터는 자동으로 활성 어댑터로 설정되지 않습니다. 활성 어댑터를 설정하려면 [PeftModel.set_adapter()](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel.set_adapter)를 사용하세요.

#### merge_and_unload[[peft.PeftMixedModel.merge_and_unload]]

```python
merge_and_unload(*args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L313)

**매개변수:**

progressbar (`bool`) : 언로드 및 병합 과정을 나타내는 진행 표시줄을 표시할지 여부

safe_merge (`bool`) : 어댑터 가중치에 잠재적인 Nan이 있는지 확인하기 위한 안전 병합 체크를 활성화할지 여부

adapter_names (`List[str]`, *선택 사항*) : 병합할 어댑터 이름 목록입니다. None인 경우 모든 활성 어댑터가 병합됩니다. 기본값은 `None`입니다.

이 메서드는 어댑터 레이어를 베이스 모델에 병합합니다. 이는 베이스 모델을 독립적인 모델로 사용하려는 경우에 필요합니다.

#### print_trainable_parameters[[peft.PeftMixedModel.print_trainable_parameters]]

```python
print_trainable_parameters()
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L153)

모델의 학습 가능한 매개변수 수를 출력합니다.

Note: print_trainable_parameters()은 get_nb_trainable_parameters()를 사용하며, 이는 huggingface/transformers의 num_parameters(only_trainable=True)와 다릅니다. get_nb_trainable_parameters()는 수정된 backbone transformer 모델을 포함하는 Peft Model의 (trainable parameters, all parameters)를 반환합니다. LoRA와 같은 기법의 경우, backbone transformer 모델이 LoRA 모듈로 in place로 수정됩니다. 그러나 prompt tuning의 경우, backbone transformer 모델은 수정되지 않습니다. num_parameters(only_trainable=True)는 backbone transformer 모델의 trainable parameters 수를 반환하며, 이는 다를 수 있습니다.

#### set_adapter[[peft.PeftMixedModel.set_adapter]]

```python
set_adapter(adapter_name: Union[str, list[str]], inference_mode: bool = False)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L271)

**매개변수:**

adapter_name (str, list[str]) : 활성으로 설정할 어댑터의 이름

inference_mode (bool, optional) : 활성화된 어댑터를 고정할지 여부(즉, `requires_grad=False`). 기본값은 False입니다.

모델의 활성 어댑터를 설정합니다.

포워드 패스 중 어댑터가 적용되는 순서는 이 함수에 전달된 순서와 다를 수 있습니다. 대신, 포워드 패스 중 적용 순서는 모델에 어댑터가 로드된 순서에 의해 결정됩니다. 활성 어댑터는 포워드 패스 중 어떤 어댑터가 활성화되는지만 결정할 뿐, 적용 순서는 결정하지 않습니다.

또한, 이 함수는 inference_mode가 True가 아닌 한, 지정된 어댑터를 학습 가능하도록 설정합니다(즉, requires_grad=True).

#### unload[[peft.PeftMixedModel.unload]]

```python
unload(*args: Any, **kwargs: Any)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mixed_model.py#L330)

…

## 유틸리티[[peft.cast_mixed_precision_params]]

#### peft.cast_mixed_precision_params[[peft.cast_mixed_precision_params]]

```python
peft.cast_mixed_precision_params(model: torch.nn.Module, dtype: torch.dtype)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/utils/other.py#L1559)

**매개변수:**

model (`torch.nn.Module`) : 학습 불가능한 매개변수를 변환할 대상 모델.

dtype (`torch.dtype`) : 학습이 불가능한 파라미터를 변환할 dtype입니다. `dtype`은 `torch.float16` 또는

모델의 모든 학습 불가능(non-trainable) 매개변수를 주어진 `dtype`으로 변환합니다. `dtype`은 수행 중인 혼합 정밀도(mixed-precision) 학습에 따라 `torch.float16` 또는 `torch.bfloat16`일 수 있습니다. 학습 가능한 매개변수는 전체 정밀도로 변환됩니다. 이는 학습 불가능한 매개변수에 반 정밀도 dtype를 사용하여 PEFT 방법을 사용할 때 GPU 메모리 사용량을 줄이는 것을 목적으로 합니다. 학습 가능한 매개변수를 전체 정밀도로 유지하면 자동 혼합 정밀도 학습을 사용할 때 학습 안정성이 유지됩니다.

`torch.bfloat16`를 수행 중인 혼합 정밀도 학습에 따라

#### peft.get_peft_model[[peft.get_peft_model]]

```python
peft.get_peft_model(model: nn.Module, peft_config: PeftConfig, adapter_name: str = 'default', mixed: bool = False, autocast_adapter_dtype: bool = True, revision: Optional[str] = None, low_cpu_mem_usage: bool = False)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mapping_func.py#L105)

**매개변수:**

model (`torch.nn.Module`) : 래핑할 모델. 일반적으로 Transformers 모델이지만, 작업별 기능(`peft_config.task_type`)은 Transformers 규약을 따르는 모델을 요구하므로, 이 점을 유의해야 하며 어떤 `nn.Module`도 사용할 수 있습니다.

peft_config ([PeftConfig](/docs/peft/main/ko/package_reference/config#peft.PeftConfig)) : Peft 모델의 매개변수를 포함하는 구성 객체.

adapter_name (`str`, `optional`, 기본값 `"default"`) : 주입할 어댑터의 이름입니다. 제공되지 않으면 기본 어댑터 이름("default")이 사용됩니다.

mixed (`bool`, `optional`, 기본값 `False`) : 서로 다른 (호환되는) 어댑터 유형을 혼합하는 것을 허용할지 여부.

autocast_adapter_dtype (`bool`, *선택 사항*) : 어댑터의 dtype을 자동 캐스팅할지 여부입니다. 기본값은 `True`입니다. 현재 이 옵션은 안정적인 학습에 일반적으로 필요하기 때문에 float16 또는 bfloat16으로 설정된 어댑터 가중치만 float32로 캐스팅하며, 일부 PEFT 튜너에만 영향을 미칩니다.

revision (`str`, `optional`, 기본값 `main`) : 베이스 모델의 리비전입니다. 이 값이 설정되지 않으면 저장된 peft 모델은 베이스 모델의 `main` 리비전을 로드합니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다. 모델 학습을 계획하고 있다면, 학습 시작 전에 어댑터 가중치가 다른 가중치로 교체되지 않는 한 이 설정을 False로 유지해야 합니다.

model과 config에서 Peft 모델 객체를 반환하며, 모델은 인플레이스(in-place)로 수정됩니다.

#### peft.inject_adapter_in_model[[peft.inject_adapter_in_model]]

```python
peft.inject_adapter_in_model(peft_config: PeftConfig, model: torch.nn.Module, adapter_name: str = 'default', low_cpu_mem_usage: bool = False, state_dict: Optional[dict[str, torch.Tensor]] = None)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/mapping.py#L47)

**매개변수:**

peft_config (`PeftConfig`) : PEFT 모델의 매개변수를 포함하는 구성 객체.

model (`torch.nn.Module`) : 어댑터가 주입될 입력 모델입니다.

adapter_name (`str`, `optional`, 기본값 `"default"`) : 주입할 어댑터의 이름입니다. 제공되지 않으면 기본 어댑터 이름("default")이 사용됩니다.

low_cpu_mem_usage (`bool`, `optional`, 기본값 `False`) : meta device에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다.

state_dict (`dict`, *선택 사항*, 기본값 `None`) : `state_dict`가 여기에 전달되면, 어댑터는 state_dict의 항목을 기반으로 주입됩니다. 이는 PEFT 메서드의 정확한 `target_modules`가 알 수 없는 경우, 예를 들어 메타데이터 없이 체크포인트가 생성된 경우에 유용할 수 있습니다. `state_dict`의 값은 사용되지 않으며, 적응해야 할 올바른 레이어를 결정하는 데 키만 사용된다는 점에 유의하세요.

PEFT 레이어를 생성하고 모델을 인플레이스(in-place)로 주입합니다.

현재 API는 프롬프트 학습 방법, 어댑션 프롬프트, 또는 여러 대상 레이어 간에 어댑터 상태를 공유하는 튜너를 지원하지 않습니다. 후자의 경우 [get_peft_model()](/docs/peft/main/ko/package_reference/peft_model#peft.get_peft_model)을 사용하세요.

이 함수는 [get_peft_model()](/docs/peft/main/ko/package_reference/peft_model#peft.get_peft_model)과 유사하지만 [PeftModel](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel) 인스턴스를 반환하지 않습니다. 대신 전달된 모델의 원래 인스턴스가 변경된 형태로 반환됩니다.

#### peft.get_peft_model_state_dict[[peft.get_peft_model_state_dict]]

```python
peft.get_peft_model_state_dict(model, state_dict = None, adapter_name: str = 'default', unwrap_compiled: bool = False, save_embedding_layers: bool | Literal['auto'] = 'auto')
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/utils/save_and_load.py#L175)

**매개변수:**

model ([PeftModel](/docs/peft/main/ko/package_reference/peft_model#peft.PeftModel)) : Peft 모델입니다. torch.nn.DistributedDataParallel, DeepSpeed 또는 FSDP를 사용할 경우, 모델은 기반 모델/언랩핑된 모델(즉, model.module)이어야 합니다.

state_dict (`dict`, *선택 사항*, 기본값 `None`) : 모델의 state dict입니다. 제공되지 않으면 전달된 모델의 state dict가 사용됩니다.

adapter_name (`str`, *선택 사항*, 기본값 `"default"`) : 상태 딕트(state dict)를 반환할 어댑터의 이름입니다.

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()`를 호출하면 됩니다.

어댑터 이름은 `state_dict`에서 제거됩니다. 이는 어댑터를 로드할 때 변경될 수 있는 임의의 이름이기 때문입니다. 예를 들어, 어댑터 이름이 `'default'`이고 원래 키가 `'model.q_proj.lora_A.default.weight'`인 경우, 반환되는 키는 `'model.q_proj.lora_A.weight'`가 됩니다. 가중치를 로드할 때 어댑터 이름을 처리하려면 이 함수를 [set_peft_model_state_dict()](/docs/peft/main/ko/package_reference/functional#peft.set_peft_model_state_dict)와 함께 사용하세요.

#### peft.prepare_model_for_kbit_training[[peft.prepare_model_for_kbit_training]]

```python
peft.prepare_model_for_kbit_training(model, use_gradient_checkpointing = True, activation_checkpointing_kwargs = None, auto_clear_cache = True, gradient_checkpointing_kwargs = None)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/utils/other.py#L160)

**매개변수:**

model (`transformers.PreTrainedModel`) : `transformers`에서 로드된 모델

use_gradient_checkpointing (`bool`, *선택 사항*, 기본값 `True`) : True인 경우, backward pass 속도가 느려지는 대신 메모리를 절약하기 위해 gradient checkpointing을 사용합니다.

activation_checkpointing_kwargs (`dict`, *선택 사항*, 기본값 `None`) : activation checkpointing 함수에 전달할 키워드 인수입니다. 해당 메서드에 전달할 수 있는 인수에 대한 자세한 내용은 `torch.utils.checkpoint.checkpoint`의 문서를 참조하세요. 이 기능은 transformers 버전 (> 4.34.1)에서만 사용할 수 있습니다.

auto_clear_cache (`bool`, *선택 사항*, 기본값 `True`) : 매개변수를 fp32로 업캐스팅한 후 accelerator 캐시를 비울지 여부입니다. 이는 캐싱 할당기가 점유하고 있는 메모리를 해제하며, 호스트와 accelerator 메모리를 공유하는 장치에서 특히 유용합니다. 이 단계를 건너뛰려면 `False`로 설정하세요.

gradient_checkpointing_kwargs (`dict`, *선택 사항*, 기본값 `None`) : activation checkpointing 함수에 전달할 키워드 인수입니다. 이 인수는 하위 호환성을 위해만 존재하며 비권장(deprecated)되었습니다. 대신 `activation_checkpointing_kwargs`를 사용하세요. PEFT v1.2에서 제거됩니다.

이 메서드는 `transformers` 모델에서만 작동한다는 점에 유의하세요.

이 메서드는 학습 실행 전 모델을 준비하는 전체 프로토콜을 래핑합니다. 여기에는 다음이 포함됩니다: 1- layernorm을 fp32로 캐스팅 2- 출력 임베딩 레이어가 grads를 요구하도록 설정 3- lm head의 fp32 업캐스팅 추가 4- 학습 중에 업데이트되지 않도록 베이스 모델 레이어를 동결

#### peft.get_layer_status[[peft.get_layer_status]]

```python
peft.get_layer_status(model: torch.nn.Module)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L3401)

**매개변수:**

model ([Union[`~PeftModel`, `~transformers.PreTrainedModel`, `nn.Module`]]) : 어댑터 레이어 상태를 가져올 모델.

**반환값:** list`peft.peft_model.TunerLayerStatus`

각 어댑터 레이어의 상태를 포함하는 dataclass 목록입니다.

모델의 각 어댑터 레이어 상태를 가져옵니다.

이 함수는 `TunerLayerStatus` dataclass 인스턴스의 목록을 반환하며, 각 인스턴스는 다음 속성을 포함합니다:

- `name` (`str`): 어댑터 레이어의 이름, 예: `model.encoder.block.0.layer.0.SelfAttention.q`.
- `module_type` (`str`): 어댑터 레이어의 유형, 예: `lora.Linear`.
- `enabled` (`bool`): 어댑터 레이어가 활성화되어 있는지 여부.
- `active_adapters` (`list[str]`): 활성화된 어댑터의 이름(있는 경우), 예: `["default"]`.
- `merged_adapters` (`list[str]`): 병합된 어댑터의 이름(있는 경우), 예: `["default"]`.
- requires_grad : dict[str, bool | Literal["irregular"]] 각 어댑터 모듈의 매개변수에 대한 requires_grad 상태입니다. 이상적으로는 `True` 또는 `False`여야 합니다. 모든 매개변수에 걸쳐 requires_grad 상태가 일관되지 않으면 값은 `"irregular"`로 설정됩니다.
- `available_adapters` (`list[str]`): 사용 가능한 어댑터의 이름 목록, 예: `["default"]`.
- `devices` (`dict[str, list[str]]`): 주어진 어댑터의 파라미터가 저장된 장치, 예: `["cuda","xpu"]`.
- `quantization_backend` (`str` 또는 `None`): 양자화 백엔드의 이름, 예: `"bnb 4bit"`, 양자화되지 않은 경우 `None`.

#### peft.get_model_status[[peft.get_model_status]]

```python
peft.get_model_status(model: torch.nn.Module)
```

[소스](https://github.com/huggingface/peft/blob/main/src/peft/peft_model.py#L3535)

**매개변수:**

model ([Union[`~PeftModel`, `~transformers.PreTrainedModel`, `nn.Module`]]) : 어댑터 레이어 상태를 가져올 모델.

**반환값:** `peft.peft_model.TunerModelStatus`

모델의 상태를 포함하는 dataclass입니다.

모델의 튜너 상태를 가져옵니다.

이 함수는 다음 속성을 포함하는 `TunerModelStatus` dataclass 인스턴스를 반환합니다:

- `base_model_type` (`str`): 베이스 모델의 유형, 예: `T5Model`.
- `adapter_model_type` (`str`): 어댑터 모델의 유형, 예: `LoraModel`.
- `peft_types` (`dict[str, str]`): 어댑터 이름에서 어댑터 유형으로의 매핑입니다. 예: `{"default": "LORA"}`.
- `trainable_params` (`int`): 모델의 학습 가능 매개변수 개수.
- `total_params` (`int`): 모델의 전체 파라미터 수.
- `num_adapter_layers` (`int`): 모델의 어댑터 레이어 수입니다.
- `enabled` (`bool`, `Literal["irregular"]`): 모든 어댑터 레이어가 활성화되어 있는지 여부입니다. 일부만 활성화되고 일부는 비활성화되어 있으면 이 값은 `"irregular"`가 됩니다. 이는 모델이 일관되지 않은 상태에 있으며 예상대로 작동하지 않을 수 있음을 의미합니다.
- `active_adapters` (`list[str]`, `Literal["irregular"]`): 활성화된 어댑터의 이름입니다. 활성화된 어댑터가 모든 레이어에서 일관되지 않으면 `"irregular"`가 반환되며, 이는 모델이 일관되지 않은 상태에 있어 예상대로 작동하지 않을 수 있음을 의미합니다.
- `merged_adapters` (`list[str]`, `Literal["irregular"]`): 병합된 어댑터의 이름입니다. 병합된 어댑터가 모든 레이어에서 일관되지 않은 경우, 이는 `"irregular"`가 되며, 이는 모델이 일관되지 않은 상태에 있고 예상대로 작동하지 않을 수 있음을 의미합니다.
- `requires_grad` (`dict[str, bool | Literal["irregular"]]`): 주어진 어댑터의 모든 어댑터 레이어에서 `requires_grad`가 `True` 또는 `False`로 설정되어 있는지 여부입니다. 값이 혼합되어 있으면 `"irregular"`로 설정되며, 이는 모델이 일관되지 않은 상태에 있어 예상대로 작동하지 않을 수 있음을 의미합니다.
- `available_adapters` (`list[str]`): 사용 가능한 어댑터의 이름 목록, 예: `["default"]`.
- `devices` (`dict[str, list[str]]`): 주어진 어댑터의 파라미터가 저장된 장치, 예: `["cuda","xpu"]`.
- `quantization_backend` (`str`, `None`, `Literal["irregular"]`): 양자화 백엔드의 이름입니다. 예를 들어 `"bnb 4bit"`이며, 양자화가 적용되지 않은 경우 `None`입니다. 모든 레이어에서 백엔드가 일관되지 않으면 `"irregular"`가 됩니다.

