Diffusers documentation

PEFT

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 (т.е. масштабирование), перед загрузкой адаптера необходимо вызвать дополнительный метод: pipeline = ... # загрузить пайплайн diffusers max_rank = ... # максимальный ранг среди всех LoRA, которые вы хотите загрузить # вызвать *до* компиляции и загрузки адаптера LoRA pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # при необходимости скомпилировать модель сейчас Обратите внимание, что hotswap адаптеров текстового кодировщика пока не поддерживается. У этой техники есть некоторые дополнительные ограничения, которые описаны здесь: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

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

    pipeline = ...  # load diffusers pipeline
    max_rank = ...  # the highest rank among all LoRAs that you want to load
    # call *before* compiling and loading the LoRA adapter
    pipeline.enable_lora_hotswap(target_rank=max_rank)
    pipeline.load_lora_weights(file_name)
    # optionally compile the model now

    Обратите внимание, что горячая замена адаптеров текстового кодировщика пока не поддерживается. У этого метода есть дополнительные ограничения, описанные здесь: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

  • metadata — метаданные адаптера LoRA. Если указаны, метаданные, выведенные из state dict, не используются для инициализации LoraConfig.

Загружает адаптер 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