1 पॉइंट द्वारा GN⁺ 2023-12-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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
  • 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 विकल्प के साथ चलाया जाता है

डेमो और उपयोग उदाहरण

  • उदाहरण examples directory में चलाए जा सकते हैं
  • रियल-टाइम Txt2Img डेमो demo/realtime-txt2img directory में है
  • रियल-टाइम Img2Img डेमो demo/realtime-img2img directory में है
    • वेब ब्राउज़र में 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 सक्षम किया जाता है
  • 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 threshold
    • similar_image_filter_max_skip_frame: conversion फिर से शुरू होने से पहले pause के दौरान अनुमत अधिकतम अंतराल

Residual CFG

  • RCFG CFG का एक approximate implementation है, जिसकी computation complexity CFG का उपयोग न करने वाले मामले के मुकाबले प्रतिस्पर्धी है
  • इसे StreamDiffusion के cfg_type argument के रूप में निर्दिष्ट किया जा सकता है
  • 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"
  • delta RCFG प्रभाव को नियंत्रित करने वाला mitigation effect देता है

उपयोग किए गए मॉडल और संसाधन

  • repository के video और image demos LCM-LoRA + KohakuV2, SD-Turbo का उपयोग करके बनाए गए हैं
  • KohakuV2 मॉडल Civitai और Hugging Face से डाउनलोड किया जा सकता है
  • SD-Turbo का उपयोग Hugging Face Space में भी किया जा सकता है

1 टिप्पणियां

 
GN⁺ 2023-12-25
Hacker News की राय
  • Arxiv पेपर यहाँ है: https://arxiv.org/abs/2312.12491
    4090 के आधार पर लगता है कि इसे बेसलाइन माप से भी तेज़ बनाया जा सकता है। SDXL Turbo को 1 iteration पर बिना optimization के भी 10fps तक चलाया गया था
    लेकिन अनावश्यक generation को रोकने के लिए stochastic similarity filter जैसी सुधारें GPU को हर समय 100% पर फिक्स किए बिना भी तेज़ नतीजे पाने में अच्छी लगती हैं

  • यह लगभग अवास्तविक लगता है। ऐसा लग रहा है जैसे 1 साल में 10 साल निकल गए हों

    • अगर यह मेरा काम रिप्लेस करने लायक हो जाए, तो मैं बस इंतज़ार कर रहा हूँ कि इसे PC पर चलाकर Slack से जोड़ सकूँ। तब employer को वही जैसा output मिलेगा जैसा मैं हाथ से करता, और मुझे सच में काम किए बिना salary मिलती रहेगी, और आखिरकार मैं अपने hobbies पर ध्यान दे पाऊँगा। आखिर सब कुछ इसी दिशा में जा रहा है, है ना?
    • अभी पूरा open source AI ecosystem ऐसा ही लग रहा है। लगभग हर दिन कोई नई प्रगति आती है जो उस चीज़ को संभव बना देती है जिसे पहले असंभव माना जाता था, और इन बदलावों के साथ बने रहना सच में मुश्किल है
    • एक frontend developer के रूप में, अब मैं उन लोगों को समझने लगा हूँ जो शिकायत करते थे कि frontend की दुनिया इतनी तेज़ बदलती है कि उसके साथ चलना मुश्किल है
    • यह software उस गति से भी तेज़ evolve हो रहा है जिस गति से मैं apt-get install करता हूँ
    • इससे incremental games(https://www.reddit.com/r/incremental_games/) याद आ गए। लेकिन ऐसे games शुरू न करना ही बेहतर है। आपकी छुट्टियाँ बर्बाद हो सकती हैं
  • मैंने अभी 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 से बहुत कम अलग है

    • असली quality, diversity, और prompt alignment कैसी है, यह जानने की जिज्ञासा है। मैं कुछ दिनों तक GPU इस्तेमाल नहीं कर पा रहा हूँ, इसलिए खुद जाँच नहीं कर सकता
      generative model पेपर्स को खुद चलाकर देखने से पहले उनका आकलन करना हमेशा मुश्किल होता है। reviewers को दिखाना होता है, इसलिए चुने हुए results ही डाले जाते हैं। मुझे यह अच्छी बात नहीं लगती, लेकिन अभी की वास्तविकता यही है
      क्या यहाँ कोई छोटा autoencoder इस्तेमाल हो रहा है? Artspew ने भी ऐसा किया था और उससे ज़्यादा FPS निकाला था, लेकिन TensorRT नहीं इस्तेमाल किया था, Triton इस्तेमाल किया था, और quality बहुत खराब थी। फिर भी वह काफ़ी शानदार था
      खैर, अगर quality दिखाई गई चीज़ से काफ़ी कम भी हो, तब भी यह प्रभावशाली है, लेकिन असलियत जानना मुश्किल है
  • मैं सोच रहा हूँ कि 100fps का मतलब यह है कि हर 10ms पर नया input दिया जा सकता है और हर 10ms पर नया output मिल सकता है? या फिर average throughput पाने के लिए inputs को batch में प्रोसेस करना पड़ता है?

    • मैंने खुद इसे नहीं आज़माया, लेकिन मेरा अंदाज़ा है कि batch processing की ज़रूरत नहीं होगी
      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 है?

    • वह video input है। पोस्ट के अनुसार stochastic similarity filter वीडियो इनपुट में तब transformation work कम कर देता है जब पिछले frame की तुलना में बदलाव कम हो, जिससे GPU processing load घटता है। ऊपर वाले GIF में लाल frames इसका उदाहरण हैं
    • अभी ControlNet support जोड़ने के लिए GitHub issue खुला है, इसलिए शायद यह ControlNet नहीं है। यह सिर्फ prompt और rcfg scale इस्तेमाल करने वाला img2img लगता है
    • तो क्या इसका मतलब है कि बाईं तरफ original image है और दाईं तरफ result image?
  • Apple Silicon पर fps कितना मिलता है?

    • MPS support नहीं है, इसलिए 0
      हालांकि लगभग 1,800 डॉलर की मौजूदा refurbished कीमत पर, M1 Max 64GB Studio, SD1.5 और SDXL generative AI में RTX 4090 24GB से लगभग 13 गुना धीमा है
    • मैं M1 Pro और 32GB RAM पर DrawThings के साथ SDXL Turbo चला रहा हूँ
      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 सेकंड लगते हैं
    • कम से कम लगभग 1/8 तक तो मिलना चाहिए, लेकिन अगर Apple पर कम से कम 24fps मिले तो वह कमाल होगा। कुछ interpolation के साथ शायद यह संभव हो
      खासकर अगर anime-style हो, जहाँ मूल रूप से हर 2 frames पर एक image बनाई जाती है, तो 12fps पर भी काम चल सकता है
  • क्या कहीं कोई वीडियो है जिसे देखा जा सके?