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

Diffusers поддерживает загрузку адаптеров, таких как LoRA, с помощью библиотеки PEFT и класса PeftAdapterMixin. Это позволяет классам моделирования в Diffusers, таким как UNet2DConditionModel и SD3Transformer2DModel, работать с адаптером.

См. учебник Inference with PEFT для обзора того, как использовать PEFT в Diffusers для инференса.

PeftAdapterMixin

класс diffusers.loaders.PeftAdapterMixin

< >

( )

Класс, содержащий все функции для загрузки и использования весов адаптеров, поддерживаемых в библиотеке PEFT. Более подробную информацию об адаптерах и их внедрении в базовую модель см. в документации PEFT.

Установите последнюю версию PEFT и используйте этот миксин, чтобы:

  • Подключите новые адаптеры к модели.
  • Подключайте несколько адаптеров и последовательно активируйте/деактивируйте их.
  • Активировать/деактивировать все адаптеры из модели.
  • Получите список активных адаптеров.

active_adapters

< >

( )

Получает текущий список активных адаптеров модели.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.

add_adapter

< >

( adapter_configadapter_name: str = 'default' )

Параметры

  • adapter_config ([~peft.PeftConfig]) — Конфигурация добавляемого адаптера; поддерживаются методы non-prefix tuning и adaption prompt.
  • adapter_name (str, необязательный, по умолчанию "default") — Имя добавляемого адаптера. Если имя не передано, адаптеру будет присвоено имя по умолчанию.

Добавляет новый адаптер к текущей модели для обучения. Если имя адаптера не передано, ему назначается имя по умолчанию в соответствии с конвенцией библиотеки PEFT.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.

delete_adapters

< >

( adapter_names: list[str] | str )

Параметры

  • adapter_names (list[str, str]) — Имена (одна строка или список строк) адаптера, который нужно удалить.

Удалите слои LoRA адаптера из базовой модели.

Пример:

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

< >

( )

Отключите все адаптеры, подключенные к модели, и вернитесь к инференсу только с базовой моделью.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.

disable_lora

< >

( )

Отключает активные слои LoRA базовой модели.

Пример:

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

< >

( )

Включает адаптеры, привязанные к модели. Модель использует self.active_adapters() для получения списка адаптеров, которые необходимо включить.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.

enable_lora

< >

( )

Включает активные слои LoRA базовой модели.

Пример:

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

Параметры

  • target_rank (int, необязательный, по умолчанию 128) — Наибольший ранг среди всех адаптеров, которые будут загружены.
  • check_compiled (str, необязательный, по умолчанию "error") — Как обрабатывать ситуацию, когда модель уже скомпилирована (в целом этого следует избегать). Варианты:
    • “error” (по умолчанию): вызывать ошибку
    • “warn”: выдать предупреждение
    • “ignore”: ничего не делать

Включает возможность горячей замены адаптеров LoRA.

Вызов этого метода необходим только при горячей замене адаптеров, если модель скомпилирована или если ранги загруженных адаптеров различаются.

load_lora_adapter

< >

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

Параметры

  • pretrained_model_name_or_path_or_dict (str или os.PathLike или dict) — Может быть одним из следующих:
    • Строка, идентификатор модели (например, google/ddpm-celebahq-256) предобученной модели, размещенной на Hub.
    • Путь к каталогу (например, ./my_model_directory), содержащему веса модели, сохранённые с помощью ModelMixin.save_pretrained().
    • Словарь состояния torch.
  • prefix (str, необязательный) — Префикс для фильтрации 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.
  • subfolder (str, необязательный, по умолчанию "") — Расположение подпапки файла модели внутри более крупного репозитория моделей на Hub или локально.
  • network_alphas (dict[str, float]) — Значение альфы сети, используемое для стабильного обучения и предотвращения подтекания. Это значение имеет тот же смысл, что и опция --network_alpha в скрипте тренера kohya-ss. См. эту ссылку.
  • low_cpu_mem_usage (bool, необязательный) — Ускоряет загрузку модели, загружая только предобученные веса LoRA и не инициализируя случайные веса.
  • hotswap — (bool, необязательный) По умолчанию False. Определяет, следует ли заменить существующий адаптер (LoRA) на новый загруженный адаптер на месте. Это означает, что вместо загрузки дополнительного адаптера существующие веса адаптера будут заменены весами нового адаптера. Это может быть быстрее и экономнее по памяти. Однако главное преимущество hotswap состоит в том, что при компиляции модели с помощью torch.compile загрузка нового адаптера не требует повторной компиляции модели. При использовании hotswap переданный adapter_name должен быть именем уже загруженного адаптера.

    Если у нового адаптера и старого адаптера разные ранги и/или значения LoRA alpha (т. е. масштабирование), перед загрузкой адаптера необходимо вызвать дополнительный метод:

Загружает адаптер LoRA в базовую модель.

save_lora_adapter

< >

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

Параметры

  • save_directory (str or os.PathLike) — Каталог для сохранения параметров LoRA. Будет создан, если не существует.
  • adapter_name — (str, по умолчанию “default”): имя адаптера, который нужно сериализовать. Полезно, если в базовой модели загружено несколько адаптеров.
  • upcast_before_saving (bool, по умолчанию False) — Следует ли привести базовую модель к типу torch.float32 перед сериализацией.
  • safe_serialization (bool, необязательный, по умолчанию True) — Определяет, сохранять ли модель с помощью safetensors или традиционным способом PyTorch с использованием pickle.
  • weight_name — (str, необязательный, по умолчанию None): Имя файла, в который сериализуется state dict.

Сохраните параметры LoRA, соответствующие базовой модели.

set_adapter

< >

( adapter_name: str | list[str] )

Параметры

  • adapter_name (str | list[str])) — Список адаптеров для установки или имя адаптера в случае с одним адаптером.

Устанавливает конкретный адаптер, принудительно заставляя модель использовать только его и отключая остальные адаптеры.

Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.

set_adapters

< >

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

Параметры

  • adapter_names (list[str] или str) — Имена адаптеров, которые следует использовать.
  • weights (Union[List[float], float], необязательный) — Веса адаптера(ов), используемые с UNet. Если None, веса устанавливаются в 1.0 для всех адаптеров.

Установите адаптеры, активные в данный момент, для использования в диффузионной сети (например, unet, transformer и т. д.).

Пример:

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