Buckets:
| # Базовая производительность | |
| Диффузия — это стохастический процесс, требующий значительных вычислительных ресурсов. Возможно, вам придётся запустить [DiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline) несколько раз, прежде чем получить желаемый результат. Именно поэтому важно тщательно балансировать между скоростью генерации и использованием памяти, чтобы ускорить итерации, | |
| В этом руководстве приведены основные рекомендации по оптимизации производительности при использовании [DiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline). Более подробные руководства по оптимизации производительности см. в разделе документации «Оптимизация инференса», например [Accelerate inference](./optimization/fp16) или [Reduce memory usage](./optimization/memory). | |
| ## Использование памяти | |
| Сокращение объёма используемой памяти косвенно ускоряет генерацию и позволяет разместить модель на устройстве. | |
| Метод [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) перемещает модель на CPU, когда она не используется, чтобы сэкономить память GPU. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| pipeline(prompt).images[0] | |
| print(f"Max memory reserved: {torch.cuda.max_memory_allocated() / 1024**3:.2f} GB") | |
| ``` | |
| ## Скорость инференса | |
| Денойзинг — это наиболее вычислительно затратный процесс в диффузии. Методы, оптимизирующие этот процесс, ускоряют инференс. Попробуйте следующие методы для ускорения. | |
| - Добавьте `device_map="cuda"`, чтобы разместить пайплайн на GPU. Размещение модели на ускорителе, например на GPU, повышает скорость, поскольку вычисления выполняются параллельно. | |
| - Установите `dtype=torch.bfloat16`, чтобы выполнить конвейер в половинной точности. Снижение точности типа данных повышает скорость, так как вычисления в меньшей точности занимают меньше времени. | |
| ```py | |
| import torch | |
| import time | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda | |
| ) | |
| ``` | |
| - Используйте более быстрый планировщик, например [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler), которому требуется всего ~20-25 шагов. | |
| - Установите `num_inference_steps` в меньшее значение. Уменьшение количества шагов инференса снижает общее число вычислений. Однако это может привести к ухудшению качества генерации. | |
| ```py | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| start_time = time.perf_counter() | |
| image = pipeline(prompt).images[0] | |
| end_time = time.perf_counter() | |
| print(f"Image generation took {end_time - start_time:.3f} seconds") | |
| ``` | |
| ## Качество генерации | |
| Многие современные диффузионные модели обеспечивают высокое качество изображений «из коробки». Тем не менее, вы можете进一步提升 качество генерации, попробовав следующее. | |
| - Попробуйте более подробный и описательный промпт. Включите такие детали, как тип изображения, объект, стиль и эстетика. Также может помочь негативный промпт, который направляет модель в сторону от нежелательных характеристик с помощью слов, таких как low quality или blurry. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| Для получения подробной информации о создании более эффективных промптов ознакомьтесь с документацией [Prompt techniques](./using-diffusers/weighted_prompts). | |
| - Попробуйте другой планировщик, например [HeunDiscreteScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/heun#diffusers.HeunDiscreteScheduler) или [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), который жертвует скоростью генерации ради качества. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, HeunDiscreteScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| dtype=torch.bfloat16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline.scheduler = HeunDiscreteScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| ## Дальнейшие шаги | |
| Diffusers предлагает более продвинутые и мощные оптимизации, такие как [group-offloading](./optimization/memory#group-offloading) и [regional compilation](./optimization/fp16#regional-compilation). Чтобы узнать, как максимально повысить производительность, обратитесь к разделу Inference Optimization. | |
Xet Storage Details
- Size:
- 8.07 kB
- Xet hash:
- b185a93b679611662f2f86c132bcb0ae4272c69c9a6bc4d4649fb83ce9568e9e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.