Buckets:

hf-doc-build/doc / diffusers /main /tr /stable_diffusion.md
mishig's picture
|
download
raw
6.19 kB

Temel performans

Diffusion, hesaplama açısından yoğun bir rastgele süreçtir. İstenen çıktıyı elde etmeden önce DiffusionPipeline'i birkaç kez çalıştırmanız gerekebilir. Bu nedenle daha hızlı iterasyon yapabilmek için üretim hızını ve bellek kullanımını dikkatli bir şekilde dengelemek önemlidir,

Bu kılavuz, DiffusionPipeline kullanımı için bazı temel performans ipuçları önerir. Daha ayrıntılı performans kılavuzları için Accelerate inference veya Reduce memory usage gibi Çıkarım Optimizasyonu bölümü belgelerine başvurun.

Bellek kullanımı

Kullanılan bellek miktarının azaltılması, dolaylı olarak üretimi hızlandırır ve bir modelin cihazda sığmasına yardımcı olabilir.

enable_model_cpu_offload() yöntemi, GPU belleği tasarruf etmek için model kullanılmadığında onu CPU'ya taşır.

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")

Çıkarım hızı

Gürültü azaltma, difüzyon sırasında en fazla hesaplama gücü gerektiren süreçtir. Bu süreci optimize eden yöntemler, çıkarım hızını artırır. Hızlanma için aşağıdaki yöntemleri deneyin.

  • Hattın bir GPU üzerine yerleştirilmesi için device_map="cuda" ekleyin. Bir modelin GPU gibi bir hızlandırıcı üzerine yerleştirilmesi, hesaplamaları paralel olarak gerçekleştirdiği için hızı artırır.
  • Yarım hassasiyette çalıştırmak için dtype=torch.bfloat16 değerini ayarlayın. Veri türü hassasiyetini azaltmak, daha düşük hassasiyette hesaplamaların daha kısa sürede yapılabilmesi nedeniyle hızı artırır.
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 gibi yalnızca ~20-25 adım gerektiren daha hızlı bir zamanlayıcı kullanın.
  • num_inference_steps değerini daha düşük bir değere ayarlayın. Çıkarım adım sayısını azaltmak, genel hesaplama sayısını azaltır. Ancak bu, daha düşük üretim kalitesine yol açabilir.
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")

Üretim kalitesi

Birçok modern difüzyon modeli, kutudan çıktığı gibi yüksek kaliteli görüntüler sunar. Ancak, aşağıdakileri deneyerek üretim kalitesini hâlâ iyileştirebilirsiniz.

  • Daha ayrıntılı ve betimleyici bir istem (prompt) deneyin. Görsel ortamı, konuyu, stili ve estetiği gibi ayrıntıları dahil edin. Düşük kalite veya bulanık gibi kelimeler kullanarak modeli istenmeyen özelliklerden uzaklaştırmak için negatif bir istem de yardımcı olabilir.

    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]
    

    Daha iyi istemler oluşturmaya ilişkin ayrıntılar için Prompt techniques belgesine göz atın.

  • Üretim hızından ödün vererek kaliteyi artıran HeunDiscreteScheduler veya LMSDiscreteScheduler gibi farklı bir zamanlayıcı deneyin.

    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]
    

Sonraki adımlar

Diffusers, group-offloading ve regional compilation gibi daha gelişmiş ve güçlü optimizasyonlar sunar. Performansı nasıl en üst düzeye çıkaracağınızı öğrenmek için Inference Optimization bölümüne göz atın.

Xet Storage Details

Size:
6.19 kB
·
Xet hash:
1672d98be2489b44cdf1c91769541423dd9d4667a9e24bb73362b7338ffadadb

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