Buckets:

mishig's picture
|
download
raw
33.2 kB
# Изображение в изображение
Image-to-image is similar to [text-to-image](conditional_image_generation), but in addition to a prompt, you can also pass an initial image as a starting point for the diffusion process. The initial image is encoded to latent space and noise is added to it. Then the latent diffusion model takes a prompt and the noisy latent image, predicts the added noise, and removes the predicted noise from the initial latent image to get the new latent image. Lastly, a decoder decodes the new latent image back into an image.
С 🤗 Diffusers это так же просто, как 1-2-3:
1. Загрузите контрольную точку в класс [AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image); этот конвейер автоматически загружает правильный класс конвейера на основе контрольной точки:
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image, make_image_grid
pipeline = AutoPipelineForImage2Image.from_pretrained(
"kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
```
> [!TIP]
> В ходе выполнения руководства вы заметите, что мы используем [enable_model_cpu_offload()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) и [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention), чтобы экономить память и увеличивать скорость инференса. Если вы используете PyTorch 2.0, то вам не нужно вызывать [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention) для вашего пайплайна, так как он уже использует нативное [scaled-dot product attention](../optimization/fp16#scaled-dot-product-attention) из PyTorch 2.0.
2. Загрузите изображение для передачи в конвейер:
```py
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
```
3. Передайте промпт и изображение в пайплайн, чтобы сгенерировать изображение:
```py
prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"
image = pipeline(prompt, image=init_image).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
изображение по умолчанию
сгенерированное изображение
## Популярные модели
Самыми популярными моделями для генерации изображений по изображению являются [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion XL (SDXL)](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) и [Kandinsky 2.2](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder). Результаты, получаемые моделями Stable Diffusion и Kandinsky, различаются из-за особенностей их архитектуры и процесса обучения; как правило, можно ожидать, что SDXL будет создавать изображения более высокого качества, чем Stable Diffusion v1.5. Давайте кратко рассмотрим, как использовать каждую из этих моделей, и сравним их результаты.
### Stable Diffusion v1.5
Stable Diffusion v1.5 — это модель латентной диффузии, инициализированная из более раннего контрольного файла и дополнительно дообученная в течение 595K шагов на изображениях 512x512. Чтобы использовать этот конвейер для задачи image-to-image, вам необходимо подготовить исходное изображение для передачи в конвейер. Затем вы можете передать в конвейер промпт и изображение, чтобы сгенерировать новое изображение:
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
изображение по умолчанию
сгенерированное изображение
### Stable Diffusion XL (SDXL)
SDXL — это более мощная версия модели Stable Diffusion. Она использует более крупную базовую модель и дополнительную модель-рефинер для повышения качества вывода базовой модели. Ознакомьтесь с руководством [SDXL](../api/pipelines/stable_diffusion/stable_diffusion_xl), чтобы получить более подробное описание того, как использовать эту модель, а также другие методы, которые она применяет для создания изображений высокого качества.
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-sdxl-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image, strength=0.5).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
изображение по умолчанию
сгенерированное изображение
### Kandinsky 2.2
Модель Kandinsky отличается от моделей Stable Diffusion тем, что использует модель-приор изображения для создания эмбеддингов изображений. Эмбеддинги помогают обеспечить более точное согласование текста и изображений, что позволяет латентной диффузионной модели генерировать изображения более высокого качества.
Самый простой способ использования Kandinsky 2.2:
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
изображение по умолчанию
сгенерированное изображение
## Настройка параметров конвейера
В пайплайне есть несколько важных параметров, которые можно настроить и которые влияют на процесс генерации изображений и их качество. Давайте подробнее рассмотрим, что делают эти параметры и как их изменение влияет на результат.
### Сила
`strength` — один из важнейших параметров, который оказывает огромное влияние на сгенерированное изображение. Он определяет, насколько сгенерированное изображение похоже на исходное. Иными словами:
- 📈 более высокое значение `strength` даёт модели больше «свободы» для генерации изображения, отличающегося от исходного; значение `strength` 1.0 означает, что исходное изображение в значительной степени игнорируется
- 📉 чем ниже значение `strength`, тем больше сгенерированное изображение похоже на исходное
Параметры `strength` и `num_inference_steps` связаны, поскольку `strength` определяет количество шагов добавления шума. Например, если `num_inference_steps` равно 50, а `strength` — 0.8, это означает, что к исходному изображению добавляется 40 (50 * 0.8) шагов шума, после чего выполняется 40 шагов шумоподавления для получения нового изображения.
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image, strength=0.8).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
strength = 0.4
strength = 0.6
strength = 1.0
### Масштаб направляющего сигнала
Параметр `guidance_scale` используется для управления степенью соответствия сгенерированного изображения текстовому промпту. Чем выше значение `guidance_scale`, тем точнее изображение соответствует промпту, а чем ниже значение `guidance_scale`, тем больше у изображения свободы отклоняться от промпта.
Вы можете сочетать `guidance_scale` с `strength` для ещё более точного контроля над выразительностью модели. Например, используйте высокое значение `strength + guidance_scale` для максимальной креативности или комбинацию низких значений `strength` и `guidance_scale`, чтобы сгенерировать изображение, похожее на исходное, но не столь строго привязанное к промпту.
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image, guidance_scale=8.0).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
guidance_scale = 0.1
guidance_scale = 5.0
guidance_scale = 10.0
### Негативный промпт
Отрицательный промпт указывает модели *не* включать в изображение определённые элементы и может использоваться для улучшения качества изображения или его модификации. Например, вы можете повысить качество изображения, добавив в отрицательный промпт такие фразы, как «poor details» или «blurry», чтобы побудить модель сгенерировать изображение более высокого качества. Либо вы можете модифицировать изображение, указав элементы, которые следует исключить из него.
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy"
# pass prompt and image to pipeline
image = pipeline(prompt, negative_prompt=negative_prompt, image=init_image).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy"
negative_prompt = "jungle"
## Цепочки пайплайнов «изображение в изображение»
Существуют и другие интересные способы использования конвейера image-to-image, помимо простой генерации изображения (хотя и это довольно круто). Вы можете пойти дальше и объединить его с другими конвейерами.
### Текст-в-изображение-в-изображение
Chaining a text-to-image and image-to-image pipeline allows you to generate an image from text and use the generated image as the initial image for the image-to-image pipeline. This is useful if you want to generate an image entirely from scratch. For example, let's chain a Stable Diffusion and a Kandinsky model.
Начните с генерации изображения с помощью конвейера text-to-image:
```py
from diffusers import AutoPipelineForText2Image, AutoPipelineForImage2Image
import torch
from diffusers.utils import make_image_grid
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
text2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k").images[0]
text2image
```
Теперь вы можете передать это сгенерированное изображение в пайплайн image-to-image:
```py
pipeline = AutoPipelineForImage2Image.from_pretrained(
"kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
image2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", image=text2image).images[0]
make_image_grid([text2image, image2image], rows=1, cols=2)
```
### Изображение-в-изображение-в-изображение
Вы также можете объединять несколько image-to-image конвейеров в цепочку, чтобы создавать более интересные изображения. Это полезно для итеративного применения стилевой трансформации к изображению, генерации коротких GIF-анимаций, восстановления цвета на изображении или восстановления отсутствующих областей изображения.
Начните с генерации изображения:
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image, output_type="latent").images[0]
```
> [!TIP]
> Важно указать `output_type="latent"` в конвейере, чтобы все выходные данные оставались в латентном пространстве и избежать ненужного шага декодирования-кодирования. Это работает только в том случае, если связанные конвейеры используют одну и ту же VAE.
Передайте латентный вывод из этого конвейера в следующий конвейер, чтобы сгенерировать изображение в [стиле комиксов](https://huggingface.co/ogkalu/Comic-Diffusion):
```py
pipeline = AutoPipelineForImage2Image.from_pretrained(
"ogkalu/Comic-Diffusion", dtype=torch.float16
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# need to include the token "charliebo artstyle" in the prompt to use this checkpoint
image = pipeline("Astronaut in a jungle, charliebo artstyle", image=image, output_type="latent").images[0]
```
Повторите ещё раз, чтобы сгенерировать финальное изображение в [стиле пиксель-арт](https://huggingface.co/kohbanye/pixel-art-style):
```py
pipeline = AutoPipelineForImage2Image.from_pretrained(
"kohbanye/pixel-art-style", dtype=torch.float16
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# need to include the token "pixelartstyle" in the prompt to use this checkpoint
image = pipeline("Astronaut in a jungle, pixelartstyle", image=image).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```
### Изображение в апскейлер в супер-разрешение
Ещё один способ связать ваш image-to-image pipeline — использовать upscaler и super-resolution pipeline, чтобы значительно повысить уровень детализации изображения.
Начните с пайплайна image-to-image:
```py
import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# pass prompt and image to pipeline
image_1 = pipeline(prompt, image=init_image, output_type="latent").images[0]
```
> [!TIP]
> Важно указать `output_type="latent"` в конвейере, чтобы все выходные данные оставались в *латентном* пространстве и избежать лишнего шага декодирования-кодирования. Это работает только в том случае, если связанные конвейеры используют одну и ту же VAE.
Подключите его к конвейеру апскейлера, чтобы повысить разрешение изображения:
```py
from diffusers import StableDiffusionLatentUpscalePipeline
upscaler = StableDiffusionLatentUpscalePipeline.from_pretrained(
"stabilityai/sd-x2-latent-upscaler", dtype=torch.float16, use_safetensors=True
)
upscaler.enable_model_cpu_offload()
upscaler.enable_xformers_memory_efficient_attention()
image_2 = upscaler(prompt, image=image_1).images[0]
```
Наконец, объедините его с конвейером супер-разрешения, чтобы дополнительно повысить разрешение:
```py
from diffusers import StableDiffusionUpscalePipeline
super_res = StableDiffusionUpscalePipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", dtype=torch.float16, variant="fp16", use_safetensors=True
)
super_res.enable_model_cpu_offload()
super_res.enable_xformers_memory_efficient_attention()
image_3 = super_res(prompt, image=image_2).images[0]
make_image_grid([init_image, image_3.resize((512, 512))], rows=1, cols=2)
```
## Управление генерацией изображений
Попытка сгенерировать изображение, которое выглядит именно так, как вы хотите, может оказаться сложной задачей, поэтому методы и модели контролируемой генерации так полезны. Хотя с помощью `negative_prompt` можно частично управлять генерацией изображений, существуют более надёжные методы, такие как взвешивание промптов и ControlNets.
### Взвешивание промптов
Взвешивание промпта позволяет масштабировать представление каждого концепта в промпте. Например, в промпте вида "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" вы можете увеличить или уменьшить эмбеддинги слов "astronaut" и "jungle". Библиотека [Compel](https://github.com/damian0815/compel) предоставляет простой синтаксис для настройки весов промпта и генерации эмбеддингов. О том, как создать эмбеддинги, вы можете узнать в руководстве [Взвешивание промпта](weighted_prompts).
[AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image) имеет параметр `prompt_embeds` (а также `negative_prompt_embeds`, если вы используете негативный промпт), в который можно передать эмбеддинги, заменяющие параметр `prompt`.
```py
from diffusers import AutoPipelineForImage2Image
import torch
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
image = pipeline(prompt_embeds=prompt_embeds, # generated from Compel
negative_prompt_embeds=negative_prompt_embeds, # generated from Compel
image=init_image,
).images[0]
```
### ControlNet
ControlNets обеспечивают более гибкий и точный способ управления генерацией изображений, поскольку для этого можно использовать дополнительное изображение-условие. В качестве изображения-условия может выступать canny-изображение, карта глубины, результат сегментации изображения и даже наброски! Какой бы тип изображения-условия вы ни выбрали, ControlNet сгенерирует изображение, сохраняющее содержащуюся в нём информацию.
Например, давайте зададим условие для изображения с помощью карты глубины, чтобы сохранить пространственную информацию в изображении.
```py
from diffusers.utils import load_image, make_image_grid
# prepare image
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png"
init_image = load_image(url)
init_image = init_image.resize((958, 960)) # resize to depth image dimensions
depth_image = load_image("https://huggingface.co/lllyasviel/control_v11f1p_sd15_depth/resolve/main/images/control.png")
make_image_grid([init_image, depth_image], rows=1, cols=2)
```
Загрузите модель ControlNet, использующую карты глубины в качестве условия, и [AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image):
```py
from diffusers import ControlNetModel, AutoPipelineForImage2Image
import torch
controlnet = ControlNetModel.from_pretrained("lllyasviel/control_v11f1p_sd15_depth", dtype=torch.float16, variant="fp16", use_safetensors=True)
pipeline = AutoPipelineForImage2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
```
Теперь сгенерируйте новое изображение, используя в качестве условий карту глубины, исходное изображение и промпт:
```py
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image_control_net = pipeline(prompt, image=init_image, control_image=depth_image).images[0]
make_image_grid([init_image, depth_image, image_control_net], rows=1, cols=3)
```
изображение по умолчанию
изображение глубины
Изображение ControlNet
Применим новый [стиль](https://huggingface.co/nitrosocke/elden-ring-diffusion) к изображению, сгенерированному с помощью ControlNet, объединив его с пайплайном image-to-image:
```py
pipeline = AutoPipelineForImage2Image.from_pretrained(
"nitrosocke/elden-ring-diffusion", dtype=torch.float16,
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()
prompt = "elden ring style astronaut in a jungle" # include the token "elden ring style" in the prompt
negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy"
image_elden_ring = pipeline(prompt, negative_prompt=negative_prompt, image=image_control_net, strength=0.45, guidance_scale=10.5).images[0]
make_image_grid([init_image, depth_image, image_control_net, image_elden_ring], rows=2, cols=2)
```
## Оптимизация
Запуск диффузионных моделей требует значительных вычислительных ресурсов, но с помощью нескольких оптимизационных приёмов их вполне можно запускать на потребительских и бесплатных GPU. Например, вы можете использовать более эффективную по памяти форму внимания, такую как [scaled-dot product attention](../optimization/fp16#scaled-dot-product-attention) из PyTorch 2.0 или [xFormers](../optimization/attention_backends) (можно использовать один из них, но нет необходимости применять оба). Также можно выгружать модель на GPU, пока остальные компоненты пайплайна ожидают на CPU.
```diff
+ pipeline.enable_model_cpu_offload()
+ pipeline.enable_xformers_memory_efficient_attention()
```
С помощью [`torch.compile`](../optimization/fp16#torchcompile) вы можете ещё больше ускорить инференс, обернув ваш UNet этим инструментом:
```py
pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True)
```
Чтобы узнать больше, ознакомьтесь с разделом [Оптимизация и масштабирование](../optimization/overview#optimization-techniques).

Xet Storage Details

Size:
33.2 kB
·
Xet hash:
2e0c40fe880ac00d3bb323857e9af7be8bf7b21ab2697f00403b91cc821b646d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.