Diffusers documentation
PEFT
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
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.
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
< source >( 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
< source >( adapter_names: list[str] | str )
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")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.
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()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.
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
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
Parâmetros
- target_rank (
int, opcional, padrão128) — 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
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
Parâmetros
- pretrained_model_name_or_path_or_dict (
strouos.PathLikeoudict) — 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.
- Uma string, o id do modelo (por exemplo,
- 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ãoFalse) — 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ãoFalse) — Se deve carregar apenas os pesos e arquivos de configuração do modelo localmente. Se definido comoTrue, o modelo não será baixado do Hub. - token (
strou bool, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. SeTrue, o token gerado pordiffusers-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_alphano 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, oadapter_namedeve 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
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
Parâmetros
- save_directory (
strouos.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ãoFalse) — Se deve converter o modelo subjacente paratorch.float32antes da serialização. - safe_serialization (
bool, opcional, padrãoTrue) — Se o modelo deve ser salvo usandosafetensorsou da maneira tradicional do PyTorch compickle. - weight_name — (
str, opcional, padrãoNone): Nome do arquivo para serializar o state dict.
Salve os parâmetros do LoRA correspondentes ao modelo subjacente.
set_adapter
< source >( adapter_name: str | list[str] )
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
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
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])