2 poin oleh GN⁺ 2025-06-15 | 1 komentar | Bagikan ke WhatsApp
  • Proyek miniDiffusion adalah open source yang mengimplementasikan ulang model Stable Diffusion 3.5 dari nol hanya dengan menggunakan PyTorch
  • Struktur proyek ini berfokus pada tujuan edukasi serta kebutuhan eksperimen dan hacking
  • Seluruh codebase berisi sekitar 2800 baris dan disusun dengan kode minimal, mulai dari VAE hingga DiT, serta skrip pelatihan dan dataset
  • Komponen utamanya mencakup VAE, CLIP, encoder teks T5, transformer difusi multimodal, joint attention, dan lain-lain
  • Saat ini proyek masih memuat fitur eksperimental sehingga masih memerlukan lebih banyak pengujian

Pengenalan proyek miniDiffusion

miniDiffusion adalah proyek open source yang mengimplementasikan ulang fungsi inti Stable Diffusion 3.5 hanya dengan PyTorch
Dibandingkan Stable Diffusion 3.5 yang ada, proyek ini memiliki keunggulan berikut

  • Codebase-nya kecil, sekitar 2.800 baris, sehingga sangat cocok untuk menganalisis struktur secara langsung dan belajar
  • Dapat dimanfaatkan secara berguna untuk berbagai eksperimen machine learning dan hacking model
  • Ketergantungannya sangat sedikit dan hanya memakai library minimum

Struktur inti dan file penyusun

  • dit.py : bagian implementasi model utama Stable Diffusion
  • dit_components.py : komponen embedding, normalisasi, patch embedding, dan fungsi bantu DiT
  • attention.py : bagian implementasi algoritme Joint Attention
  • noise.py : mencakup scheduler Euler ODE untuk Rectified Flow
  • t5_encoder.py, clip.py : implementasi encoder teks T5 dan CLIP
  • tokenizer.py : implementasi tokenizer Byte-Pair dan Unigram
  • metrics.py : implementasi metrik evaluasi FID (Fréchet inception distance)
  • common.py : menyediakan fungsi bantu yang diperlukan untuk pelatihan
  • common_ds.py : implementasi dataset iterable yang mengubah gambar menjadi data pelatihan untuk DiT
  • Folder model : menyimpan checkpoint model dan log setelah pelatihan
  • Folder encoders : menyimpan checkpoint modul terpisah seperti VAE dan CLIP

⚠️ Fitur eksperimental dan kebutuhan pengujian miniDiffusion saat ini masih memuat fitur-fitur eksperimental dan masih memerlukan lebih banyak pengujian

Rincian komponen berdasarkan fungsi utama

Core Image Generation Modules

  • Implementasi VAE, CLIP, encoder teks T5
  • Implementasi tokenizer Byte-Pair, Unigram

SD3 Components

  • Multi-Modal Diffusion Transformer Model
  • Implementasi Flow-Matching Euler Scheduler
  • Logit-Normal Sampling
  • Penerapan algoritme Joint Attention

Skrip pelatihan dan inferensi model

  • Menyediakan skrip pelatihan dan inferensi untuk SD3 (Stable Diffusion 3.5)

Lisensi

  • Dirilis dengan lisensi MIT dan dibuat untuk tujuan edukasi dan eksperimen

Makna dan keunggulan proyek open source ini

  • Struktur model generasi gambar mutakhir setingkat Stable Diffusion 3.5 dapat dipelajari dan di-hack langsung hanya dengan PyTorch murni
  • Kodenya ringkas dan independen sehingga dioptimalkan untuk analisis struktur / tuning model / riset algoritme baru
  • Teknik multimodal, transformer, dan attention terbaru dapat dipraktikkan secara langsung
  • Menyediakan fondasi untuk bereksperimen dengan aman secara terpisah dari proyek komersial

1 komentar

 
GN⁺ 2025-06-15
Opini Hacker News
  • Implementasi referensi Flux benar-benar memiliki struktur yang minimal, jadi layak dilihat jika ada yang tertarik

    • GitHub Flux

    • Kelebihan proyek minRF adalah memudahkan untuk mulai melatih model difusi kecil dengan memanfaatkan rectified flow

    • GitHub minRF

    • Implementasi referensi Stable Diffusion 3.5 juga ditulis cukup ringkas sehingga cocok dijadikan rujukan

    • GitHub SD 3.5

    • Implementasi referensi sering kali tidak terlalu terawat dan penuh bug

      • Sebagai contoh, kasus seperti tokenizer CLIP milik OpenAI: itu bukan versi yang dipakai untuk pelatihan resmi, hanya referensi, tetapi bug-nya tetap tidak diperbaiki dan malah tersalin sama persis ke banyak proyek
      • Flux juga bukan yang benar-benar dipakai saat pelatihan, dan memiliki bug yang bisa menimbulkan sedikit masalah di cudagraphs dan sebagainya
      • Karena bergantung pada referensi CLIP, sementara CLIP sendiri punya bug, struktur seperti ini pada akhirnya ikut menyebarkan bug tersebut
  • Muncul pertanyaan apakah proyek miniDiffusion benar-benar berarti menggunakan model Stable Diffusion 3.5

    • Kode terkait

    • Dataset pelatihannya sangat kecil dan hanya berisi foto terkait fesyen

    • Dataset fesyen

    • Dataset tersebut dipakai untuk latihan fine-tuning model difusi

      • Ini memang implementasi ulang SD3 dalam bentuk kode baru, tetapi karena keterbatasan hardware saya, bobotnya diambil dari HuggingFace untuk digunakan
  • Penasaran apakah memakai PyTorch murni memberi keuntungan performa di GPU non-NVIDIA, atau apakah PyTorch sudah sedemikian dioptimalkan untuk CUDA sehingga vendor GPU lain sulit bersaing

    • PyTorch berjalan cukup baik juga di Apple Silicon

      • Hanya saja, GPU Apple sulit menghasilkan performa komputasi setara GPU kelas atas NVIDIA, jadi sulit dibandingkan secara langsung
      • Sebagai referensi, ada sedikit keunikan saat memakai PyTorch di Apple Silicon
        • Setiap tensor dianggap "dimiliki" oleh perangkat tertentu (CPU atau GPU), sehingga perpindahan data menyebabkan penyalinan penuh
        • Mac memiliki arsitektur unified memory, tetapi PyTorch tetap bekerja dengan mekanisme penyalinan data
    • Beban kerja ML juga bisa dijalankan di perangkat non-NVIDIA seperti AMD melalui Vulkan

      • Jika dukungan untuk ekstensi yang baru diperkenalkan seperti cooperative matrix dan fitur-fitur baru di level driver terus bertambah, ada kemungkinan selisih performa yang tinggal beberapa persen dibanding CUDA juga akan hilang
    • Dukungan ROCm di PyTorch berkembang sangat lambat, dan bahkan jika berhasil dijalankan pun kecepatannya lambat

    • PyTorch memang berjalan cukup baik di ROCm, tetapi saya tidak yakin apakah sudah benar-benar setara sepenuhnya

  • Pada kode PyTorch,

        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)
    

    ada usulan untuk mencoba menggantinya dengan

        self.qkv = nn.Linear(embed_size, 3*embed_size, bias = False)
        # di dalam fungsi forward
        qkv = self.qkv(x)
    

seperti ini

  • Kalau dilakukan seperti ini, parameter q, k, v akan saling terhubung, tidak lagi terpisah independen seperti sebelumnya

    • Kalau saya sedang terlalu lelah dan jadi salah paham, mohon dimaklumi
  • Ini tampak seperti materi yang bagus untuk para pembelajar

    • Saya penasaran apakah ada tutorial atau panduan yang bahkan bisa diikuti pemula

    • Ada pelajaran dari fast.ai untuk mengimplementasikan Stable Diffusion secara langsung

  • Muncul pertanyaan apakah ini berarti Stable Diffusion bisa dipakai tanpa batasan lisensi

    • Tidak, algoritme inferensi/pelatihan itu sendiri (matematikanya) tidak menjadi objek hak cipta, tetapi OP hanya mengimplementasikan ulang kodenya
      • Yang menjadi isu hak cipta adalah modelnya sendiri (bobot/weights), dan OP tidak melatihnya sendiri karena tidak punya data maupun daya komputasi
  • Terus terang agak memalukan, tetapi saya penasaran apa hal baru yang sebenarnya kita peroleh sebelum dan sesudah repositori ini ada

    • Saya pribadi cenderung menghindari membuat model, dan selama ini lebih banyak mengamati hasilnya dari samping

    • Saya samar-samar mengira bahwa skrip inferensi/pelatihan berbasis PyTorch sudah tersedia secara terbuka sejak lama

    • Setidaknya saya mengira skrip inferensi akan dibagikan bersama saat model dirilis, dan skrip fine-tuning/pelatihan juga mungkin ada

    • Saya tidak yakin apakah proyek ini adalah penulisan ulang model lama dengan gaya "clean room" atau "dirty room", atau justru karena kode PyTorch yang ada pun selama ini terlalu rumit akibat campuran CUDA/C sehingga versi PyTorch murni memang punya makna besar

    • Pokoknya saya benar-benar tidak tahu, jadi akan bagus kalau ada yang bisa menjelaskannya

      • Nilai utama proyek ini adalah "implementasi dengan dependensi seminimal mungkin"

        • Saya belum pernah benar-benar menjalankan SD 3.5, tetapi tampaknya ini dibangun di atas library huggingface, dan menurut saya pribadi dependensi huggingface terlalu rumit sehingga tanpa menyamakan lingkungan hampir persis dengan lingkungan pengembang, sering kali bahkan sulit untuk sekadar menjalankannya
        • Terutama beberapa bulan atau beberapa tahun setelah rilis asli, menjalankan model tertentu jadi sangat sulit
        • Sebagai contoh, kalau melihat file requirements.txt referensi Stability AI untuk SD3.5, bahkan versi paket pun tidak ditentukan, dan karena memuat library besar seperti transformers, ini benar-benar merepotkan dalam praktik kerja nyata
      • Stability AI mendistribusikan model Stable Diffusion di bawah Stability AI Community License, jadi tidak "sepenuhnya bebas" seperti MIT

        • Modifikasi bobot dengan cara tertentu tidak diizinkan
        • Paket ini memungkinkan menjalankan model (inferensi), atau melakukan fine-tuning dengan bobot AI yang sudah ada
        • Sangat bagus untuk belajar dan pelatihan, tetapi isu lisensi tetap ada
  • Saat memikirkan SD 3.5 (atau versi mana pun), saya menganggap bagian inti ada pada bobot yang dihasilkan dari proses pelatihan

    • Kodenya sendiri relatif kurang penting dari sisi kualitas hasil atau performa
    • Namun ini belum tentu penilaian yang tepat, dan saya tidak bermaksud meremehkan upaya seperti ini
  • Saya penasaran soal kegunaan praktis sumber akademik asli yang dirilis oleh grup CompViz dari Ludwig Maximilian University

  • Saya penasaran apakah implementasi diffusion transformer (DiT) di sini benar-benar mengimplementasikan cross-token attention seperti pada SD 3.5 versi penuh, atau disederhanakan demi keterbacaan kode