Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /pt /stable_diffusion.md
mishig's picture
|
download
raw
6.1 kB
# Desempenho básico
A difusão é um processo aleatório que exige alto custo computacional. Você pode precisar executar o [DiffusionPipeline](/docs/diffusers/v0.43.0/pt/api/pipelines/overview#diffusers.DiffusionPipeline) várias vezes antes de obter a saída desejada. Por isso, é importante equilibrar cuidadosamente a velocidade de geração e o uso de memória para iterar mais rápido,
Este guia recomenda algumas dicas básicas de desempenho para o uso do [DiffusionPipeline](/docs/diffusers/v0.43.0/pt/api/pipelines/overview#diffusers.DiffusionPipeline). Consulte a documentação da seção de Otimização de Inferência, como [Aceleração de inferência](./optimization/fp16) ou [Redução do uso de memória](./optimization/memory), para guias de desempenho mais detalhados.
## Uso de memória
Reduzir a quantidade de memória usada acelera indiretamente a geração e pode ajudar um modelo a caber no dispositivo.
O método [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/pt/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) move o modelo para a CPU quando ele não está em uso, para economizar memória de 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")
```
## Velocidade de inferência
O desruidamento é o processo mais computacionalmente exigente durante a difusão. Métodos que otimizam esse processo aceleram a velocidade de inferência. Tente os seguintes métodos para ganhar velocidade.
- Adicione `device_map="cuda"` para colocar o pipeline em uma GPU. Colocar um modelo em um acelerador, como uma GPU, aumenta a velocidade porque ele executa os cálculos em paralelo.
- Defina `dtype=torch.bfloat16` para executar o pipeline em meia precisão. Reduzir a precisão do tipo de dados aumenta a velocidade, pois leva menos tempo para realizar cálculos em uma precisão menor.
```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
)
```
- Use um agendador mais rápido, como o [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/pt/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler), que requer apenas ~20-25 etapas.
- Defina `num_inference_steps` para um valor menor. Reduzir o número de etapas de inferência diminui o número total de computações. No entanto, isso pode resultar em uma qualidade de geração inferior.
```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")
```
## Qualidade da geração
Muitos modelos de difusão modernos entregam imagens de alta qualidade imediatamente. No entanto, você ainda pode melhorar a qualidade da geração tentando o seguinte.
- Tente um prompt mais detalhado e descritivo. Inclua detalhes como o meio da imagem, o sujeito, o estilo e a estética. Um prompt negativo também pode ajudar a orientar o modelo a se afastar de características indesejadas, usando palavras como baixa qualidade ou desfocado.
```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]
```
Para mais detalhes sobre a criação de prompts melhores, consulte o documento [Técnicas de prompt](./using-diffusers/weighted_prompts).
- Experimente um agendador diferente, como [HeunDiscreteScheduler](/docs/diffusers/v0.43.0/pt/api/schedulers/heun#diffusers.HeunDiscreteScheduler) ou [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/pt/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), que sacrifica a velocidade de geração em favor da qualidade.
```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]
```
## Próximas etapas
Diffusers oferece otimizações mais avançadas e poderosas, como [group-offloading](./optimization/memory#group-offloading) e [compilação regional](./optimization/fp16#regional-compilation). Para saber mais sobre como maximizar o desempenho, consulte a seção de Otimização de Inferência.

Xet Storage Details

Size:
6.1 kB
·
Xet hash:
734b83e4f967135c6bee9dbf00aee3f8a231c5439b8a877297501548ad825cb9

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