1 poin oleh GN⁺ 2023-07-19 | 1 komentar | Bagikan ke WhatsApp
  • Anda harus menjalankan demo WebGPU Stable Diffusion di Chrome versi terbaru dengan flag "Experimental WebAssembly" dan "Experimental WebAssembly JavaScript Promise Integration (JSPI)" diaktifkan.
  • Setiap langkah inferensi pada demo memerlukan sekitar 1 menit, dan dibutuhkan tambahan sekitar 10 detik untuk menjalankan decoder VAE guna menghasilkan gambar.
  • Jika DevTools dibiarkan terbuka, demo akan berjalan sekitar 2 kali lebih lambat.
  • Model UNET yang digunakan dalam demo hanya berjalan di CPU, dan tab browser bisa macet, tetapi ini 10% lebih cepat daripada menjalankannya di GPU.
  • Jumlah langkah minimum untuk mendapatkan hasil yang dapat diterima dalam demo adalah 20. Namun, untuk tujuan demonstrasi, 3 langkah sudah cukup.
  • File model akan di-cache, jadi tidak perlu diunduh setiap kali menjalankan demo.
  • Jika muncul error "protobuf parsing failed", Anda dapat membuka Application -> Storage di DevTools lalu menghapus data situs.
  • Jika muncul error "sbox_fatal_memory_exceeded", berarti RAM tidak cukup untuk menjalankan demo. Anda bisa mencoba memuat ulang tab atau browser.
  • Demo ini dimungkinkan dengan mem-porting StableDiffusionPipeline dari Python ke JS, serta menambal onnxruntime dan emscripten+binaryen agar dapat mengalokasikan dan menggunakan memori lebih dari 4GB.
  • Saat ini demo lambat karena belum mendukung multithreading dan hanya menggunakan satu inti CPU. Keterbatasan lain adalah belum adanya dukungan memori 64-bit melalui konstruktor WebAssembly.Memory.
  • Demo berjalan di GPU, tetapi webgpu dan onnxruntime masih berada pada tahap awal sehingga banyak pekerjaan belum diimplementasikan. Data terus-menerus dipindahkan antara GPU dan CPU melalui JS sehingga pemrosesan menjadi lambat. Jika lebih banyak pekerjaan memiliki kernel JS, demo akan menjadi lebih cepat.
  • Anda dapat menjalankan demo secara lokal menggunakan kode yang tersedia di GitHub.
  • Dengan onnxruntime yang telah ditambal, Anda dapat menjalankan LLM besar dengan transformers.js, tetapi dibatasi pada memori 8GB. Dengan paket tersebut, Anda dapat memuat bobot hingga sekitar 4GB.
  • Penulis sebelumnya memiliki pengalaman menambahkan akselerasi GPU ke binding node.js, sehingga berencana mengajukan pull request ke repositori onnxruntime.

1 komentar

 
GN⁺ 2023-07-19
Komentar Hacker News
  • Tim MLC telah mengimplementasikan dukungan untuk Stable Diffusion dan model bahasa besar.
  • Browser telah berevolusi hingga mampu menangani tugas kompleks seperti Stable Diffusion.
  • Untuk menggunakan Stable Diffusion, diperlukan Chrome versi terbaru dengan flag tertentu yang diaktifkan.
  • Stable Diffusion juga telah diintegrasikan ke situs web lain, seperti generator latar belakang kustom.
  • Pertimbangkan untuk menggunakan service worker agar thread utama tidak macet selama proses yang terikat CPU.
  • Kasus penggunaan Stable Diffusion mencakup pembuatan gambar real-time tanpa perlu memuat ulang halaman.
  • Ada potensi untuk aplikasi masa depan seperti chatbot WebGPU atau penambangan Bitcoin saat GPU sedang menganggur.
  • Sebagian pengguna menunggu hingga WebGPU tersedia di Firefox.
  • Internet tanpa iklan diajukan sebagai sebuah kemungkinan.