2 पॉइंट द्वारा GN⁺ 2025-06-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • miniDiffusion प्रोजेक्ट एक ओपन सोर्स प्रयास है, जिसमें Stable Diffusion 3.5 मॉडल को केवल PyTorch का उपयोग करके शुरुआत से फिर से इम्प्लीमेंट किया गया है
  • इस प्रोजेक्ट की संरचना की खासियत यह है कि इसका फोकस शैक्षणिक उद्देश्य और प्रयोग, हैकिंग पर है
  • पूरा कोडबेस लगभग 2800 लाइनों का है, और VAE से लेकर DiT, ट्रेनिंग तथा डेटासेट स्क्रिप्ट्स तक सब कुछ न्यूनतम कोड में व्यवस्थित है
  • प्रमुख कॉम्पोनेंट्स में VAE, CLIP, T5 टेक्स्ट एन्कोडर, मल्टीमॉडल डिफ्यूजन ट्रांसफॉर्मर, Joint Attention आदि शामिल हैं
  • इसमें अभी भी प्रायोगिक फीचर्स शामिल हैं, इसलिए इसे और अधिक टेस्टिंग की आवश्यकता है

miniDiffusion प्रोजेक्ट परिचय

miniDiffusion एक ओपन सोर्स प्रोजेक्ट है, जो Stable Diffusion 3.5 की मुख्य क्षमताओं को केवल PyTorch के साथ दोबारा इम्प्लीमेंट करता है
मौजूदा Stable Diffusion 3.5 की तुलना में इस प्रोजेक्ट के निम्नलिखित फायदे हैं

  • लगभग 2,800 लाइनों का छोटा कोडबेस होने के कारण, यह खुद इसकी संरचना का विश्लेषण करने और सीखने के लिए बेहद उपयुक्त है
  • इसे विभिन्न मशीन लर्निंग प्रयोगों और मॉडल हैकिंग में उपयोगी रूप से इस्तेमाल किया जा सकता है
  • इसकी dependencies बहुत कम हैं और यह केवल न्यूनतम लाइब्रेरीज़ का उपयोग करता है

मुख्य संरचना और कॉन्फ़िगरेशन फ़ाइलें

  • dit.py : मुख्य Stable Diffusion मॉडल इम्प्लीमेंटेशन
  • dit_components.py : embedding, normalization, patch embedding, और DiT helper functions
  • attention.py : Joint Attention एल्गोरिदम इम्प्लीमेंटेशन
  • noise.py : Rectified Flow के लिए Euler ODE scheduler शामिल
  • t5_encoder.py, clip.py : T5 और CLIP टेक्स्ट एन्कोडर इम्प्लीमेंटेशन
  • tokenizer.py : Byte-Pair और Unigram tokenizer इम्प्लीमेंटेशन
  • metrics.py : FID(Fréchet inception distance) मूल्यांकन मेट्रिक इम्प्लीमेंटेशन
  • common.py : ट्रेनिंग के लिए आवश्यक helper functions प्रदान करता है
  • common_ds.py : इमेज को DiT के ट्रेनिंग डेटा में बदलने वाला iterable dataset इम्प्लीमेंटेशन
  • model फ़ोल्डर : ट्रेनिंग के बाद मॉडल checkpoints और logs स्टोर करता है
  • encoders फ़ोल्डर : VAE, CLIP आदि अलग मॉड्यूल्स के checkpoints स्टोर करता है

⚠️ प्रायोगिक फीचर्स और टेस्टिंग की आवश्यकता miniDiffusion में अभी भी प्रायोगिक फीचर्स शामिल हैं और इसे अधिक टेस्टिंग की आवश्यकता है

प्रमुख फीचर्स का विस्तृत विन्यास

Core Image Generation Modules

  • VAE, CLIP, T5 टेक्स्ट एन्कोडर इम्प्लीमेंटेशन
  • Byte-Pair, Unigram tokenizer इम्प्लीमेंटेशन

SD3 Components

  • Multi-Modal Diffusion Transformer Model
  • Flow-Matching Euler Scheduler इम्प्लीमेंटेशन
  • Logit-Normal Sampling
  • Joint Attention एल्गोरिदम का उपयोग

मॉडल ट्रेनिंग और इन्फरेंस स्क्रिप्ट्स

  • SD3(Stable Diffusion 3.5) के लिए ट्रेनिंग और इन्फरेंस स्क्रिप्ट्स उपलब्ध हैं

लाइसेंस

  • यह MIT लाइसेंस के तहत जारी किया गया है और शिक्षा एवं प्रयोगात्मक उद्देश्य के लिए बनाया गया है

इस ओपन सोर्स प्रोजेक्ट का महत्व और फायदे

  • Stable Diffusion 3.5 स्तर के आधुनिक इमेज जनरेशन मॉडल आर्किटेक्चर को शुद्ध PyTorch में सीधे सीखना और हैक करना संभव बनाता है
  • कोड संक्षिप्त और स्वतंत्र है, इसलिए यह संरचना विश्लेषण/मॉडल ट्यूनिंग/नए एल्गोरिदम शोध के लिए अनुकूलित है
  • आधुनिक multimodal, transformer, attention जैसी तकनीकों का सीधे hands-on अभ्यास किया जा सकता है
  • कमर्शियल प्रोजेक्ट्स से अलग सुरक्षित रूप से प्रयोग करने के लिए एक आधार प्रदान करता है

1 टिप्पणियां

 
GN⁺ 2025-06-15
Hacker News की राय
  • Flux reference implementation वाकई बहुत minimal structure वाला है, इसलिए अगर किसी की रुचि हो तो उसे एक बार देखना काफ़ी उपयोगी हो सकता है

    • Flux GitHub

    • minRF प्रोजेक्ट का फ़ायदा यह है कि यह rectified flow का उपयोग करके छोटे diffusion model को train करते समय आसानी से शुरुआत करने देता है

    • minRF GitHub

    • Stable Diffusion 3.5 का reference implementation भी काफ़ी संक्षिप्त तरीके से लिखा गया है, इसलिए संदर्भ के लिए उपयुक्त है

    • SD 3.5 GitHub

    • reference implementations अक्सर ठीक से maintain नहीं किए जाते और उनमें bugs भी काफ़ी होते हैं

      • उदाहरण के लिए OpenAI के CLIP tokenizer का मामला लिया जा सकता है; यह आधिकारिक training में इस्तेमाल किया गया version नहीं, सिर्फ़ reference है, फिर भी bug ठीक हुए बिना कई projects में उसी तरह copy हो गया है
      • Flux भी वास्तव में training में इस्तेमाल नहीं हुआ था, और उसमें cudagraphs वगैरह में थोड़ी समस्या पैदा करने वाले bugs हैं
      • यह CLIP reference पर निर्भर करता है, और CLIP में खुद bug है, इसलिए bug उसी तरह आगे फैलते हैं
  • यह जिज्ञासा होती है कि क्या miniDiffusion प्रोजेक्ट का मतलब Stable Diffusion 3.5 model का उपयोग करना है

    • संबंधित code

    • training dataset बहुत छोटा है और इसमें सिर्फ़ fashion से जुड़ी तस्वीरें शामिल हैं

    • fashion dataset

    • यह dataset diffusion model की fine-tuning को अभ्यास में देखने के लिए है

      • SD3 को नए सिरे से code में implement किया गया है, लेकिन मेरे hardware की सीमाओं की वजह से weights HuggingFace से लेकर इस्तेमाल किए गए हैं
  • यह जानने की जिज्ञासा है कि pure PyTorch इस्तेमाल करने पर NVIDIA के अलावा दूसरे GPU पर performance advantage मिलता है या नहीं, या फिर PyTorch इतना CUDA-optimized है कि दूसरे GPU vendors के लिए प्रतिस्पर्धा करना मुश्किल है

    • PyTorch, Apple Silicon पर भी काफ़ी अच्छी तरह काम करता है

      • लेकिन Apple GPU, NVIDIA के top-end GPU जैसी computing performance देना मुश्किल पाते हैं, इसलिए सीधी तुलना आसान नहीं है
      • वैसे, Apple Silicon पर PyTorch इस्तेमाल करते समय एक थोड़ी अनोखी बात है
        • हर tensor को किसी खास device (CPU या GPU) के स्वामित्व वाला माना जाता है, इसलिए data move होने पर पूरा copy होता है
        • Mac में unified memory architecture है, लेकिन PyTorch फिर भी data copy करता है
    • AMD जैसे non-NVIDIA devices पर भी ML workloads को Vulkan के ज़रिए चलाया जा सकता है

      • अगर cooperative matrix जैसी नई extensions और driver-level की नई feature support जुड़ती रही, तो CUDA के मुक़ाबले कुछ प्रतिशत के performance gap भी खत्म हो सकते हैं
    • PyTorch का ROCm support बहुत धीमी रफ़्तार से आगे बढ़ रहा है, और काम कर भी जाए तो speed धीमी रहती है

    • PyTorch, ROCm पर काम तो काफ़ी ठीक करता है, लेकिन क्या वह पूरी तरह "same-tier" स्तर तक अच्छा है, यह स्पष्ट नहीं है

  • PyTorch code में

        self.q = nn.Linear(embed_size, embed_size, bias = False)
        self.k = nn.Linear(embed_size, embed_size, bias = False)
        self.v = nn.Linear(embed_size, embed_size, bias = False)
    

    के बजाय

        self.qkv = nn.Linear(embed_size, 3*embed_size, bias = False)
        # forward फ़ंक्शन के भीतर
        qkv = self.qkv(x)
    

    जैसा कुछ आज़माने का सुझाव है

    • ऐसा करने पर, जहाँ पहले q, k, v के parameters अलग-अलग स्वतंत्र रूप से जुड़े होते थे, वहाँ q, k, v के बीच parameters जुड़े हुए हो जाते हैं
      • अगर मैं इस समय बहुत थका हुआ हूँ और भ्रमित हो रहा हूँ, तो कृपया इसे उसी तरह लें
  • यह learners के लिए अच्छा material लगता है

    • यह जानने की जिज्ञासा है कि क्या कोई tutorial या guide भी है जिसे beginners follow कर सकें

    • fast.ai में Stable Diffusion को सीधे implement करने वाला एक course है

  • यह जिज्ञासा है कि क्या Stable Diffusion को बिना license restrictions के इस्तेमाल किया जा सकता है

    • नहीं, inference/training algorithm (यानी गणित स्वयं) copyright के दायरे में नहीं आता, लेकिन OP ने सिर्फ़ code को नए सिरे से implement किया है
      • copyright का मुद्दा model (weights) पर है, और OP के पास data या computing power नहीं थी, इसलिए उसने खुद training नहीं की
  • सच कहूँ तो थोड़ा शर्मनाक लग सकता है, लेकिन यह जिज्ञासा है कि इस repository के आने से पहले और बाद की तुलना में हमने नया क्या हासिल किया

    • व्यक्तिगत रूप से मैंने model बनाने से दूरी बनाए रखी है और ज़्यादातर सिर्फ़ नतीजों को बाहर से देखा है

    • मुझे धुंधला-सा लगता था कि पहले से ही PyTorch-आधारित inference/training scripts सार्वजनिक होंगी

    • कम से कम inference scripts तो model distribution के साथ दी जाती होंगी, और fine-tuning/training scripts भी उपलब्ध होंगी, ऐसा सोचा था

    • यह स्पष्ट नहीं है कि यह प्रोजेक्ट एक तरह का "clean room" या "dirty room" शैली का rewrite है, या फिर मौजूदा PyTorch code भी CUDA/C-आधारित होकर इतना जटिल था कि pure PyTorch version का महत्व बहुत बड़ा है

    • कुल मिलाकर मुझे ठीक से समझ नहीं है, इसलिए अगर कोई समझा दे तो अच्छा होगा

      • इस प्रोजेक्ट की मुख्य value "minimal dependency implementation" है

        • मैंने SD 3.5 को वास्तव में चलाया नहीं है, लेकिन यह huggingface library पर आधारित बना है, और व्यक्तिगत रूप से मुझे लगता है कि huggingface में dependencies इतनी जटिल हैं कि developer का environment लगभग हूबहू मिलाए बिना उसे चलाना भी मुश्किल हो जाता है
        • खासकर original release के कुछ महीने या साल बाद, किसी खास model को चलाना बहुत कठिन हो जाता है
        • उदाहरण के लिए, SD3.5 की Stability AI reference implementation requirements.txt फ़ाइल देखें; इसमें versions pin नहीं किए गए हैं, और transformers जैसी बहुत बड़ी library शामिल है, इसलिए practical work में यह सचमुच मुश्किल बन जाता है
      • Stability AI, Stable Diffusion model को Stability AI Community License के तहत distribute करता है, जो MIT की तरह "पूरी तरह स्वतंत्र" नहीं है

        • weights को कुछ खास तरीकों से modify करना अनुमति प्राप्त नहीं है
        • यह package model चलाने (inference) या पहले से मौजूद AI weights के साथ fine-tuning करने की सुविधा देता है
        • training/learning के लिए यह शानदार है, लेकिन license issue फिर भी बना रहता है
  • SD 3.5 (या किसी भी version) के बारे में सोचते समय, मेरे लिए training process से बने weights ही मुख्य हिस्सा हैं

    • code स्वयं output quality या performance के लिहाज़ से तुलनात्मक रूप से कम महत्वपूर्ण लगता है
    • लेकिन यह कोई अंतिम निर्णय नहीं है, और इस तरह के प्रयास को कमतर दिखाने का इरादा नहीं है
  • Ludwig Maximilian University के CompViz group द्वारा जारी original academic source की practical usability को लेकर जिज्ञासा है

  • यहाँ के diffusion transformer (DiT) implementation में क्या SD 3.5 full version की तरह cross-token attention सही ढंग से implement किया गया है, या code readability के लिए इसे simplify किया गया है, यह जानने की जिज्ञासा है