Diffusers documentation
Текст в изображение
Текст в изображение
Модель 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
< source >( 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. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- from_single_file() для загрузки файлов
.ckpt - load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( 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 (
strorlist[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
< source >( 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]Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.
enable_xformers_memory_efficient_attention
< source >( 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)Отключить энергоэффективное внимание из xFormers.
load_textual_inversion
< source >( 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.
- Сохранённый файл текстовой инверсии находится в формате 🤗 Diffusers, но был сохранён под конкретным именем весов, например
- 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
< source >( 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.
- Строка, repo id (например,
- 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
< source >( 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.
See load_lora_into_unet() for more details on how the state dict is
loaded into self.unet.
См. load_lora_into_text_encoder() для подробностей о том, как state dict загружается в self.text_encoder.
save_lora_weights
< source >( 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 (
stroros.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
< source >( 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 (
strorlist[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
< source >( 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).
StableDiffusionPipelineOutput
класс diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( 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.