# UNet

LoRA와 Custom Diffusion과 같은 일부 학습 방법은 일반적으로 UNet의 attention 레이어를 대상으로 하지만, 이러한 학습 방법은 attention이 아닌 다른 레이어를 대상으로 할 수도 있습니다. 모델의 모든 파라미터를 학습하는 대신, 파라미터의 일부만 학습하므로 더 빠르고 효율적입니다. 이 클래스는 UNet에 *오직* 가중치를 로드하는 경우에 유용합니다. 텍스트 인코더 또는 텍스트 인코더와 UNet에 가중치를 로드해야 하는 경우, 대신 [load_lora_weights()](/docs/diffusers/main/ko/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) 함수를 사용하는 것이 좋습니다.

`UNet2DConditionLoadersMixin` 클래스는 가중치 로드 및 저장, LoRA 융합 및 역융합, LoRA 비활성화 및 활성화, 어댑터 설정 및 삭제에 대한 함수를 제공합니다.

> [!TIP]
> LoRA 가중치를 로드하는 방법에 대해 자세히 알아보려면 [LoRA](../../tutorials/using_peft_for_inference) 가이드를 참조하세요.

## UNet2DConditionLoadersMixin[[diffusers.loaders.UNet2DConditionLoadersMixin]]

#### diffusers.loaders.UNet2DConditionLoadersMixin[[diffusers.loaders.UNet2DConditionLoadersMixin]]

```python
diffusers.loaders.UNet2DConditionLoadersMixin()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/unet.py#L54)

`UNet2DCondtionModel`에 LoRA 레이어를 로드합니다.

#### load_attn_procs[[diffusers.loaders.UNet2DConditionLoadersMixin.load_attn_procs]]

```python
load_attn_procs(pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor], **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/unet.py#L62)

**매개변수:**

pretrained_model_name_or_path_or_dict (`str` 또는 `os.PathLike` 또는 `dict`) : 다음 중 하나일 수 있습니다: - Hub에 호스팅된 사전 학습 모델의 모델 ID(예: `google/ddpm-celebahq-256`)인 문자열. - [ModelMixin.save_pretrained()](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin.save_pretrained)로 저장된 모델 가중치가 포함된 디렉터리의 경로(예: `./my_model_directory`). - [torch state dict](https://pytorch.org/tutorials/beginner/saving_loading_models.html#what-is-a-state-dict).

cache_dir (`str | os.PathLike`, *선택 사항*) : 표준 캐시를 사용하지 않을 경우, 다운로드된 사전 학습 모델 구성이 캐시되는 디렉터리의 경로입니다.

force_download (`bool`, *선택 사항*, 기본값 `False`) : 캐시된 버전이 존재하더라도 모델 가중치 및 구성 파일의 (재)다운로드를 강제할지 여부.

proxies (`dict[str, str]`, *선택 사항*) : 프로토콜 또는 엔드포인트별로 사용할 프록시 서버의 사전입니다. 예를 들어, `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`와 같습니다. 각 요청에 프록시가 사용됩니다.

local_files_only (`bool`, *선택 사항*, 기본값 `False`) : 로컬 모델 가중치와 구성 파일만 로드할지 여부를 지정합니다. `True`로 설정하면 Hub에서 모델을 다운로드하지 않습니다.

token (`str` 또는 *bool*, *선택 사항*) : 원격 파일에 대한 HTTP bearer 인증으로 사용할 토큰입니다. `True`인 경우, `diffusers-cli login`에서 생성된 토큰(`~/.huggingface`에 저장됨)이 사용됩니다.

revision (`str`, *선택 사항*, 기본값 `"main"`) : 사용할 특정 모델 버전입니다. Git에서 허용하는 브랜치 이름, 태그 이름, 커밋 ID 또는 기타 식별자일 수 있습니다.

subfolder (`str`, *선택 사항*, 기본값 `""`) : Hub 또는 로컬의 더 큰 모델 저장소 내에서 모델 파일의 서브폴더 위치입니다.

weight_name (`str`, *선택 사항*, 기본값 None) : 직렬화된 state dict 파일의 이름.

사전 학습된 Custom Diffusion attention processor 레이어를 [UNet2DConditionModel](/docs/diffusers/main/ko/api/models/unet2d-cond#diffusers.UNet2DConditionModel)에 로드합니다. Attention processor 레이어는 [`attention_processor.py`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)에 정의되어 있어야 하며 `torch.nn.Module` 클래스여야 합니다. LoRA 레이어를 로드하려면 대신 [load_lora_adapter()](/docs/diffusers/main/ko/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.load_lora_adapter)를 사용하세요.

예:

```py
import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
```

#### save_attn_procs[[diffusers.loaders.UNet2DConditionLoadersMixin.save_attn_procs]]

```python
save_attn_procs(save_directory: str | os.PathLike, is_main_process: bool = True, weight_name: str = None, save_function: typing.Callable = None, safe_serialization: bool = True, **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/loaders/unet.py#L253)

**매개변수:**

save_directory (`str` 또는 `os.PathLike`) : attention processor를 저장할 디렉터리 (존재하지 않으면 생성됩니다).

is_main_process (`bool`, *선택 사항*, 기본값 `True`) : 이 함수를 호출하는 프로세스가 메인 프로세스인지 여부입니다. 분산 학습 중에 모든 프로세스에서 이 함수를 호출해야 하는 경우 유용합니다. 이 경우 레이스 조건을 방지하기 위해 메인 프로세스에서만 `is_main_process=True`로 설정하세요.

save_function (`Callable`) : 상태 사전(state dictionary)을 저장하는 데 사용할 함수입니다. 분산 학습 중에 `torch.save`를 다른 방법으로 대체해야 하는 경우 유용합니다. 환경 변수 `DIFFUSERS_SAVE_MODE`로 설정할 수 있습니다.

safe_serialization (`bool`, *선택 사항*, 기본값 `True`) : `safetensors` 또는 `pickle`를 사용하여 모델을 저장할지 여부.

Custom Diffusion attention processor 레이어를 디렉터리에 저장하여 [load_attn_procs()](/docs/diffusers/main/ko/api/loaders/unet#diffusers.loaders.UNet2DConditionLoadersMixin.load_attn_procs) 메서드로 다시 로드할 수 있습니다. LoRA 레이어를 저장하려면 대신 [save_lora_adapter()](/docs/diffusers/main/ko/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.save_lora_adapter)를 사용하세요.

예:

```py
import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
pipeline.unet.save_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
```

