2 puan yazan GN⁺ 2025-06-15 | 1 yorum | WhatsApp'ta paylaş
  • miniDiffusion projesi, Stable Diffusion 3.5 modelini yalnızca PyTorch kullanarak sıfırdan yeniden uygulayan bir açık kaynak çalışmasıdır
  • Projenin yapısı özellikle eğitim amacıyla ve deney, hacking kullanımları için tasarlanmıştır
  • Tüm kod tabanı yaklaşık 2800 satır olup VAE'den DiT'e, eğitim ve veri kümesi betiklerine kadar her şey minimum kodla oluşturulmuştur
  • Başlıca bileşenler arasında VAE, CLIP, T5 metin kodlayıcıları, çok modlu difüzyon transformer'ı, joint attention yer alır
  • Henüz deneysel özellikler içerdiğinden daha fazla test gerekmektedir

miniDiffusion projesine giriş

miniDiffusion, Stable Diffusion 3.5'in temel işlevlerini yalnızca PyTorch ile yeniden uygulayan açık kaynak bir projedir
Bu proje, mevcut Stable Diffusion 3.5 ile karşılaştırıldığında şu avantajlara sahiptir

  • Kod tabanı yaklaşık 2.800 satır olduğu için küçüktür ve yapıyı doğrudan analiz edip öğrenmek için çok uygundur
  • Çeşitli makine öğrenimi deneyleri ve model hacking için faydalı biçimde kullanılabilir
  • Bağımlılıkları çok azdır ve yalnızca minimum düzeyde kütüphane kullanır

Temel yapı ve bileşen dosyaları

  • dit.py : ana Stable Diffusion modelinin uygulama bölümü
  • dit_components.py : embedding, normalization, patch embedding ve DiT yardımcı işlevleri
  • attention.py : Joint Attention algoritmasının uygulama bölümü
  • noise.py : Rectified Flow için Euler ODE scheduler içerir
  • t5_encoder.py, clip.py : T5 ve CLIP metin kodlayıcılarının uygulanması
  • tokenizer.py : Byte-Pair ve Unigram tokenizer uygulaması
  • metrics.py : FID(Fréchet inception distance) değerlendirme metriğinin uygulanması
  • common.py : eğitim için gerekli yardımcı işlevleri sağlar
  • common_ds.py : görselleri DiT için eğitim verisine dönüştüren iterable dataset uygulaması
  • model klasörü : eğitim sonrası model checkpoint'leri ve log'ların saklanması
  • encoders klasörü : VAE, CLIP gibi ayrı modüllerin checkpoint'lerinin saklanması

⚠️ Deneysel özellikler ve test gerekliliği miniDiffusion hâlâ deneysel özellikler içermektedir ve daha fazla teste ihtiyaç duymaktadır

Başlıca işlevlere göre ayrıntılı yapı

Core Image Generation Modules

  • VAE, CLIP, T5 metin kodlayıcıları uygulaması
  • Byte-Pair, Unigram tokenizer uygulaması

SD3 Components

  • Multi-Modal Diffusion Transformer Model
  • Flow-Matching Euler Scheduler uygulaması
  • Logit-Normal Sampling
  • Joint Attention algoritmasının kullanımı

Model eğitimi ve çıkarım betikleri

  • SD3(Stable Diffusion 3.5) için eğitim ve çıkarım betikleri sağlanır

Lisans

  • MIT lisansı ile yayımlanmıştır ve eğitim ile deney amaçları için hazırlanmıştır

Bu açık kaynak projenin anlamı ve avantajları

  • Stable Diffusion 3.5 düzeyindeki güncel görüntü üretim modeli yapıları saf PyTorch ile doğrudan eğitilip hacklenebilir
  • Kod kısa ve bağımsız olduğundan yapı analizi / model tuning / yeni algoritma araştırması için optimize edilmiştir
  • Güncel çok modlu, transformer ve attention teknikleri doğrudan pratik edilebilir
  • Ticari projelerden bağımsız olarak güvenli biçimde deney yapılabilecek bir temel sunar

1 yorum

 
GN⁺ 2025-06-15
Hacker News görüşleri
  • Flux referans implementasyonu gerçekten çok minimal bir yapıya sahip; ilgilenenler için bir göz atmaya değer

    • Flux GitHub

    • minRF projesinin avantajı, rectified flow kullanarak küçük diffusion modellerini eğitmeye başlamak için kolay bir giriş noktası sunması

    • minRF GitHub

    • Stable Diffusion 3.5’in referans implementasyonu da oldukça sade yazılmış, bu yüzden incelemek için uygun

    • SD 3.5 GitHub

    • Referans implementasyonlar çoğu zaman iyi bakım görmüyor ve çok sayıda hata içeriyor

      • Örnek olarak OpenAI’nin CLIP tokenizer’ı verilebilir; resmî eğitimde kullanılan sürüm değil, sadece referans olmasına rağmen hata düzeltilmeden birçok projeye aynı şekilde kopyalanmış durumda
      • Flux da eğitimde gerçekten kullanılan sürüm değil ve cudagraphs gibi yerlerde ufak sorunlara yol açabilecek hatalar barındırıyor
      • CLIP referansına dayanıyor ama CLIP’in kendisinde hata olduğu için, aynı hatalar buraya da taşınıyor
  • miniDiffusion projesinin gerçekten Stable Diffusion 3.5 modelini kullandığı mı kastediliyor diye merak ediyorum

    • İlgili kod

    • Eğitim veri kümesi çok küçük ve yalnızca moda ile ilgili fotoğraflar içeriyor

    • Moda veri kümesi

    • Bu veri kümesi, diffusion model fine-tuning pratiği yapmak için kullanılıyor

      • SD3 kodunu baştan yeniden yazdım ama donanımımın sınırları nedeniyle ağırlıkları HuggingFace’ten alıp kullanıyorum
  • Saf PyTorch kullanmanın NVIDIA dışındaki GPU’larda bir performans avantajı sağlayıp sağlamadığını, yoksa PyTorch’un CUDA için bu kadar optimize olması yüzünden diğer GPU üreticilerinin zaten yarışamayacağını merak ediyorum

    • PyTorch, Apple Silicon’da da oldukça iyi çalışıyor

      • Yine de Apple GPU’ları, NVIDIA’nın üst seviye GPU’larının hesaplama performansına ulaşamadığı için doğrudan karşılaştırmak zor
      • Bu arada Apple Silicon’da PyTorch kullanırken biraz tuhaf bir nokta var
        • Her tensor belirli bir aygıta (CPU veya GPU) ait kabul edildiği için, veri taşınırken tam kopyalama yapılıyor
        • Mac birleşik bellek mimarisine sahip olsa da, PyTorch hâlâ veri kopyalayan bir yapı kullanıyor
    • AMD gibi NVIDIA dışı aygıtlarda da ML iş yükleri Vulkan üzerinden çalıştırılabiliyor

      • Son dönemde gelen cooperative matrix gibi uzantılar ve sürücü seviyesindeki yeni özellikler eklenirse, CUDA’ya kıyasla birkaç yüzde puanlık performans farkı da ortadan kalkabilir
    • PyTorch’un ROCm desteği çok yavaş ilerliyor ve çalıştırmayı başarsanız bile yavaş

    • PyTorch ROCm üzerinde fena çalışmıyor ama gerçekten tamamen “aynı seviyede” çalışıp çalışmadığından emin değilim

  • PyTorch kodunda

        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)
    

    yerine

        self.qkv = nn.Linear(embed_size, 3*embed_size, bias = False)
        # forward fonksiyonu içinde
        qkv = self.qkv(x)
    

    gibi bir yaklaşım denemenin iyi olabileceği öneriliyor

    • Bunu yaparsanız, eskiden q, k, v’nin her birinin parametreleri bağımsız bağlıyken, şimdi q, k, v arasında parametreler bağlanmış olur
      • Tabii şu an çok yorgunsam ve bir şeyi karıştırıyorsam kusura bakmayın
  • Öğrenenler için iyi bir kaynak gibi görünüyor

    • Acaba yeni başlayanların da takip edebileceği bir eğitim ya da rehber var mı

    • fast.ai’de Stable Diffusion’ı doğrudan implement etmeye yönelik bir ders var

  • Bunun Stable Diffusion’ı lisans kısıtlaması olmadan kullanabilmek anlamına gelip gelmediğini merak ettim

    • Hayır; inference/eğitim algoritması (matematiğin kendisi) telif hakkına tabi değil, ama OP burada yalnızca kodu yeniden implement etmiş
      • Telif açısından sorun teşkil eden şey modelin kendisi, yani ağırlıklar; OP’nin de kendi başına eğitmek için ne verisi ne de hesaplama gücü varmış
  • Açıkçası biraz utanç verici ama, bu repo(lar) ortaya çıkmadan önce ve sonra elimizde yeni olarak ne olduğu konusunda kafam karışık

    • Ben şahsen model geliştirmekten hep uzak durdum, daha çok ortaya çıkan sonuçları dışarıdan takip eden taraftaydım

    • Zaten PyTorch tabanlı inference/eğitim script’lerinin önceden de açık olduğunu varsayıyordum

    • En azından inference script’lerinin modelle birlikte verileceğini, fine-tuning/eğitim script’lerinin de bulunacağını düşünüyordum

    • Bu projenin “clean room” ya da “dirty room” tarzı bir yeniden yazım mı olduğunu, yoksa mevcut PyTorch kodlarının bile CUDA/C tabanlı ve fazla karmaşık olduğu için saf PyTorch sürümünün gerçekten önemli mi olduğunu kestiremiyorum

    • Her hâlükârda tam anlayamadım; bilen biri açıklarsa sevinirim

      • Bu projenin temel değeri “minimum bağımlılıkla implementasyon” olması

        • SD 3.5’i bizzat çalıştırmış değilim ama huggingface kütüphaneleri üzerine kurulu görünüyor; bana göre huggingface’in bağımlılıkları o kadar karmaşık ki, geliştiricinin ortamını neredeyse birebir kurmadan çalıştırmak bile zorlaşıyor
        • Özellikle orijinal yayımdan aylar ya da yıllar sonra, belli bir modeli çalıştırmak çok daha zor hâle geliyor
        • Mesela SD3.5’in Stability AI referans implementasyonundaki requirements.txt dosyasına bakarsanız, sürüm pin’leri yok ve transformers gibi çok büyük kütüphaneler içeriyor; bu da gerçek iş ortamlarında ciddi sorun yaratabiliyor
      • Stability AI, Stable Diffusion modellerini Stability AI Community License ile dağıtıyor; bu da MIT gibi “tamamen özgür” bir lisans değil

        • Ağırlıkları belirli şekillerde değiştirmek serbest değil
        • Bu paket model çalıştırma (inference) ya da mevcut AI ağırlıklarıyla fine-tuning yapma açısından kullanılabiliyor
        • Eğitim ve öğrenme için harika olsa da lisans meseleleri hâlâ varlığını koruyor
  • SD 3.5’i (ya da herhangi bir sürümünü) düşününce, benim için asıl önemli kısım eğitim sürecinden çıkan ağırlıklar

    • Kodun kendisi sonuç kalitesi ya da performans açısından nispeten daha az önemli geliyor
    • Ama bu kesin bir yargı değil ve bu çabayı küçümsemek gibi bir niyetim yok
  • Ludwig Maximilian University’nin CompViz grubunun yayımladığı orijinal akademik kaynağın pratikte kullanılabilirliği hakkında merakım var

  • Buradaki diffusion transformer (DiT) implementasyonunun, SD 3.5’in tam sürümündeki gibi cross-token attention’ı gerçekten doğru şekilde uygulayıp uygulamadığını, yoksa kod okunabilirliği için basitleştirilmiş olup olmadığını merak ediyorum