Diffusers documentation

PEFT

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PEFT

O Diffusers suporta o carregamento de adaptadores, como LoRA, com a biblioteca PEFT por meio da classe PeftAdapterMixin. Isso permite que as classes de modelagem do Diffusers, como UNet2DConditionModel e SD3Transformer2DModel, operem com um adaptador.

Consulte o tutorial Inference with PEFT para uma visão geral de como usar PEFT no Diffusers para inferência.

PeftAdapterMixin

classe diffusers.loaders.PeftAdapterMixin

< >

( )

Uma classe que contém todas as funções para carregar e usar pesos de adaptadores suportados na biblioteca PEFT. Para mais detalhes sobre adaptadores e como injetá-los em um modelo base, consulte a documentação do PEFT.

Instale a versão mais recente do PEFT e use este mixin para:

  • Anexe novos adaptadores no modelo.
  • Anexe vários adaptadores e ative/desative-os iterativamente.
  • Ativar/desativar todos os adaptadores do modelo.
  • Obtenha uma lista dos adaptadores ativos.

active_adapters

< >

( )

Obtém a lista atual de adaptadores ativos do modelo.

Se você não está familiarizado com adaptadores e métodos PEFT, convidamos você a ler mais sobre eles na documentação do PEFT.

add_adapter

< >

( adapter_configadapter_name: str = 'default' )

Parâmetros

  • adapter_config ([~peft.PeftConfig]) — A configuração do adaptador a ser adicionado; os adaptadores suportados são os métodos de non-prefix tuning e adaption prompt.
  • adapter_name (str, opcional, padrão "default") — O nome do adaptador a ser adicionado. Se nenhum nome for fornecido, um nome padrão será atribuído ao adaptador.

Adiciona um novo adaptador ao modelo atual para treinamento. Se nenhum nome de adaptador for passado, um nome padrão é atribuído ao adaptador para seguir a convenção da biblioteca PEFT.

Se você não está familiarizado com adaptadores e métodos PEFT, convidamos você a ler mais sobre eles na documentação do PEFT.

delete_adapters

< >

( adapter_names: list[str] | str )

Parâmetros

  • adapter_names (list[str, str]) — Os nomes (string única ou lista de strings) do adaptador a ser excluído.

Exclua as camadas LoRA de um adaptador do modelo subjacente.

Exemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")

disable_adapters

< >

( )

Desative todos os adaptadores anexados ao modelo e volte a fazer inferência apenas com o modelo base.

Se você não está familiarizado com adaptadores e métodos PEFT, convidamos você a ler mais sobre eles na documentação do PEFT.

disable_lora

< >

( )

Desativa as camadas LoRA ativas do modelo subjacente.

Exemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()

enable_adapters

< >

( )

Ative os adaptadores que estão anexados ao modelo. O modelo usa self.active_adapters() para recuperar a lista de adaptadores a serem ativados.

Se você não está familiarizado com adaptadores e métodos PEFT, convidamos você a ler mais sobre eles na documentação do PEFT.

enable_lora

< >

( )

Ativa as camadas LoRA ativas do modelo subjacente.

Exemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()

enable_lora_hotswap

< >

( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )

Parâmetros

  • target_rank (int, opcional, padrão 128) — O maior rank entre todos os adaptadores que serão carregados.
  • check_compiled (str, opcional, padrão é "error") — Como lidar com o caso em que o modelo já está compilado, o que geralmente deve ser evitado. As opções são:
    • “error” (padrão): levanta um erro
    • “warn”: emitir um aviso
    • “ignore”: não fazer nada

Permite a possibilidade de trocar adaptadores LoRA em tempo de execução.

A chamada deste método é necessária apenas ao trocar adaptadores dinamicamente e se o modelo estiver compilado ou se os ranks dos adaptadores carregados forem diferentes.

load_lora_adapter

< >

( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )

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().
    • Um torch state dict.
  • prefix (str, opcional) — Prefixo para filtrar o 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 arquivos de configuração do modelo localmente. 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 de bearer HTTP 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.
  • network_alphas (dict[str, float]) — O valor do alpha da rede usado para aprendizado estável e prevenção de underflow. Este valor tem o mesmo significado que a opção --network_alpha no script de treinamento do kohya-ss. Consulte este link.
  • low_cpu_mem_usage (bool, opcional) — Acelera o carregamento do modelo carregando apenas os pesos LoRA pré-treinados e não inicializando os pesos aleatórios.
  • hotswap — (bool, opcional) Padrão é False. Se deve substituir um adaptador (LoRA) existente pelo adaptador recém-carregado no local. Isso significa que, em vez de carregar um adaptador adicional, isso pegará os pesos do adaptador existente e os substituirá pelos pesos do novo adaptador. Isso pode ser mais rápido e eficiente em termos de memória. No entanto, a principal vantagem do hotswap é que, quando o modelo é compilado com torch.compile, o carregamento do novo adaptador não requer a recompilação do modelo. Ao usar hotswap, o adapter_name deve ser o nome de um adaptador já carregado.

    Se o novo adaptador e o antigo tiverem ranks e/ou alphas LoRA diferentes (ou seja, escalonamento), você precisa chamar um método adicional antes de carregar o adaptador:

Carrega um adaptador LoRA no modelo subjacente.

save_lora_adapter

< >

( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )

Parâmetros

  • save_directory (str ou os.PathLike) — Diretório para salvar os parâmetros LoRA. Será criado se não existir.
  • adapter_name — (str, padrão “default”): O nome do adaptador a ser serializado. Útil quando o modelo subjacente possui vários adaptadores carregados.
  • upcast_before_saving (bool, padrão False) — Se deve converter o modelo subjacente para torch.float32 antes da serialização.
  • safe_serialization (bool, opcional, padrão True) — Se o modelo deve ser salvo usando safetensors ou da maneira tradicional do PyTorch com pickle.
  • weight_name — (str, opcional, padrão None): Nome do arquivo para serializar o state dict.

Salve os parâmetros do LoRA correspondentes ao modelo subjacente.

set_adapter

< >

( adapter_name: str | list[str] )

Parâmetros

  • adapter_name (str | list[str])) — A lista de adaptadores a serem definidos ou o nome do adaptador no caso de um único adaptador.

Define um adaptador específico, forçando o modelo a usar apenas esse adaptador e desativando os outros adaptadores.

Se você não está familiarizado com adaptadores e métodos PEFT, convidamos você a ler mais sobre eles na documentação do PEFT.

set_adapters

< >

( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )

Parâmetros

  • adapter_names (list[str] ou str) — Os nomes dos adaptadores a serem usados.
  • weights (Union[List[float], float], opcional) — Os pesos do(s) adaptador(es) a serem usados com o UNet. Se None, os pesos são definidos como 1.0 para todos os adaptadores.

Defina os adaptadores atualmente ativos para uso na rede de difusão (por exemplo, unet, transformer, etc.).

Exemplo:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])
Update on GitHub