1 puan yazan GN⁺ 2023-12-25 | 1 yorum | WhatsApp'ta paylaş
  • StreamDiffusion, difüzyon tabanlı görüntü üretimini gerçek zamanlı etkileşimli üretime uygun şekilde iyileştiren bir pipeline olup, mevcut difüzyon görüntü üretim tekniklerinin performansını artırmayı hedefler
  • Temel özellikleri Stream Batch, Residual Classifier-Free Guidance, Stochastic Similarity Filter, IO Queues, KV-cache ön hesaplama ve model hızlandırma araçlarından oluşur
  • RTX 4090, Core i9-13900K, Ubuntu 22.04.3 LTS ortamında SD-turbo, 1 denoising step bazında Txt2Img 106.16fps, Img2Img 93.897fps kaydetti
  • Gerçek zamanlı demolar demo/realtime-txt2img ve demo/realtime-img2img altında yer alır; Img2Img demosu web tarayıcısında canlı web kamerası akışı veya ekran yakalama kullanır
  • Diffusers’ın StableDiffusionPipeline’ını sarmalayarak kullanılır; LCM-LoRA birleştirme, Tiny VAE, xformers ve TensorRT hızlandırmasıyla daha hızlı çalışacak şekilde yapılandırılabilir

StreamDiffusion’ın amacı ve performansı

  • StreamDiffusion, gerçek zamanlı etkileşimli üretim için bir difüzyon pipeline’ıdır
  • Mevcut difüzyon tabanlı görüntü üretim teknikleri için performans artışı sağlamayı hedefler
  • Makale arXiv 2312.12491 ve Hugging Face Papers üzerinde bağlantılıdır
  • Önerilen pipeline ile görüntü üretimine ilişkin performans ölçüm ortamı şöyledir
    • GPU: RTX 4090
    • CPU: Core i9-13900K
    • OS: Ubuntu 22.04.3 LTS
  • Performans tablosu
    • SD-turbo: denoising step 1, Txt2Img 106.16fps, Img2Img 93.897fps
    • LCM-LoRA + KohakuV2: denoising step 4, Txt2Img 38.023fps, Img2Img 37.133fps

Temel özellikler

  • Stream Batch

    • Verimli batch işlemleriyle veri işlemeyi sadeleştirir
  • Residual Classifier-Free Guidance

    • Hesaplama tekrarını azaltan iyileştirilmiş bir guidance mekanizmasıdır
  • Stochastic Similarity Filter

    • Gelişmiş bir filtreleme tekniğiyle GPU kullanım verimliliğini artırır
  • IO Queues

    • Girdi ve çıktı işlemlerini verimli biçimde yöneterek daha akıcı çalışmaya yardımcı olan bir özelliktir
  • Pre-Computation for KV-Caches

    • Caching stratejisini optimize ederek işlem hızını artırır
  • Model Acceleration Tools

    • Model optimizasyonu ve performans artışı için çeşitli araçlar kullanır

Kurulum ve çalıştırma biçimi

  • StreamDiffusion pip, conda ve Docker ile kurulabilir
  • Önerilen Python ortamı örneği python=3.10 tabanlı bir conda ortamı veya venvdir
  • PyTorch kurulum örnekleri CUDA 11.8 ve CUDA 12.1’i ayırır
    • CUDA 11.8: torch==2.1.0, torchvision==0.16.0, xformers
    • CUDA 12.1: torch==2.1.0, torchvision==0.16.0, xformers
  • Kullanıcı kurulumu
  • Windows’ta kararlı sürüm kurulduysa ayrıca pywin32 kurulması gerekebilir
  • Docker kurulumu TensorRT hazırlanmış ortamı hedefler; docker build sonrasında --gpus all seçeneğiyle çalıştırılır

Demolar ve kullanım örnekleri

  • Örnekler examples dizininden çalıştırılabilir
  • Gerçek zamanlı Txt2Img demosu demo/realtime-txt2img dizinindedir
  • Gerçek zamanlı Img2Img demosu demo/realtime-img2img dizinindedir
    • Web tarayıcısında canlı web kamerası akışı veya ekran yakalama kullanılabilir
  • Temel kullanım akışı, Diffusers’ın StableDiffusionPipeline’ını yükledikten sonra StreamDiffusion ile sarmalama biçimindedir
  • Img2Img örneği KBlueLeaf/kohaku-v2.1 modelini yükler ve t_index_list=[32, 45] ile stream’i yapılandırır
    • Model LCM değilse load_lcm_lora() ve fuse_lora() kullanılır
    • Ek hızlandırma için madebyollin/taesd içindeki Tiny VAE kullanılır
    • enable_xformers_memory_efficient_attention() ile xformers bellek açısından verimli attention etkinleştirilir
  • Txt2Img örneği t_index_list=[0, 16, 32, 45] kullanır; text-to-image için cfg_type="none" kullanılması önerilir
  • Warm-up sayısı len(t_index_list) x frame_buffer_size değerinden az olmamalıdır

TensorRT hızlandırması

  • Daha hızlı üretim için xformers etkinleştirme kodu TensorRT hızlandırma koduyla değiştirilebilir
  • streamdiffusion.acceleration.tensorrt içindeki accelerate_with_tensorrt kullanılır
  • Örnek yapılandırma stream, "engines", max_batch_size=2 iletilmesini içerir
  • TensorRT uzantısı gerekir ve engine build işlemi zaman alır
  • Engine build sonrasında önceki örneklerden daha hızlı çalışır

Stochastic Similarity Filter

  • Stochastic Similarity Filter, video girdisinde önceki kareye göre değişim az olduğunda dönüştürme işini azaltır
  • Dönüştürme işini azaltarak GPU işlem yükünü hafifletir
  • Kullanım biçimi stream.enable_similar_image_filter() çağrısı şeklindedir
  • Ayarlanabilir argümanlar
    • similar_image_filter_threshold: İşlemeyi geçici olarak durdurmadan önce, önceki kare ile mevcut kare arasındaki benzerlik eşiği
    • similar_image_filter_max_skip_frame: Dönüştürmeyi yeniden başlatmadan önce geçici duraklatma sırasında izin verilen maksimum aralık

Residual CFG

  • RCFG, CFG kullanılmayan durumla rekabet edebilecek hesaplama karmaşıklığıyla CFG’yi yaklaşık olarak uygulayan bir yöntemdir
  • StreamDiffusion içindeki cfg_type argümanıyla belirtilebilir
  • RCFG’nin iki türü vardır
    • RCFG Self-Negative: negative prompt belirtilen öğenin olmadığı yöntem
    • RCFG Onetime-Negative: negative prompt belirtilebilen yöntem
  • Hesaplama karmaşıklığı karşılaştırması
    • CFG yok: N
    • Normal CFG: 2N
    • RCFG Self-Negative: N
    • RCFG Onetime-Negative: N+1
  • cfg_type değerleri şöyledir
    • CFG yok: "none"
    • Normal CFG: "full"
    • RCFG Self-Negative: "self"
    • RCFG Onetime-Negative: "initialize"
  • delta, RCFG etkisini ayarlayan bir yumuşatma etkisine sahiptir

Kullanılan modeller ve kaynaklar

1 yorum

 
GN⁺ 2023-12-25
Hacker News yorumları
  • Arxiv makalesi burada: https://arxiv.org/abs/2312.12491
    4090 baz alındığında temel ölçümlerden daha hızlı hâle getirilebilir gibi görünüyor. SDXL Turbo’yu tek yinelemeyle, optimizasyon yapmadan bile 10 fps’ye kadar çıkardım.
    Ancak gereksiz üretimi engelleyen olasılıksal benzerlik filtresi gibi iyileştirmeler, GPU’yu sürekli %100’e sabitlemeden hızlı sonuç almak için iyi görünüyor.

  • Gerçek dışı denecek kadar hızlı. 1 yıl içinde 10 yıl geçmiş gibi hissettiriyor.

    • Bu benim işimi yapabilir hâle geldiğinde, PC’de çalıştırıp Slack’e bağlayabilmeyi bekliyorum. Böylece işverenim, elle yaptığım zamankine benzer sonuçlar alır; ben de gerçekten çalışmaya zaman harcamadan maaşımı alır ve nihayet hobilerime odaklanabilirim. Sonunda her şey böyle bir yere gitmiyor mu?
    • Şu an açık kaynak AI ekosisteminin tamamı böyle hissettiriyor. Neredeyse her gün, imkânsız sanılan bir şeyi mümkün kılan yeni bir ilerleme çıkıyor ve değişimleri takip etmek gerçekten zor.
    • Bir frontend geliştiricisi olarak, frontend dünyasının takip edilemeyecek kadar hızlı değiştiğinden şikâyet edenleri artık anlıyorum.
    • Bu yazılımlar, benim apt-get install yapma hızından daha hızlı gelişiyor.
    • Incremental oyunları (https://www.reddit.com/r/incremental_games/) hatırlatıyor. Ama bu tür oyunlara başlamamak daha iyi; tatilinizi mahvedebilir.
  • realtime-text2img demosunu az önce denedim; frontend’de npm kullanmak bu iş için biraz fazla kaçmış gibi. 16 görüntü yerine yalnızca 1 görüntü üretecek şekilde değiştirdim ve RTX-3080 dizüstünde de iyi çalışıyor. Muhtemelen saniyede yaklaşık 2 görüntü veriyor.
    Düzenleme: examples\screen demosu neredeyse gerçek zamanlı gibi hissettiriyor. Pencerede 4 fps yazıyor ama tam olarak ne anlama geldiğini bilmiyorum.
    Düzenleme: Ancak img2img’in gürültü giderme şiddeti çok düşük, bu yüzden dönen görüntü özgün görüntüden yalnızca çok az farklı.

    • Gerçek kalite, çeşitlilik ve prompt uyumu nasıl merak ediyorum. Birkaç gündür GPU kullanamadığım için kendim kontrol edemiyorum.
      Üretken model makalelerini, kendiniz çalıştırmadan değerlendirmek her zaman zor. Çünkü hakemlere göstermek zorunda olduklarından seçilmiş sonuçlar koymaktan başka çareleri olmuyor. Bunun iyi olduğunu düşünmüyorum ama mevcut gerçeklik böyle.
      Burada küçük bir otomatik kodlayıcı mı kullanılıyor? Artspew de öyle yapmış ve daha yüksek FPS almıştı; ama TensorRT kullanmamış, Triton kullanmıştı ve kalite berbattı. Yine de havalıydı.
      Her hâlükârda kalite gösterilenden çok daha düşük olsa bile etkileyici; ama gerçekte bilmek zor.
  • 100 fps denmesi, her 10 ms’de yeni bir girdi verip her 10 ms’de yeni bir çıktı alabileceğimiz anlamına mı geliyor merak ediyorum. Yoksa ortalama throughput elde etmek için girdileri birleştirip batch olarak mı işlemek gerekiyor?

    • Kendim denemedim ama tahminimce batch işleme gerekmez.
      Modelde yavaş olan kısım modeli yükleme aşaması. Model bir kez belleğe alındıktan sonra istediğiniz girdiyi gönderebilirsiniz.
      Görüntü verisini parse edip gönderme sürecinin burada darboğaz olacağını sanmıyorum.
  • Neredeyse dokümantasyonda yazdığı gibi doğrudan çalıştı. Bu tür demoların çoğu patlayıp tuhaf, derin hatalar verir; bunda sorun yoktu.
    İyi yapılmış. Denemeye değer. Anime tarzı olmayan şeyler üretmek istiyorsanız realtime-txt2img içindeki server.py dosyasında modeli değiştirmeniz yeterli. Örneğin https://huggingface.co/runwayml/stable-diffusion-v1-5 olarak ayarlasanız da iyi çalışıyor.
    Sonuçlar gerçekten hızlı. Harika değil ama hızlı. LCM-LoRA üzerinden SDXL’e geçerseniz https://huggingface.co/latent-consistency daha iyi sonuçlar çıkabilir; ama o noktadan itibaren işler zorlaşıyor ve az önce bahsettiğim muammalı çökmelerle karşılaşmaya başlıyorsunuz. Gerçek çalışma gerektiren yer de burası.
    Benim ortamım 4090/3990x/CUDA 12.2/debian sid; ortama göre değişebilir.

  • Kadın karakterin kadraja girip çıktığı demo nasıl çalışıyor? ControlNet mi?

    • Video girdisi. Yazıya göre olasılıksal benzerlik filtresi, video girdisinde önceki kareye göre değişim az olduğunda dönüşüm işini azaltarak GPU işleme yükünü düşürüyor. Yukarıdaki GIF’teki kırmızı kare bunun örneği.
    • Şu anda ControlNet desteği eklemek için açık bir GitHub issue’su var; bu yüzden ControlNet değil gibi. Sadece prompt ve rcfg ölçeği kullanan img2img gibi görünüyor.
    • O hâlde soldaki özgün görüntü, sağdaki de sonuç görüntüsü mü demek?
  • Apple Silicon’da fps ne civarda?

    • MPS desteği olmadığı için 0.
      Bununla birlikte, şu an aynı fiyat bandında, yenilenmiş ürün bazında yaklaşık 1.800 dolara, M1 Max 64GB Studio; SD1.5 ve SDXL üretken AI’da RTX 4090 24GB’den yaklaşık 13 kat daha yavaş.
    • M1 Pro ve 32 GB RAM’de DrawThings ile SDXL Turbo çalıştırıyorum.
      512x512, 5 adımlı görüntü 5 saniyede üretiliyor. Refiner, upscaler ve yüz restorasyonu kullanmıyorum.
      Bildiğim kadarıyla DrawThings henüz SDXL Turbo’ya veya pipeline üretimine optimize edilmiş değil.
      Referans olarak, SDXL Base+Refiner’da yüz restorasyonunu açıp 2k x 2k, 50 adımlı görüntü üretirsem yaklaşık 120 saniye sürüyor.
    • En azından 1/8 civarında olur gibi geliyor; ama Apple’da en az 24 fps çalışırsa muazzam olur. Bir miktar interpolasyon kullanılırsa mümkün olabilir.
      Özellikle anime tarzındaysa, temelde her 2 karede 1 çizim yapılan bir yöntem olduğu için 12 fps ile de idare edilebilir gibi.
  • İzleyebileceğimiz bir video bir yerde var mı?