StreamDiffusion: Gerçek Zamanlı Etkileşimli Üretim için Pipeline Düzeyinde Çözüm
(github.com/cumulo-autumn)- 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-txt2imgvedemo/realtime-img2imgaltı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.10tabanlı bir conda ortamı veyavenvdir - 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
- CUDA 11.8:
- Kullanıcı kurulumu
- En güncel sürüm önerilir:
pip install git+https://github.com/cumulo-autumn/StreamDiffusion.git@main/…] - Kararlı sürüm:
pip install streamdiffusion[tensorrt] - TensorRT uzantısı
python -m streamdiffusion.tools.install-tensorrtile kurulur
- En güncel sürüm önerilir:
- Windows’ta kararlı sürüm kurulduysa ayrıca
pywin32kurulması gerekebilir - Docker kurulumu TensorRT hazırlanmış ortamı hedefler;
docker buildsonrasında--gpus allseçeneğiyle çalıştırılır
Demolar ve kullanım örnekleri
- Örnekler
examplesdizininden çalıştırılabilir - Gerçek zamanlı Txt2Img demosu
demo/realtime-txt2imgdizinindedir - Gerçek zamanlı Img2Img demosu
demo/realtime-img2imgdizinindedir- Web tarayıcısında canlı web kamerası akışı veya ekran yakalama kullanılabilir
- Temel kullanım akışı, Diffusers’ın
StableDiffusionPipeline’ını yükledikten sonraStreamDiffusionile sarmalama biçimindedir - Img2Img örneği
KBlueLeaf/kohaku-v2.1modelini yükler vet_index_list=[32, 45]ile stream’i yapılandırır- Model LCM değilse
load_lcm_lora()vefuse_lora()kullanılır - Ek hızlandırma için
madebyollin/taesdiçindeki Tiny VAE kullanılır enable_xformers_memory_efficient_attention()ile xformers bellek açısından verimli attention etkinleştirilir
- Model LCM değilse
- Txt2Img örneği
t_index_list=[0, 16, 32, 45]kullanır; text-to-image içincfg_type="none"kullanılması önerilir - Warm-up sayısı
len(t_index_list) x frame_buffer_sizedeğ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.tensorrtiçindekiaccelerate_with_tensorrtkullanılır- Örnek yapılandırma
stream,"engines",max_batch_size=2iletilmesini 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ğisimilar_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
StreamDiffusioniçindekicfg_typeargü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_typedeğerleri şöyledir- CFG yok:
"none" - Normal CFG:
"full" - RCFG Self-Negative:
"self" - RCFG Onetime-Negative:
"initialize"
- CFG yok:
delta, RCFG etkisini ayarlayan bir yumuşatma etkisine sahiptir
Kullanılan modeller ve kaynaklar
- Depodaki video ve görüntü demoları LCM-LoRA + KohakuV2, SD-Turbo kullanılarak üretildi
- KohakuV2 modeli Civitai ve Hugging Face üzerinden indirilebilir
- SD-Turbo Hugging Face Space üzerinde de kullanılabilir
1 yorum
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.
apt-get installyapma hızından daha hızlı gelişiyor.realtime-text2imgdemosunu 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\screendemosu 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ı.
Ü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?
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-txt2imgiçindekiserver.pydosyası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?
Apple Silicon’da fps ne civarda?
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ş.
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.
Ö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ı?