Diffusers documentation
PEFT
PEFT
Diffusers поддерживает загрузку адаптеров, таких как LoRA, с помощью библиотеки PEFT и класса PeftAdapterMixin. Это позволяет классам моделирования в Diffusers, таким как UNet2DConditionModel и SD3Transformer2DModel, работать с адаптером.
См. учебник Inference with PEFT для обзора того, как использовать PEFT в Diffusers для инференса.
PeftAdapterMixin
Класс, содержащий все функции для загрузки и использования весов адаптеров, поддерживаемых в библиотеке PEFT. Более подробную информацию об адаптерах и их внедрении в базовую модель см. в документации PEFT.
Установите последнюю версию PEFT и используйте этот миксин, чтобы:
- Подключите новые адаптеры к модели.
- Подключайте несколько адаптеров и последовательно активируйте/деактивируйте их.
- Активировать/деактивировать все адаптеры из модели.
- Получите список активных адаптеров.
Получает текущий список активных адаптеров модели.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.
add_adapter
< source >( adapter_configadapter_name: str = 'default' )
Добавляет новый адаптер к текущей модели для обучения. Если имя адаптера не передано, ему назначается имя по умолчанию в соответствии с конвенцией библиотеки PEFT.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.
delete_adapters
< source >( 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")Отключите все адаптеры, подключенные к модели, и вернитесь к инференсу только с базовой моделью.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.
Отключает активные слои 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()Включает адаптеры, привязанные к модели. Модель использует self.active_adapters() для получения списка адаптеров, которые необходимо включить.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.
Включает активные слои 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
< source >( 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
< source >( 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
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
Параметры
- save_directory (
stroros.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
< source >( adapter_name: str | list[str] )
Устанавливает конкретный адаптер, принудительно заставляя модель использовать только его и отключая остальные адаптеры.
Если вы не знакомы с адаптерами и методами PEFT, мы приглашаем вас прочитать о них подробнее в документации PEFT.
set_adapters
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
Установите адаптеры, активные в данный момент, для использования в диффузионной сети (например, 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])