# UNet

Alguns métodos de treinamento - como LoRA e Custom Diffusion - geralmente visam as camadas de atenção do UNet, mas esses métodos de treinamento também podem visar outras camadas que não são de atenção. Em vez de treinar todos os parâmetros de um modelo, apenas um subconjunto dos parâmetros é treinado, o que é mais rápido e eficiente. Esta classe é útil se você estiver *apenas* carregando pesos em um UNet. Se você precisar carregar pesos no text encoder ou em um text encoder e um UNet, tente usar a função [load_lora_weights()](/docs/diffusers/v0.43.0/pt/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) em vez disso.

A classe `UNet2DConditionLoadersMixin` fornece funções para carregar e salvar pesos, fundir e desfazer a fusão de LoRAs, desativar e ativar LoRAs, e definir e excluir adaptadores.

> [!TIP]
> Para saber mais sobre como carregar pesos LoRA, consulte o guia [LoRA](../../tutorials/using_peft_for_inference).

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

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

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

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/unet.py#L53)

Carregue as camadas LoRA em um `UNet2DCondtionModel`.

#### 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)
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/unet.py#L61)

**Parâmetros:**

pretrained_model_name_or_path_or_dict (`str` ou `os.PathLike` ou `dict`) : Pode ser: - Uma string, o id do modelo (por exemplo `google/ddpm-celebahq-256`) de um modelo pré-treinado hospedado no Hub. - Um caminho para um diretório (por exemplo `./my_model_directory`) contendo os pesos do modelo salvos com [ModelMixin.save_pretrained()](/docs/diffusers/v0.43.0/pt/api/models/overview#diffusers.ModelMixin.save_pretrained). - Um [torch state dict](https://pytorch.org/tutorials/beginner/saving_loading_models.html#what-is-a-state-dict).

cache_dir (`str | os.PathLike`, *opcional*) : Caminho para um diretório onde a configuração de um modelo pré-treinado baixado é armazenada em cache, caso o cache padrão não seja utilizado.

force_download (`bool`, *opcional*, padrão `False`) : Se deve forçar o (re-)download dos pesos do modelo e dos arquivos de configuração, sobrescrevendo as versões em cache, caso existam.

proxies (`dict[str, str]`, *opcional*) : Um dicionário de servidores proxy a serem usados por protocolo ou endpoint, por exemplo, `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. Os proxies são usados em cada solicitação.

local_files_only (`bool`, *opcional*, padrão `False`) : Se deve carregar apenas os pesos e os arquivos de configuração do modelo localmente ou não. Se definido como `True`, o modelo não será baixado do Hub.

token (`str` ou *bool*, *opcional*) : O token a ser usado como autorização HTTP bearer para arquivos remotos. Se `True`, o token gerado por `diffusers-cli login` (armazenado em `~/.huggingface`) é utilizado.

revision (`str`, *opcional*, padrão `"main"`) : A versão específica do modelo a ser usada. Pode ser o nome de um branch, o nome de uma tag, um id de commit ou qualquer identificador permitido pelo Git.

subfolder (`str`, *opcional*, padrão `""`) : A localização da subpasta de um arquivo de modelo dentro de um repositório de modelo maior no Hub ou localmente.

weight_name (`str`, *opcional*, padrão None) : Nome do arquivo de state dict serializado.

Carrega as camadas de processador de atenção do Custom Diffusion pré-treinadas em [UNet2DConditionModel](/docs/diffusers/v0.43.0/pt/api/models/unet2d-cond#diffusers.UNet2DConditionModel). As camadas de processador de atenção devem ser definidas em [`attention_processor.py`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) e ser uma classe `torch.nn.Module`. Para carregar camadas LoRA, use [load_lora_adapter()](/docs/diffusers/v0.43.0/pt/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.load_lora_adapter) em vez disso.

Exemplo:

```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)
```

[Fonte](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/unet.py#L252)

**Parâmetros:**

save_directory (`str` ou `os.PathLike`) : Diretório para salvar um processador de atenção (será criado se não existir).

is_main_process (`bool`, *opcional*, padrão `True`) : Indica se o processo que está chamando esta função é o processo principal ou não. Útil durante o treinamento distribuído, quando é necessário chamar esta função em todos os processos. Nesse caso, defina `is_main_process=True` apenas no processo principal para evitar condições de corrida.

save_function (`Callable`) : A função a ser usada para salvar o dicionário de estado. Útil durante o treinamento distribuído quando você precisa substituir `torch.save` por outro método. Pode ser configurado com a variável de ambiente `DIFFUSERS_SAVE_MODE`.

safe_serialization (`bool`, *opcional*, padrão `True`) : Se o modelo deve ser salvo usando `safetensors` ou com `pickle`.

Salve as camadas do processador de atenção do Custom Diffusion em um diretório para que possam ser recarregadas com o método [load_attn_procs()](/docs/diffusers/v0.43.0/pt/api/loaders/unet#diffusers.loaders.UNet2DConditionLoadersMixin.load_attn_procs). Para salvar camadas LoRA, use [save_lora_adapter()](/docs/diffusers/v0.43.0/pt/api/loaders/peft#diffusers.loaders.PeftAdapterMixin.save_lora_adapter) em vez disso.

Exemplo:

```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")
```

