Buckets:
| # 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.