Diffusers documentation

Текст в изображение

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

and get access to the augmented documentation experience

to get started

Текст в изображение

LoRA

Модель Stable Diffusion была создана исследователями и инженерами из CompVis, Stability AI, Runway и LAION. StableDiffusionPipeline способен генерировать фотореалистичные изображения по любому текстовому вводу. Модель обучена на изображениях размером 512x512 из подмножества набора данных LAION-5B. Для условного формирования модели на основе текстовых подсказок используется замороженный текстовый энкодер CLIP ViT-L/14. Благодаря UNet с 860 млн параметров и текстовому энкодеру с 123 млн параметров модель относительно легковесна и может работать на потребительских GPU. Latent diffusion — это исследование, на основе которого была построена Stable Diffusion. Оно было предложено в работе High-Resolution Image Synthesis with Latent Diffusion Models Робина Ромбаха, Андреаса Блаттмана, Доминика Лоренца, Патрика Эссера и Бьёрна Оммера.

Аннотация из статьи:

Разлагая процесс формирования изображения на последовательное применение автоэнкодеров шумоподавления, диффузионные модели (DM) достигают передовых результатов синтеза на данных изображений и не только. Кроме того, их формулировка позволяет использовать механизм управления для контроля процесса генерации изображений без повторного обучения. Однако, поскольку эти модели обычно работают непосредственно в пиксельном пространстве, оптимизация мощных DM часто требует сотен GPU-дней, а инференс обходится дорого из-за последовательных вычислений. Чтобы обеспечить обучение DM на ограниченных вычислительных ресурсах с сохранением их качества и гибкости, мы применяем их в латентном пространстве мощных предобученных автоэнкодеров. В отличие от предыдущих работ, обучение диффузионных моделей на таком представлении впервые позволяет достичь почти оптимальной точки между снижением сложности и сохранением деталей, что значительно повышает визуальную точность. Вводя слои кросс-внимания в архитектуру модели, мы превращаем диффузионные модели в мощные и гибкие генераторы для общих условных входов, таких как текст или ограничивающие рамки, и становится возможным синтез высокого разрешения в свёрточном режиме. Наши латентные диффузионные модели (LDM) достигают нового передового уровня для инпейнтинга изображений и демонстрируют высокую конкурентоспособность на различных задачах, включая безусловную генерацию изображений, семантический синтез сцен и супер-разрешение, при этом значительно снижая вычислительные требования по сравнению с пиксельными DM. Код доступен по адресу https://github.com/CompVis/latent-diffusion.

Обязательно ознакомьтесь с разделом Советы по Stable Diffusion, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также как эффективно переиспользовать компоненты конвейера!

Если вы хотите использовать одну из официальных контрольных точек для задачи, изучите организации CompVis и Stability AI на Hub!

StableDiffusionPipeline

класс diffusers.StableDiffusionPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: CLIPVisionModelWithProjection = Nonerequires_safety_checker: bool = True )

Параметры

  • vae (AutoencoderKL) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер (clip-vit-large-patch14).
  • tokenizer (CLIPTokenizer) — CLIPTokenizer для токенизации текста.
  • unet (UNet2DConditionModel) — UNet2DConditionModel для удаления шума из закодированных латентов изображения.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
  • safety_checker (StableDiffusionSafetyChecker) — модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробнее о потенциальных рисках модели см. в карточке модели.
  • feature_extractor (CLIPImageProcessor) — CLIPImageProcessor для извлечения признаков из сгенерированных изображений; используется как вход для safety_checker.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion.

Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.

Пайплайн также наследует следующие методы загрузки:

__call__

< >

( prompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list[int] = Nonesigmas: list[float] = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds.
  • height (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях.
  • width (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • timesteps (list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргумент timesteps в методе set_timesteps. Если не задан, будет использоваться поведение по умолчанию при передаче num_inference_steps. Значения должны быть в порядке убывания.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргумент sigmas в их методе set_timesteps. Если не задано, будет использоваться поведение по умолчанию при передаче num_inference_steps.
  • guidance_scale (float, необязательный, по умолчанию 7.5) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым prompt, ценой снижения качества изображения. Guidance scale включается, когда guidance_scale > 1.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, определяющие, что не должно присутствовать в генерируемом изображении. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющий сигнал (guidance_scale < 1).
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками.
  • generator (torch.Generator или list[torch.Generator], необязательный) — torch.Generator для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, negative_prompt_embeds генерируются из входного аргумента negative_prompt.
  • ip_adapter_image — (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
  • ip_adapter_image_embeds (list[torch.Tensor], необязательный) — Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите между PIL.Image и np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor.
  • guidance_rescale (float, необязательный, по умолчанию 0.0) — Коэффициент rescale guidance из статьи Common Diffusion Noise Schedules and Sample Steps are Flawed. Коэффициент rescale guidance должен исправлять переэкспозицию при использовании нулевого терминального SNR.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, необязательный) — функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, указанных в callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, необязательный) — Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса пайплайна.

Возвращает

StableDiffusionPipelineOutput или tuple

Если return_dict равно True, возвращается StableDiffusionPipelineOutput, в противном случае возвращается tuple, где первый элемент — это список с сгенерированными изображениями, а второй элемент — это список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для работы (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]

enable_attention_slicing

< >

( slice_size: str | int = 'auto' )

Параметры

  • slice_size (str или int, необязательный, по умолчанию "auto") — Если указано "auto", вход для головок внимания делится пополам, и внимание вычисляется в два этапа. Если указано "max", экономия памяти будет максимальной, так как за раз выполняется только один срез. Если предоставлено число, используется столько срезов, сколько получается из attention_head_dim // slice_size. В этом случае attention_head_dim должно быть кратно slice_size.

Включает послойный (сliced) вычисление внимания. При включении этого параметра модуль внимания разбивает входной тензор на части (слайсы) для вычисления внимания в несколько шагов. Если используется более одной головы внимания, вычисления выполняются последовательно для каждой головы. Это полезно для экономии памяти ценой небольшого снижения скорости.

> ⚠️ Не включайте нарезку внимания, если вы уже используете scaled_dot_product_attention (SDPA) из PyTorch > 2.0 или xFormers. Эти вычисления внимания уже очень эффективны по памяти, поэтому вам не нужно включать > эту функцию. Если вы включите нарезку внимания вместе с SDPA или xFormers, это может привести к серьезному замедлению!

Примеры:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]

disable_attention_slicing

< >

( )

Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.

enable_xformers_memory_efficient_attention

< >

( attention_op: typing.Optional[typing.Callable] = None )

Параметры

  • attention_op (Callable, необязательный) — Заменяет оператор по умолчанию None для использования в качестве аргумента op функции memory_efficient_attention() библиотеки xFormers.

Включите энергоэффективное внимание от xFormers. При включении этого параметра вы должны наблюдать снижение потребления памяти GPU и потенциальное ускорение во время инференса. Ускорение во время обучения не гарантируется.

> ⚠️ Если включены и memory efficient attention, и sliced attention, то memory efficient attention имеет > приоритет.

Примеры:

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

disable_xformers_memory_efficient_attention

< >

( )

Отключить энергоэффективное внимание из xFormers.

load_textual_inversion

< >

( pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]]token: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None**kwargs )

Параметры

  • pretrained_model_name_or_path (str или os.PathLike или list[str or os.PathLike] или Dict или list[Dict]) — Может быть одним из следующих вариантов или списком таких вариантов:
    • Строка, идентификатор модели (например, sd-concepts-library/low-poly-hd-logos-icons) предобученной модели, размещенной на Hub.
    • Путь к каталогу (например, ./my_text_inversion_directory/), содержащему веса текстовой инверсии.
    • Путь к файлу (например, ./my_text_inversions.pt), содержащему веса текстовой инверсии.
    • Словарь состояния torch.
  • token (str или list[str], необязательный) — Переопределяет токен, используемый для весов текстовой инверсии. Если pretrained_model_name_or_path является списком, то token также должен быть списком той же длины.
  • text_encoder (CLIPTextModel, необязательный) — Замороженный текстовый энкодер (clip-vit-large-patch14). Если не указан, функция возьмет self.tokenizer.
  • tokenizer (CLIPTokenizer, необязательный) — CLIPTokenizer для токенизации текста. Если не указан, функция использует self.tokenizer.
  • weight_name (str, необязательный) — Имя файла с кастомными весами. Это следует использовать, когда:
    • Сохранённый файл текстовой инверсии находится в формате 🤗 Diffusers, но был сохранён под конкретным именем весов, например text_inv.bin.
    • Сохранённый файл текстовой инверсии находится в формате Automatic1111.
  • 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.
  • hf_token (str или bool, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Если True, используется токен, сгенерированный командой diffusers-cli login (сохранённый в ~/.huggingface).
  • revision (str, необязательный, по умолчанию "main") — Конкретная версия модели, которую следует использовать. Может быть именем ветки, именем тега, идентификатором коммита или любым другим идентификатором, поддерживаемым Git.
  • subfolder (str, необязательный, по умолчанию "") — Расположение подпапки файла модели внутри более крупного репозитория моделей на Hub или локально.
  • mirror (str, optional) — Источник зеркала для решения проблем с доступностью при загрузке модели в Китае. Мы не гарантируем актуальность или безопасность источника, поэтому за дополнительной информацией обращайтесь на сайт зеркала.

Загрузите эмбеддинги Textual Inversion в текстовый энкодер StableDiffusionPipeline (поддерживаются форматы 🤗 Diffusers и Automatic1111).

Пример:

Для загрузки вектора встраивания Textual Inversion в формате 🤗 Diffusers:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

Чтобы загрузить вектор встраивания Textual Inversion в формате Automatic1111, сначала скачайте вектор (например, с civitAI), а затем загрузите его

локально:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

from_single_file

< >

( pretrained_model_link_or_path**kwargs )

Параметры

  • pretrained_model_link_or_path (str или os.PathLike, необязательный) — Может быть:
    • Ссылка на файл .ckpt (например, "https://huggingface.co/<repo_id>/blob/main/<path_to_file>.ckpt") на Hub.
    • Путь к файлу, содержащему все веса конвейера.
  • dtype (str или torch.dtype, необязательный) — Переопределяет стандартный torch.dtype и загружает модель с другим dtype.
  • force_download (bool, необязательный, по умолчанию False) — Следует ли принудительно (пере)скачивать веса модели и файлы конфигурации, игнорируя кэшированные версии, если они существуют.
  • cache_dir (str | os.PathLike, необязательный) — Путь к каталогу, в котором кэшируется загруженная конфигурация предобученной модели, если стандартный кэш не используется.
  • 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.
  • original_config_file (str, необязательный) — Путь к исходному файлу конфигурации, который использовался для обучения модели. Если не указан, файл конфигурации будет определен из файла контрольной точки.
  • config (str, необязательный) — Может быть одним из:
    • Строка, repo id (например, CompVis/ldm-text2im-large-256) предобученного пайплайна, размещенного на Hub.
    • Путь к каталогу (например, ./my_pipeline_directory/), содержащему конфигурации компонентов пайплайна в формате Diffusers.
  • disable_mmap (‘bool’, необязательный, по умолчанию ‘False’) — Определяет, следует ли отключать mmap при загрузке модели Safetensors. Этот параметр может обеспечить лучшую производительность, если модель находится на сетевом диске или жёстком диске.
  • kwargs (остальные именованные аргументы в виде словаря, необязательно) — Можно использовать для переопределения переменных загрузки и сохранения (компонентов конвейера конкретного класса конвейера). Переопределённые компоненты передаются непосредственно в метод __init__ конвейера. Подробнее см. пример ниже.

Создайте экземпляр DiffusionPipeline из предобученных весов пайплайна, сохранённых в формате .ckpt или .safetensors. По умолчанию пайплайн устанавливается в режим оценки (model.eval()).

Примеры:

>>> from diffusers import StableDiffusionPipeline

>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = StableDiffusionPipeline.from_single_file(
...     "https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors"
... )

>>> # Download pipeline from local file
>>> # file is downloaded under ./v1-5-pruned-emaonly.ckpt
>>> pipeline = StableDiffusionPipeline.from_single_file("./v1-5-pruned-emaonly.ckpt")

>>> # Enable float16 and move to GPU
>>> pipeline = StableDiffusionPipeline.from_single_file(
...     "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned-emaonly.ckpt",
...     torch_dtype=torch.float16,
... )
>>> pipeline.to("cuda")

load_lora_weights

< >

( pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor]adapter_name: str | None = Nonehotswap: bool = False**kwargs )

Параметры

  • pretrained_model_name_or_path_or_dict (str или os.PathLike или dict) — См. lora_state_dict().
  • adapter_name (str, необязательный) — Имя адаптера, используемое для ссылки на загруженную модель адаптера. Если не указано, будет использовано default_{i}, где i — общее количество загружаемых адаптеров.
  • low_cpu_mem_usage (bool, необязательный) — Ускоряет загрузку модели, загружая только предобученные веса LoRA и не инициализируя случайные веса.
  • hotswap (bool, необязательный) — По умолчанию False. Определяет, следует ли заменить существующий адаптер (LoRA) на новый загруженный адаптер на месте. Это означает, что вместо загрузки дополнительного адаптера будут взяты веса существующего адаптера и заменены весами нового адаптера. Это может быть быстрее и экономнее по памяти. Однако главное преимущество hotswap заключается в том, что при компиляции модели с помощью torch.compile загрузка нового адаптера не требует повторной компиляции модели. При использовании hotswap переданный adapter_name должен быть именем уже загруженного адаптера.

    Если у нового адаптера и старого адаптера разные ранги и/или значения 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

  • kwargs (dict, необязательный) — См. lora_state_dict().

Загрузите веса LoRA, указанные в pretrained_model_name_or_path_or_dict, в self.unet и self.text_encoder.

Все kwargs передаются в self.lora_state_dict.

См. lora_state_dict() для получения подробной информации о том, как загружается state dict.

Подробнее о том, как словарь состояния загружается в self.unet, см. load_lora_into_unet().

См. load_lora_into_text_encoder() для подробностей о том, как state dict загружается в self.text_encoder.

save_lora_weights

< >

( save_directory: str | os.PathLikeunet_lora_layers: dict[str, typing.Union[torch.nn.Module, torch.Tensor]] = Nonetext_encoder_lora_layers: dict[str, torch.nn.Module] = Noneis_main_process: bool = Trueweight_name: str = Nonesave_function: typing.Callable = Nonesafe_serialization: bool = Trueunet_lora_adapter_metadata = Nonetext_encoder_lora_adapter_metadata = None )

Параметры

  • save_directory (str or os.PathLike) — Каталог для сохранения параметров LoRA. Будет создан, если не существует.
  • unet_lora_layers (dict[str, torch.nn.Module] или dict[str, torch.Tensor]) — Состояние словаря (state dict) слоёв LoRA, соответствующих unet.
  • text_encoder_lora_layers (dict[str, torch.nn.Module] или dict[str, torch.Tensor]) — State dict слоёв LoRA, соответствующих text_encoder. Необходимо явно передать state dict слоёв LoRA текстового энкодера, так как он поступает из 🤗 Transformers.
  • is_main_process (bool, необязательный, по умолчанию True) — Указывает, является ли процесс, вызывающий эту функцию, основным. Полезно при распределенном обучении, когда необходимо вызвать эту функцию во всех процессах. В этом случае установите is_main_process=True только в основном процессе, чтобы избежать гонок.
  • save_function (Callable) — Функция, используемая для сохранения словаря состояния. Полезно при распределённом обучении, когда необходимо заменить torch.save на другой метод. Может быть настроена с помощью переменной окружения DIFFUSERS_SAVE_MODE.
  • safe_serialization (bool, необязательный, по умолчанию True) — Определяет, сохранять ли модель с помощью safetensors или традиционным способом PyTorch с использованием pickle.
  • unet_lora_adapter_metadata — метаданные адаптера LoRA, связанные с unet, которые будут сериализованы вместе со state dict.
  • text_encoder_lora_adapter_metadata — метаданные адаптера LoRA, связанные с текстовым энкодером, которые будут сериализованы вместе со словарем состояний.

Сохраните параметры LoRA, соответствующие UNet и текстовому энкодеру.

encode_prompt

< >

( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

Параметры

  • w (torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings).
  • embedding_dim (int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов.
  • dtype (torch.dtype, необязательный, по умолчанию torch.float32) — Тип данных для генерируемых эмбеддингов.

Возвращает

torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

StableDiffusionPipelineOutput

класс diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )

Параметры

  • images (list[PIL.Image.Image] или np.ndarray) — список денойзированных изображений PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).
  • nsfw_content_detected (list[bool]) — список, указывающий, содержит ли соответствующее сгенерированное изображение контент, непригодный для рабочего места (nsfw), или None, если проверка безопасности не могла быть выполнена.

Класс вывода для пайплайнов Stable Diffusion.

Update on GitHub