- 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
Komentar Hacker News