# 모델

🤗 Diffusers는 인기 있는 알고리즘에 대한 사전 학습된 모델과 커스텀 diffusion 시스템을 생성하기 위한 모듈을 제공합니다. 모델의 주요 기능은 분포 \\(p_{\theta}(x_{t-1}|x_{t})\\)로 모델링된 입력 샘플의 노이즈를 제거하는 것입니다.

모든 모델은 로컬 및 Hugging Face Hub에서 모델을 저장하고 로드하는 기본 기능을 제공하는 [`torch.nn.Module`](https://pytorch.org/docs/stable/generated/torch.nn.Module.html)인 기본 [ModelMixin](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin) 클래스로 구성됩니다.

## ModelMixin[[diffusers.ModelMixin]]

#### diffusers.ModelMixin[[diffusers.ModelMixin]]

```python
diffusers.ModelMixin()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L243)

모든 모델의 베이스 클래스입니다.

[ModelMixin](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin)은 모델 구성을 저장하는 역할을 하며, 모델을 로드, 다운로드 및 저장하는 메서드를 제공합니다.

- **config_name** (`str`) -- [save_pretrained()](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin.save_pretrained)를 호출할 때 모델을 저장할 파일 이름.

#### compile_repeated_blocks[[diffusers.ModelMixin.compile_repeated_blocks]]

```python
compile_repeated_blocks(*args, **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L1678)

모델 전체를 컴파일하는 대신, 모델 내에서 반복적으로 실행되는 서브모듈(예: Transformer 레이어)만 *컴파일*합니다. 이 기법은 **리전널 컴파일**(PyTorch 레시피 https://docs.pytorch.org/tutorials/recipes/regional_compilation.html 참조)이라고도 불리며, 전체 `torch.compile`에서 기대할 수 있는 런타임 속도 향상을 유지하면서 엔드투엔드 컴파일 시간을 크게 줄일 수 있습니다.

컴파일할 서브모듈 집합은 모델 정의에 **`_repeated_blocks`** 속성이 존재하는지 여부로 결정됩니다. 이 속성을 모델 서브클래스에 클래스 이름(문자열)의 리스트/튜플로 정의하십시오. 클래스 이름이 일치하는 모든 모듈이 컴파일됩니다.

발견된 각 매칭 서브모듈은 `submodule.compile(*args, **kwargs)`를 호출하여 컴파일됩니다. `compile_repeated_blocks`에 전달하는 모든 위치 인자 또는 키워드 인자는 `torch.compile`에 그대로 전달됩니다.

#### cuda[[diffusers.ModelMixin.cuda]]

```python
cuda(*args, **kwargs)
```

점으로 구분된 경로(예: `torch.float32`)의 mock 값입니다: 속성 접근 체인, 호출은 pass-through 데코레이터처럼 동작하며, `repr`은 해당 점으로 구분된 경로입니다. 이를 베이스 클래스로 사용하면 plain-`type` 베이스로 대체됩니다(PEP 560 `__mro_entries__`). 따라서 실제 서브클래스는 일반적인 메타클래스를 유지하고, `inspect.signature`는 mock의 것이 아니라 실제 `__init__`를 읽습니다.

#### dequantize[[diffusers.ModelMixin.dequantize]]

```python
dequantize()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L894)

양자화 방법 중 역양자화를 지원하는 것으로 양자화된 경우, 모델을 역양자화할 수 있습니다.

#### disable_gradient_checkpointing[[diffusers.ModelMixin.disable_gradient_checkpointing]]

```python
disable_gradient_checkpointing()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L327)

현재 모델에 대한 gradient checkpointing을 비활성화합니다(다른 프레임워크에서는 *activation checkpointing* 또는 *checkpoint activations*라고도 불립니다).

#### disable_npu_flash_attention[[diffusers.ModelMixin.disable_npu_flash_attention]]

```python
disable_npu_flash_attention()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L358)

torch_npu에서 npu flash attention 비활성화

#### disable_xformers_memory_efficient_attention[[diffusers.ModelMixin.disable_xformers_memory_efficient_attention]]

```python
disable_xformers_memory_efficient_attention()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L441)

[xFormers](https://facebookresearch.github.io/xformers/)에서 메모리 효율적 어텐션을 비활성화합니다.

#### disable_xla_flash_attention[[diffusers.ModelMixin.disable_xla_flash_attention]]

```python
disable_xla_flash_attention()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L388)

torch_xla의 flash attention pallals 커널을 비활성화합니다.

#### enable_gradient_checkpointing[[diffusers.ModelMixin.enable_gradient_checkpointing]]

```python
enable_gradient_checkpointing(gradient_checkpointing_func: typing.Optional[typing.Callable] = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L297)

**매개변수:**

gradient_checkpointing_func (`Callable`, *선택 사항*) : gradient checkpointing에 사용할 함수입니다. `None`인 경우, 기본 PyTorch checkpointing 함수(`torch.utils.checkpoint.checkpoint`)가 사용됩니다.

현재 모델에 대해 gradient checkpointing을 활성화합니다(다른 프레임워크에서는 *activation checkpointing* 또는 *checkpoint activations*라고도 불립니다).

#### enable_group_offload[[diffusers.ModelMixin.enable_group_offload]]

```python
enable_group_offload(onload_device: device, offload_device: device = torch.device(), offload_type: str = 'block_level', num_blocks_per_group: int | None = None, non_blocking: bool = False, use_stream: bool = False, record_stream: bool = False, low_cpu_mem_usage = False, offload_to_disk_path: str | None = None, block_modules: str | None = None, exclude_kwargs: str | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L532)

현재 모델에 대한 그룹 오프로딩을 활성화합니다.

자세한 내용은 [apply_group_offloading()](/docs/diffusers/main/ko/api/utilities#diffusers.hooks.apply_group_offloading)을 참조하세요.

예:

```python
>>> from diffusers import CogVideoXTransformer3DModel

>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
...     "THUDM/CogVideoX-5b", subfolder="transformer", torch_dtype=torch.bfloat16
... )

>>> transformer.enable_group_offload(
...     onload_device=torch.device("cuda"),
...     offload_device=torch.device("cpu"),
...     offload_type="leaf_level",
...     use_stream=True,
... )
```

#### enable_layerwise_casting[[diffusers.ModelMixin.enable_layerwise_casting]]

```python
enable_layerwise_casting(storage_dtype: dtype = torch.float8_e4m3fn, compute_dtype: typing.Optional[torch.dtype] = None, skip_modules_pattern: tuple[str, ...] | None = None, skip_modules_classes: tuple[typing.Type[torch.nn.Module], ...] | None = None, non_blocking: bool = False)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L447)

**매개변수:**

storage_dtype (`torch.dtype`) : 모델이 저장되도록 캐스팅되어야 할 dtype입니다.

compute_dtype (`torch.dtype`) : forward pass 중에 모델 가중치를 캐스팅할 dtype입니다.

skip_modules_pattern (`tuple[str, ...]`, *선택 사항*) : 레이어별 캐스팅 과정에서 건너뛸 모듈의 이름을 일치시키기 위한 패턴 목록입니다. `None`으로 설정하면, 모듈의 특정 내부 레이어와 PEFT 레이어를 무시하기 위한 기본 건너뛰기 패턴이 사용됩니다.

skip_modules_classes (`tuple[Type[torch.nn.Module], ...]`, *선택 사항*) : 레이어별 캐스팅 과정에서 건너뛸 모듈 클래스 목록입니다.

non_blocking (`bool`, *선택 사항*, 기본값 `False`) : `True`인 경우, 가중치 캐스팅 작업이 비차단(non-blocking) 방식으로 수행됩니다.

현재 모델에 대해 레이어별 캐스팅을 활성화합니다.

Layerwise casting은 모델 가중치를 저장을 위해 더 낮은 정밀도의 dtype으로 변환하되, 계산 시에는 더 높은 정밀도의 dtype으로 즉시 변환하는 기법입니다. 이 과정은 모델 가중치로 인한 메모리 사용량을 크게 줄일 수 있지만, 출력의 품질이 일부 저하될 수 있습니다. 대부분의 품질 저하는 무시할 수 있는 수준이며, 주로 정규화 및 변조 레이어의 가중치 변환에서 비롯됩니다.

기본적으로 diffusers의 대부분의 모델은 패치 임베딩, 위치 임베딩 및 정규화 레이어를 무시하도록 `_skip_layerwise_casting_patterns` 속성을 설정합니다. 이는 이러한 레이어가 품질에 있어 정밀도가 가장 중요할 가능성이 높기 때문입니다. 이 동작을 변경하려면 `_skip_layerwise_casting_patterns` 속성을 `None`으로 설정하거나, 사용자 정의 인수를 사용하여 [apply_layerwise_casting()](/docs/diffusers/main/ko/api/utilities#diffusers.hooks.apply_layerwise_casting)을 호출할 수 있습니다.

예:

[enable_layerwise_casting()](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin.enable_layerwise_casting) 사용:

```python
>>> from diffusers import CogVideoXTransformer3DModel

>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
...     "THUDM/CogVideoX-5b", subfolder="transformer", torch_dtype=torch.bfloat16
... )

>>> # Enable layerwise casting via the model, which ignores certain modules by default
>>> transformer.enable_layerwise_casting(storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)
```

#### enable_npu_flash_attention[[diffusers.ModelMixin.enable_npu_flash_attention]]

```python
enable_npu_flash_attention()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L351)

torch_npu에서 npu flash attention 활성화

#### enable_xformers_memory_efficient_attention[[diffusers.ModelMixin.enable_xformers_memory_efficient_attention]]

```python
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L409)

**매개변수:**

attention_op (`Callable`, *선택 사항*) : xFormers의 [`memory_efficient_attention()`](https://facebookresearch.github.io/xformers/components/ops.html#xformers.ops.memory_efficient_attention) 함수에 `op` 인수로 사용될 때 기본 `None` 연산자를 재정의합니다.

[xFormers](https://facebookresearch.github.io/xformers/)에서 메모리 효율적인 어텐션을 활성화합니다.

이 옵션이 활성화되면 GPU 메모리 사용량이 낮아지고 추론 과정에서 속도 향상이 관찰될 수 있습니다. 학습 과정에서의 속도 향상은 보장되지 않습니다.

> [!WARNING] > ⚠️ memory efficient attention과 sliced attention이 모두 활성화된 경우, memory efficient
attention은 > 우선순위를 가집니다.

예:

```py
>>> import torch
>>> from diffusers import UNet2DConditionModel
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> model = UNet2DConditionModel.from_pretrained(
...     "stabilityai/stable-diffusion-2-1", subfolder="unet", torch_dtype=torch.float16
... )
>>> model = model.to("cuda")
>>> model.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
```

#### enable_xla_flash_attention[[diffusers.ModelMixin.enable_xla_flash_attention]]

```python
enable_xla_flash_attention(partition_spec: typing.Optional[typing.Callable] = None, **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L382)

torch_xla에 대한 flash attention pallals 커널을 활성화합니다.

#### from_pretrained[[diffusers.ModelMixin.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None, **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L906)

**매개변수:**

pretrained_model_name_or_path (`str` 또는 `os.PathLike`, *선택 사항*) : 다음 중 하나일 수 있습니다. - Hub에 호스팅된 사전 학습 모델의 *모델 ID* 문자열(예: `google/ddpm-celebahq-256`). - [save_pretrained()](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin.save_pretrained)로 저장된 모델 가중치를 포함하는 *디렉터리* 경로(예: `./my_model_directory`).

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

dtype (`torch.dtype`, *선택 사항*) : 기본 `torch.dtype`를 재정의하여 다른 dtype로 모델을 로드합니다.

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

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

output_loading_info (`bool`, *선택 사항*, 기본값 `False`) : 누락된 키, 예상치 못한 키 및 오류 메시지가 포함된 사전도 함께 반환할지 여부.

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 또는 로컬의 더 큰 모델 저장소 내에서 모델 파일의 서브폴더 위치입니다.

mirror (`str`, *선택 사항*) : 중국에서 모델을 다운로드할 때 접근성 문제를 해결하기 위한 미러 소스입니다. 해당 소스의 적시성이나 안전성을 보장하지 않으며, 자세한 내용은 미러 사이트를 참고하세요.

device_map (`int | str | torch.device` 또는 `dict[str, int | str | torch.device]`, *선택 사항*) : 각 서브모듈이 어디에 배치되어야 하는지 지정하는 맵입니다. 모든 파라미터/버퍼 이름에 대해 정의할 필요는 없으며, 특정 모듈 이름이 맵에 포함되면 해당 모듈의 모든 서브모듈이 동일한 디바이스로 전송됩니다. 기본값은 `None`이며, 이는 모델이 CPU에 로드됨을 의미합니다. 예시: ```py >>> from diffusers import AutoModel >>> import torch  >>> # This works. >>> model = AutoModel.from_pretrained( ...     "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map="cuda" ... ) >>> # This also works (integer accelerator device ID). >>> model = AutoModel.from_pretrained( ...     "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map=0 ... ) >>> # Specifying a supported offloading strategy like "auto" also works. >>> model = AutoModel.from_pretrained( ...     "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet", device_map="auto" ... ) >>> # Specifying a dictionary as `device_map` also works. >>> model = AutoModel.from_pretrained( ...     "stabilityai/stable-diffusion-xl-base-1.0", ...     subfolder="unet", ...     device_map={"": torch.device("cuda")}, ... ) ``` `device_map="auto"`를 설정하면 🤗 Accelerate가 가장 최적화된 `device_map`을 자동으로 계산합니다. 각 옵션에 대한 자세한 내용은 [device map 설계](https://huggingface.co/docs/accelerate/en/concept_guides/big_model_inference#the-devicemap)를 참고하세요. 더 구체적인 예시는 [Diffusers 전용 문서](https://huggingface.co/docs/diffusers/main/en/training/distributed_inference#model-sharding)를 참고할 수 있습니다.

max_memory (`Dict`, *선택 사항*) : 최대 메모리에 대한 디바이스 식별자를 나타내는 사전입니다. 설정되지 않으면 각 GPU의 사용 가능한 최대 메모리와 사용 가능한 CPU RAM이 기본값으로 사용됩니다.

offload_folder (`str` 또는 `os.PathLike`, *선택 사항*) : `device_map`에 `"disk"` 값이 포함된 경우, 가중치를 오프로드할 경로입니다.

offload_state_dict (`bool`, *선택 사항*) : `True`인 경우, CPU 상태 사전의 가중치와 체크포인트의 가장 큰 샤드 합이 CPU RAM에 맞지 않을 때 CPU RAM 부족을 방지하기 위해 CPU 상태 사전을 하드 드라이브로 일시적으로 오프로드합니다. 디스크 오프로드가 있는 경우 기본값은 `True`입니다.

low_cpu_mem_usage (`bool`, *선택 사항*, torch 버전이 1.9.0 이상이면 기본값은 `True`, 그 외에는 `False`) : 가중치를 초기화하지 않고 사전 학습된 가중치만 로드하여 모델 로딩 속도를 높입니다. 모델 로딩 시 CPU 메모리(피크 메모리 포함)를 모델 크기의 1배를 초과하지 않도록 시도합니다. PyTorch 1.9.0 이상에서만 지원됩니다. PyTorch의 이전 버전을 사용하는 경우 이 인수를 `True`로 설정하면 오류가 발생합니다.

variant (`str`, *선택 사항*) : `"fp16"` 또는 `"ema"`와 같은 지정된 `variant` 파일 이름에서 가중치를 로드합니다.

use_safetensors (`bool`, *선택 사항*, 기본값 `None`) : `None`으로 설정된 경우, `safetensors` 가중치가 사용 가능한 **그리고** `safetensors` 라이브러리가 설치되어 있으면 다운로드됩니다. `True`로 설정된 경우, 모델은 `safetensors` 가중치에서 강제로 로드됩니다. `False`로 설정된 경우, `safetensors` 가중치는 로드되지 않습니다.

disable_mmap ('bool', *선택 사항*, 기본값 'False') : Safetensors 모델을 로드할 때 mmap을 비활성화할지 여부입니다. 네트워크 마운트나 하드 드라이브에 모델이 있는 경우, mmap의 seek 동작을 잘 처리하지 못할 수 있으므로 이 옵션을 사용하면 성능이 더 좋아질 수 있습니다.

use_flashpack (`bool`, *선택 사항*, 기본값 `False`) : `True`로 설정하면 모델은 `flashpack` 가중치에서 로드됩니다.

flashpack_kwargs(`dict[str, Any]`, *선택 사항*, 기본값 `{}`) : [`flashpack.deserialization.assign_from_file`](https://github.com/fal-ai/flashpack/blob/f1aa91c5cd9532a3dbf5bcc707ab9b01c274b76c/src/flashpack/deserialization.py#L408-L422)에 전달되는 Kwargs

pretrained model configuration에서 사전 학습된 PyTorch 모델을 초기화합니다.

모델은 기본적으로 평가 모드(`model.eval()`)로 설정되며, dropout 모듈은 비활성화됩니다. 모델을 학습하려면 `model.train()`을 사용하여 다시 학습 모드로 설정하세요.

> [!TIP] > 비공개 또는 [게이트된 모델](https://huggingface.co/docs/hub/models-gated#gated-models)을 사용하려면 로그인하세요
`hf > auth login`을(를) 통해 수행할 수 있습니다. 또한 방화벽이 있는 환경에서 이 방법을 사용하려면 특수한 ["오프라인 모드"](https://huggingface.co/diffusers/installation.html#offline-mode)를 활성화할 수도 있습니다.

예:

```py
from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", subfolder="unet")
```

아래와 같은 오류 메시지가 표시되면 다운스트림 작업을 위해 가중치를 미세 조정해야 합니다:

```bash
Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
```

#### get_memory_footprint[[diffusers.ModelMixin.get_memory_footprint]]

```python
get_memory_footprint(return_buffers = True)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L2186)

**매개변수:**

return_buffers (`bool`, *선택 사항*, 기본값 `True`) : 메모리 사용량 계산 시 버퍼 텐서의 크기를 반환할지 여부입니다. 버퍼는 그래디언트가 필요하지 않고 파라미터로 등록되지 않은 텐서를 의미합니다. 예를 들어, 배치 정규화 레이어의 mean과 std가 해당됩니다. 자세한 내용은 다음을 참조하세요: https://discuss.pytorch.org/t/what-pytorch-means-by-buffers/120266/2

모델의 메모리 사용량을 가져옵니다. 이 함수는 현재 모델의 메모리 사용량을 바이트 단위로 반환합니다. 현재 모델의 메모리 사용량을 벤치마킹하고 테스트를 설계하는 데 유용합니다. PyTorch 토론에서 영감을 받은 해결책입니다: https://discuss.pytorch.org/t/gpu-memory-that-model-uses/56822/2

#### num_parameters[[diffusers.ModelMixin.num_parameters]]

```python
num_parameters(only_trainable: bool = False, exclude_embeddings: bool = False)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L2122)

**매개변수:**

only_trainable (`bool`, *선택 사항*, 기본값 `False`) : 학습 가능한 매개변수의 수만 반환할지 여부.

exclude_embeddings (`bool`, *선택 사항*, 기본값 `False`) : 임베딩이 아닌 매개변수의 개수만 반환할지 여부.

**반환값:** `int`

파라미터의 수.

모듈의 (학습 가능 또는 임베딩이 아닌) 매개변수 수를 가져옵니다.

예:

```py
from diffusers import UNet2DConditionModel

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
unet = UNet2DConditionModel.from_pretrained(model_id, subfolder="unet")
unet.num_parameters(only_trainable=True)
859520964
```

#### reset_attention_backend[[diffusers.ModelMixin.reset_attention_backend]]

```python
reset_attention_backend()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L667)

모델의 attention backends를 초기화합니다. 이후 `forward` 호출 시 설정된 환경 기본값 또는 torch 네이티브 scaled dot product attention을 사용합니다.

#### save_pretrained[[diffusers.ModelMixin.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, is_main_process: bool = True, save_function: typing.Optional[typing.Callable] = None, safe_serialization: bool = True, variant: str | None = None, max_shard_size: int | str = '10GB', push_to_hub: bool = False, use_flashpack: bool = False, **kwargs)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L686)

**매개변수:**

save_directory (`str` 또는 `os.PathLike`) : 모델과 해당 구성 파일을 저장할 디렉터리입니다. 존재하지 않으면 생성됩니다.

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`를 사용한 전통적인 PyTorch 방식으로 모델을 저장할지 여부.

variant (`str`, *선택 사항*) : 지정된 경우, 가중치가 `pytorch_model.<variant>.bin` 형식으로 저장됩니다.

max_shard_size (`int` 또는 `str`, 기본값은 `"10GB"`) : 샤딩되기 전 체크포인트의 최대 크기입니다. 샤딩된 각 체크포인트의 크기는 이 크기보다 작아집니다. 문자열로 표현할 경우, 숫자 뒤에 단위(예: `"5GB"`)가 따라와야 합니다. 정수로 표현할 경우, 단위는 바이트입니다. 2024년 10월부터 특정 기간이 지난 후 이 제한이 낮아질 수 있으며, 이는 사용자가 `diffusers`의 최신 버전으로 업그레이드할 수 있도록 하기 위한 것입니다. 이는 Hugging Face 생태계의 다른 라이브러리(예: `transformers`, `accelerate`)에서 이 인수의 공통 기본 크기를 설정하기 위한 것입니다.

push_to_hub (`bool`, *선택 사항*, 기본값 `False`) : 모델을 저장한 후 Hugging Face Hub에 푸시할지 여부입니다. `repo_id`를 사용하여 푸시할 저장소를 지정할 수 있습니다(기본값은 네임스페이스의 `save_directory` 이름입니다).

kwargs (`dict[str, Any]`, *선택 사항*) : [push_to_hub()](/docs/diffusers/main/ko/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub) 메서드에 함께 전달되는 추가 키워드 인자입니다.

모델과 해당 구성 파일을 디렉토리에 저장하여 [from_pretrained()](/docs/diffusers/main/ko/api/models/overview#diffusers.ModelMixin.from_pretrained) 클래스 메서드를 사용해 다시 로드할 수 있도록 합니다.

#### set_attention_backend[[diffusers.ModelMixin.set_attention_backend]]

```python
set_attention_backend(backend: str)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L608)

**매개변수:**

backend (`str`) : 설정할 백엔드의 이름입니다. `AttentionBackendName`에 정의된 사용 가능한 백엔드 중 하나여야 합니다. 사용 가능한 백엔드는 `diffusers.attention_dispatch.AttentionBackendName`에서 확인할 수 있습니다. 기본값은 torch 네이티브 scaled dot product attention을 백엔드로 사용합니다.

모델의 attention 백엔드를 설정합니다.

#### set_use_npu_flash_attention[[diffusers.ModelMixin.set_use_npu_flash_attention]]

```python
set_use_npu_flash_attention(valid: bool)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_utils.py#L335)

npu flash attention 스위치를 설정합니다.

#### (으)로[[diffusers.ModelMixin.to]]

```python
to(*args, **kwargs)
```

점으로 구분된 경로(예: `torch.float32`)의 mock 값입니다: 속성 접근 체인, 호출은 pass-through 데코레이터처럼 동작하며, `repr`은 해당 점으로 구분된 경로입니다. 이를 베이스 클래스로 사용하면 plain-`type` 베이스로 대체됩니다(PEP 560 `__mro_entries__`). 따라서 실제 서브클래스는 일반적인 메타클래스를 유지하고, `inspect.signature`는 mock의 것이 아니라 실제 `__init__`를 읽습니다.

## PushToHubMixin[[diffusers.utils.PushToHubMixin]]

#### diffusers.utils.PushToHubMixin[[diffusers.utils.PushToHubMixin]]

```python
diffusers.utils.PushToHubMixin()
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L491)

Hugging Face Hub에 모델, 스케줄러 또는 파이프라인을 푸시하기 위한 Mixin입니다.

#### push_to_hub[[diffusers.utils.PushToHubMixin.push_to_hub]]

```python
push_to_hub(repo_id: str, commit_message: str | None = None, private: bool | None = None, token: str | None = None, create_pr: bool = False, safe_serialization: bool = True, variant: str | None = None, subfolder: str | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L526)

**매개변수:**

repo_id (`str`) : 모델, 스케줄러 또는 파이프라인 파일을 푸시할 저장소의 이름입니다. 조직에 푸시할 경우 조직 이름을 포함해야 합니다. `repo_id`는 로컬 디렉터리의 경로일 수도 있습니다.

commit_message (`str`, *선택 사항*) : push할 때 커밋할 메시지. 기본값은 `"Upload {object}"`입니다.

private (`bool`, *선택 사항*) : 저장소를 비공개로 만들지 여부입니다. `None`(기본값)인 경우, 조직의 기본 설정이 비공개가 아닌 한 저장소는 공개됩니다. 이미 저장소가 존재하면 이 값은 무시됩니다.

token (`str`, *선택 사항*) : 원격 파일에 대한 HTTP bearer 인증으로 사용할 토큰입니다. `hf auth login` 실행 시 생성된 토큰이며 `~/.huggingface`에 저장됩니다.

create_pr (`bool`, *선택 사항*, 기본값 `False`) : 업로드된 파일로 PR을 생성할지 아니면 직접 커밋할지 여부.

safe_serialization (`bool`, *선택 사항*, 기본값 `True`) : 모델 가중치를 `safetensors` 형식으로 변환할지 여부.

variant (`str`, *선택 사항*) : 지정된 경우, 가중치가 `pytorch_model.<variant>.bin` 형식으로 저장됩니다.

모델, 스케줄러 또는 파이프라인 파일을 🤗 Hugging Face Hub에 업로드합니다.

예:

```python
from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")
```

