Buckets:
| # Performances de base | |
| La diffusion est un processus aléatoire qui est coûteux en calculs. Il se peut que vous deviez exécuter le [DiffusionPipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/overview#diffusers.DiffusionPipeline) plusieurs fois avant d’obtenir la sortie souhaitée. C’est pourquoi il est important d’équilibrer soigneusement la vitesse de génération et l’utilisation de la mémoire afin d’itérer plus rapidement, | |
| Ce guide propose quelques conseils de performance de base pour l’utilisation de [DiffusionPipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/overview#diffusers.DiffusionPipeline). Consultez les sections de documentation sur l’optimisation de l’inférence, telles que [Accelerate inference](./optimization/fp16) ou [Reduce memory usage](./optimization/memory), pour des guides de performance plus détaillés. | |
| ## Utilisation de la mémoire | |
| Réduire la quantité de mémoire utilisée accélère indirectement la génération et peut aider un modèle à tenir sur l’appareil. | |
| La méthode [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/fr/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) déplace le modèle sur le CPU lorsqu'il n'est pas utilisé afin d'économiser la mémoire 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") | |
| ``` | |
| ## Vitesse d'inférence | |
| Le débruitage est l'étape la plus coûteuse en calcul lors de la diffusion. Les méthodes qui optimisent ce processus accélèrent la vitesse d'inférence. Essayez les méthodes suivantes pour gagner en rapidité. | |
| - Ajoutez `device_map="cuda"` pour placer le pipeline sur un GPU. Placer un modèle sur un accélérateur, comme un GPU, augmente la vitesse car il effectue les calculs en parallèle. | |
| - Définissez `dtype=torch.bfloat16` pour exécuter le pipeline en demi-précision. Réduire la précision du type de données augmente la vitesse, car les calculs en précision inférieure prennent moins de temps. | |
| ```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 | |
| ) | |
| ``` | |
| - Utilisez un planificateur plus rapide, tel que [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/fr/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler), qui ne nécessite que ~20-25 étapes. | |
| - Définissez `num_inference_steps` sur une valeur plus basse. Réduire le nombre d'étapes d'inférence diminue le nombre total de calculs. Toutefois, cela peut entraîner une baisse de la qualité de la génération. | |
| ```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") | |
| ``` | |
| ## Qualité de génération | |
| De nombreux modèles de diffusion modernes produisent des images de haute qualité dès leur utilisation initiale. Toutefois, vous pouvez encore améliorer la qualité de génération en essayant ce qui suit. | |
| - Essayez un prompt plus détaillé et descriptif. Incluez des détails tels que le support de l’image, le sujet, le style et l’esthétique. Un prompt négatif peut également aider à orienter le modèle loin des caractéristiques indésirables en utilisant des mots comme low quality ou 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] | |
| ``` | |
| Pour plus de détails sur la création de meilleurs prompts, consultez le document [Prompt techniques](./using-diffusers/weighted_prompts). | |
| - Essayez un autre planificateur, comme [HeunDiscreteScheduler](/docs/diffusers/v0.43.0/fr/api/schedulers/heun#diffusers.HeunDiscreteScheduler) ou [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/fr/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), qui sacrifie la vitesse de génération au profit de la qualité. | |
| ```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] | |
| ``` | |
| ## Étapes suivantes | |
| Diffusers propose des optimisations plus avancées et puissantes, telles que le [group-offloading](./optimization/memory#group-offloading) et la [compilation régionale](./optimization/fp16#regional-compilation). Pour en savoir plus sur la manière de maximiser les performances, consultez la section Optimisation de l'inférence. | |
Xet Storage Details
- Size:
- 6.34 kB
- Xet hash:
- 8b2cd2bc0cf27cb8c4747869bb0d3944c7b5e131d154beda7c281fcc004ad9ac
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.