StreamDiffusion: रियल-टाइम इंटरैक्टिव जेनरेशन के लिए पाइपलाइन-स्तर का समाधान
(github.com/cumulo-autumn)- StreamDiffusion एक ऐसी पाइपलाइन है जो diffusion-आधारित image generation को रियल-टाइम इंटरैक्टिव जेनरेशन के लिए बेहतर बनाती है, और मौजूदा diffusion image generation तकनीकों के प्रदर्शन को सुधारने का लक्ष्य रखती है
- मुख्य फीचर्स में Stream Batch, Residual Classifier-Free Guidance, Stochastic Similarity Filter, IO Queues, KV-cache pre-computation, और model acceleration tools शामिल हैं
- RTX 4090, Core i9-13900K, Ubuntu 22.04.3 LTS वातावरण में SD-turbo ने 1 denoising step के आधार पर Txt2Img 106.16fps, Img2Img 93.897fps दर्ज किया
- रियल-टाइम डेमो
demo/realtime-txt2imgऔरdemo/realtime-img2imgमें उपलब्ध हैं, और Img2Img डेमो वेब ब्राउज़र में live webcam feed या screen capture का उपयोग करता है - इसे Diffusers की
StableDiffusionPipelineको wrap करने के तरीके से उपयोग किया जाता है, और LCM-LoRA merge, Tiny VAE, xformers, TensorRT acceleration के जरिए और तेज़ execution सेटअप किया जा सकता है
StreamDiffusion का उद्देश्य और प्रदर्शन
- StreamDiffusion रियल-टाइम इंटरैक्टिव जेनरेशन के लिए एक diffusion pipeline है
- इसका लक्ष्य मौजूदा diffusion-आधारित image generation तकनीकों के लिए प्रदर्शन सुधार प्रदान करना है
- पेपर arXiv 2312.12491 और Hugging Face Papers से जुड़ा है
- प्रस्तावित पाइपलाइन से image generation का प्रदर्शन मापने के लिए उपयोग किया गया वातावरण इस प्रकार है
- GPU: RTX 4090
- CPU: Core i9-13900K
- OS: Ubuntu 22.04.3 LTS
- प्रदर्शन तालिका
- SD-turbo: denoising step 1, Txt2Img 106.16fps, Img2Img 93.897fps
- LCM-LoRA + KohakuV2: denoising step 4, Txt2Img 38.023fps, Img2Img 37.133fps
मुख्य फीचर्स
-
Stream Batch
- कुशल batch processing के जरिए data processing को सरल बनाता है
-
Residual Classifier-Free Guidance
- यह computation duplication को कम करने वाला बेहतर guidance mechanism है
-
Stochastic Similarity Filter
- यह उन्नत filtering तकनीक GPU उपयोग दक्षता को बेहतर बनाती है
-
IO Queues
- input और output कार्यों को कुशलतापूर्वक प्रबंधित कर अधिक smooth execution में मदद करता है
-
Pre-Computation for KV-Caches
- caching strategy को optimize कर processing speed बढ़ाता है
-
Model Acceleration Tools
- model optimization और performance improvement के लिए कई tools का उपयोग करता है
इंस्टॉलेशन और चलाने का तरीका
- StreamDiffusion को pip, conda, और Docker से install किया जा सकता है
- अनुशंसित Python environment का उदाहरण
python=3.10आधारित conda environment याvenvहै - PyTorch installation उदाहरण CUDA 11.8 और CUDA 12.1 को अलग-अलग दिखाते हैं
- 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:
- user installation methods
- नवीनतम संस्करण अनुशंसित:
pip install git+https://github.com/cumulo-autumn/StreamDiffusion.git@main/…] - स्थिर संस्करण:
pip install streamdiffusion[tensorrt] - TensorRT extension को
python -m streamdiffusion.tools.install-tensorrtसे install किया जाता है
- नवीनतम संस्करण अनुशंसित:
- Windows पर स्थिर संस्करण install करने पर
pywin32को अतिरिक्त रूप से install करना पड़ सकता है - Docker installation TensorRT-तैयार environment को लक्षित करती है, और
docker buildके बाद--gpus allविकल्प के साथ चलाया जाता है
डेमो और उपयोग उदाहरण
- उदाहरण
examplesdirectory में चलाए जा सकते हैं - रियल-टाइम Txt2Img डेमो
demo/realtime-txt2imgdirectory में है - रियल-टाइम Img2Img डेमो
demo/realtime-img2imgdirectory में है- वेब ब्राउज़र में live webcam feed या screen capture का उपयोग किया जा सकता है
- मूल उपयोग प्रवाह Diffusers की
StableDiffusionPipelineको load करने और फिर उसेStreamDiffusionसे wrap करने का है - Img2Img उदाहरण
KBlueLeaf/kohaku-v2.1मॉडल को load करता है, औरt_index_list=[32, 45]से stream configure करता है- अगर मॉडल LCM नहीं है, तो
load_lcm_lora()औरfuse_lora()का उपयोग किया जाता है - अतिरिक्त acceleration के लिए
madebyollin/taesdका Tiny VAE उपयोग किया जाता है enable_xformers_memory_efficient_attention()से xformers memory-efficient attention सक्षम किया जाता है
- अगर मॉडल LCM नहीं है, तो
- Txt2Img उदाहरण
t_index_list=[0, 16, 32, 45]का उपयोग करता है, और text-to-image मेंcfg_type="none"के उपयोग की सिफारिश की जाती है - warmup count
len(t_index_list) x frame_buffer_sizeसे कम नहीं होना चाहिए
TensorRT acceleration
- और तेज़ generation के लिए xformers activation code को TensorRT acceleration code से बदला जा सकता है
streamdiffusion.acceleration.tensorrtकेaccelerate_with_tensorrtका उपयोग किया जाता है- उदाहरण configuration में
stream,"engines",max_batch_size=2पास किया जाता है - TensorRT extension आवश्यक है, और engine build में समय लगता है
- engine build के बाद यह पहले के उदाहरणों की तुलना में अधिक तेज़ चलता है
Stochastic Similarity Filter
- Stochastic Similarity Filter video input में तब conversion work कम करता है जब पिछले frame की तुलना में बदलाव कम हो
- conversion work कम करके GPU processing load को हल्का करता है
- उपयोग का तरीका
stream.enable_similar_image_filter()को call करना है - configurable arguments
similar_image_filter_threshold: processing को अस्थायी रूप से रोकने से पहले पिछले frame और वर्तमान frame के बीच similarity thresholdsimilar_image_filter_max_skip_frame: conversion फिर से शुरू होने से पहले pause के दौरान अनुमत अधिकतम अंतराल
Residual CFG
- RCFG CFG का एक approximate implementation है, जिसकी computation complexity CFG का उपयोग न करने वाले मामले के मुकाबले प्रतिस्पर्धी है
- इसे
StreamDiffusionकेcfg_typeargument के रूप में निर्दिष्ट किया जा सकता है - RCFG के दो प्रकार हैं
- RCFG Self-Negative: ऐसा तरीका जिसमें negative prompt specification नहीं होती
- RCFG Onetime-Negative: ऐसा तरीका जिसमें negative prompt निर्दिष्ट किया जा सकता है
- computation complexity तुलना
- CFG नहीं: N
- सामान्य CFG: 2N
- RCFG Self-Negative: N
- RCFG Onetime-Negative: N+1
cfg_typeके मान इस प्रकार हैं- CFG नहीं:
"none" - सामान्य CFG:
"full" - RCFG Self-Negative:
"self" - RCFG Onetime-Negative:
"initialize"
- CFG नहीं:
deltaRCFG प्रभाव को नियंत्रित करने वाला mitigation effect देता है
उपयोग किए गए मॉडल और संसाधन
- repository के video और image demos LCM-LoRA + KohakuV2, SD-Turbo का उपयोग करके बनाए गए हैं
- KohakuV2 मॉडल Civitai और Hugging Face से डाउनलोड किया जा सकता है
- SD-Turbo का उपयोग Hugging Face Space में भी किया जा सकता है
1 टिप्पणियां
Hacker News की राय
Arxiv पेपर यहाँ है: https://arxiv.org/abs/2312.12491
4090 के आधार पर लगता है कि इसे बेसलाइन माप से भी तेज़ बनाया जा सकता है। SDXL Turbo को 1 iteration पर बिना optimization के भी 10fps तक चलाया गया था
लेकिन अनावश्यक generation को रोकने के लिए stochastic similarity filter जैसी सुधारें GPU को हर समय 100% पर फिक्स किए बिना भी तेज़ नतीजे पाने में अच्छी लगती हैं
यह लगभग अवास्तविक लगता है। ऐसा लग रहा है जैसे 1 साल में 10 साल निकल गए हों
apt-get installकरता हूँमैंने अभी
realtime-text2imgडेमो आज़माया, और frontend में npm का इस्तेमाल इस काम के लिए कुछ ज़्यादा ही लगा। मैंने इसे 16 images की जगह सिर्फ 1 image generate करने के लिए बदला, और यह RTX-3080 laptop पर भी ठीक चला। शायद लगभग 2 images per second मिल रही हैंसंपादन:
examples\screenडेमो लगभग real-time जैसा महसूस होता है। विंडो में 4fps दिखता है, लेकिन इसका ठीक-ठीक मतलब क्या है, पता नहींसंपादन: हालांकि img2img की denoising strength बहुत कम है, इसलिए लौटाई गई image मूल image से बहुत कम अलग है
generative model पेपर्स को खुद चलाकर देखने से पहले उनका आकलन करना हमेशा मुश्किल होता है। reviewers को दिखाना होता है, इसलिए चुने हुए results ही डाले जाते हैं। मुझे यह अच्छी बात नहीं लगती, लेकिन अभी की वास्तविकता यही है
क्या यहाँ कोई छोटा autoencoder इस्तेमाल हो रहा है? Artspew ने भी ऐसा किया था और उससे ज़्यादा FPS निकाला था, लेकिन TensorRT नहीं इस्तेमाल किया था, Triton इस्तेमाल किया था, और quality बहुत खराब थी। फिर भी वह काफ़ी शानदार था
खैर, अगर quality दिखाई गई चीज़ से काफ़ी कम भी हो, तब भी यह प्रभावशाली है, लेकिन असलियत जानना मुश्किल है
मैं सोच रहा हूँ कि 100fps का मतलब यह है कि हर 10ms पर नया input दिया जा सकता है और हर 10ms पर नया output मिल सकता है? या फिर average throughput पाने के लिए inputs को batch में प्रोसेस करना पड़ता है?
model में धीमा हिस्सा model को load करने का चरण होता है। एक बार model लोड हो जाए, फिर आप जो input चाहें भेज सकते हैं
image data को parse करके भेजने की प्रक्रिया यहाँ bottleneck होगी, ऐसा मुझे नहीं लगता
यह लगभग documentation में लिखे अनुसार सीधे काम कर गया। ऐसे ज़्यादातर demos क्रैश हो जाते हैं और अजीब deep errors देते हैं, लेकिन यह ठीक था
अच्छा बनाया गया है। इसे एक बार आज़माना चाहिए। अगर आप anime-style के अलावा कुछ बनाना चाहते हैं, तो
realtime-txt2imgकेserver.pyमें model बदल सकते हैं। उदाहरण के लिए https://huggingface.co/runwayml/stable-diffusion-v1-5 सेट करने पर भी यह ठीक काम करता हैresults सच में तेज़ हैं। शानदार नहीं, लेकिन तेज़ हैं। अगर LCM-LoRA के ज़रिए SDXL पर स्विच करें https://huggingface.co/latent-consistency तो शायद बेहतर results मिल सकते हैं, लेकिन वहाँ से चीज़ें मुश्किल होने लगती हैं और वही पहले बताए गए रहस्यमय crashes मिलने शुरू हो जाते हैं। वहीं से असली काम शुरू होता है
मेरा environment 4090/3990x/CUDA 12.2/debian sid है, इसलिए environment के हिसाब से नतीजे अलग हो सकते हैं
वह डेमो जिसमें महिला character फ्रेम के अंदर-बाहर move करती है, वह कैसे काम करता है? क्या वह ControlNet है?
Apple Silicon पर fps कितना मिलता है?
हालांकि लगभग 1,800 डॉलर की मौजूदा refurbished कीमत पर, M1 Max 64GB Studio, SD1.5 और SDXL generative AI में RTX 4090 24GB से लगभग 13 गुना धीमा है
512x512, 5-step image को बनने में 5 सेकंड लगते हैं। refiner, upscaler, face restoration इस्तेमाल नहीं कर रहा हूँ
मेरी जानकारी में DrawThings अभी तक SDXL Turbo या pipeline generation के लिए optimize नहीं किया गया है
संदर्भ के लिए, अगर SDXL Base+Refiner में face restoration ऑन करके 2k x 2k, 50-step image बनाई जाए, तो लगभग 120 सेकंड लगते हैं
खासकर अगर anime-style हो, जहाँ मूल रूप से हर 2 frames पर एक image बनाई जाती है, तो 12fps पर भी काम चल सकता है
क्या कहीं कोई वीडियो है जिसे देखा जा सके?