StreamDiffusion: Solusi Tingkat Pipeline untuk Generasi Interaktif Real-Time
(github.com/cumulo-autumn)- StreamDiffusion adalah pipeline yang menyempurnakan pembuatan gambar berbasis difusi untuk generasi interaktif real-time, dengan tujuan meningkatkan performa teknik pembuatan gambar difusi yang ada
- Fitur utamanya terdiri dari Stream Batch, Residual Classifier-Free Guidance, Stochastic Similarity Filter, IO Queues, prakomputasi KV-cache, dan alat akselerasi model
- Pada lingkungan RTX 4090, Core i9-13900K, Ubuntu 22.04.3 LTS, SD-turbo mencatat Txt2Img 106,16fps dan Img2Img 93,897fps pada 1 denoising step
- Demo real-time tersedia di
demo/realtime-txt2imgdandemo/realtime-img2img; demo Img2Img menggunakan feed webcam live atau tangkapan layar di browser web - Digunakan dengan membungkus
StableDiffusionPipelinedari Diffusers, dan eksekusi yang lebih cepat dapat dikonfigurasi melalui penggabungan LCM-LoRA, Tiny VAE, xformers, serta akselerasi TensorRT
Tujuan dan Performa StreamDiffusion
- StreamDiffusion adalah pipeline difusi untuk generasi interaktif real-time
- Bertujuan menyediakan peningkatan performa bagi teknik pembuatan gambar berbasis difusi saat ini
- Makalahnya terhubung ke arXiv 2312.12491 dan Hugging Face Papers
- Lingkungan pengukuran performa untuk pembuatan gambar dengan pipeline yang diusulkan adalah sebagai berikut
- GPU: RTX 4090
- CPU: Core i9-13900K
- OS: Ubuntu 22.04.3 LTS
- Tabel performa
- SD-turbo: denoising step 1, Txt2Img 106,16fps, Img2Img 93,897fps
- LCM-LoRA + KohakuV2: denoising step 4, Txt2Img 38,023fps, Img2Img 37,133fps
Fitur Utama
-
Stream Batch
- Menyederhanakan pemrosesan data melalui operasi batch yang efisien
-
Residual Classifier-Free Guidance
- Mekanisme guidance yang ditingkatkan untuk mengurangi duplikasi komputasi
-
Stochastic Similarity Filter
- Meningkatkan efisiensi penggunaan GPU dengan teknik filtering lanjutan
-
IO Queues
- Fitur yang membantu eksekusi lebih mulus dengan mengelola operasi input dan output secara efisien
-
Pre-Computation for KV-Caches
- Meningkatkan kecepatan pemrosesan dengan mengoptimalkan strategi caching
-
Model Acceleration Tools
- Menggunakan berbagai alat untuk optimasi model dan peningkatan performa
Instalasi dan Cara Menjalankan
- StreamDiffusion dapat diinstal dengan pip, conda, dan Docker
- Contoh lingkungan Python yang disarankan adalah lingkungan conda berbasis
python=3.10atauvenv - Contoh instalasi PyTorch dibedakan antara CUDA 11.8 dan CUDA 12.1
- CUDA 11.8:
torch==2.1.0,torchvision==0.16.0,xformers - CUDA 12.1:
torch==2.1.0,torchvision==0.16.0,xformers
- CUDA 11.8:
- Cara instalasi pengguna
- Versi terbaru disarankan:
pip install git+https://github.com/cumulo-autumn/StreamDiffusion.git@main/…] - Versi stabil:
pip install streamdiffusion[tensorrt] - Ekstensi TensorRT diinstal dengan
python -m streamdiffusion.tools.install-tensorrt
- Versi terbaru disarankan:
- Jika menginstal versi stabil di Windows, Anda mungkin perlu menginstal
pywin32tambahan - Instalasi Docker ditujukan untuk lingkungan yang sudah siap TensorRT, dan dijalankan dengan opsi
--gpus allsetelahdocker build
Demo dan Contoh Penggunaan
- Contoh dapat dijalankan dari direktori
examples - Demo Txt2Img real-time berada di direktori
demo/realtime-txt2img - Demo Img2Img real-time berada di direktori
demo/realtime-img2img- Feed webcam live atau tangkapan layar dapat digunakan di browser web
- Alur penggunaan dasar adalah memuat
StableDiffusionPipelinedari Diffusers lalu membungkusnya denganStreamDiffusion - Contoh Img2Img memuat model
KBlueLeaf/kohaku-v2.1dan mengonfigurasi stream dengant_index_list=[32, 45]- Jika model bukan LCM, gunakan
load_lcm_lora()danfuse_lora() - Untuk akselerasi tambahan, gunakan Tiny VAE dari
madebyollin/taesd - Aktifkan attention hemat memori xformers dengan
enable_xformers_memory_efficient_attention()
- Jika model bukan LCM, gunakan
- Contoh Txt2Img menggunakan
t_index_list=[0, 16, 32, 45], dan untuk teks-ke-gambar disarankan menggunakancfg_type="none" - Jumlah warming-up harus setidaknya
len(t_index_list) x frame_buffer_size
Akselerasi TensorRT
- Untuk pembuatan yang lebih cepat, kode aktivasi xformers dapat diganti dengan kode akselerasi TensorRT
- Gunakan
accelerate_with_tensorrtdaristreamdiffusion.acceleration.tensorrt - Konfigurasi contoh meneruskan
stream,"engines", danmax_batch_size=2 - Ekstensi TensorRT diperlukan, dan pembangunan engine memerlukan waktu
- Setelah engine dibangun, eksekusi berjalan lebih cepat daripada contoh sebelumnya
Stochastic Similarity Filter
- Stochastic Similarity Filter mengurangi operasi transformasi ketika perubahan dari frame sebelumnya pada input video kecil
- Dengan mengurangi operasi transformasi, beban pemrosesan GPU dapat diringankan
- Cara menggunakannya adalah dengan memanggil
stream.enable_similar_image_filter() - Argumen yang dapat dikonfigurasi
similar_image_filter_threshold: ambang kemiripan antara frame sebelumnya dan frame saat ini sebelum pemrosesan dijedasimilar_image_filter_max_skip_frame: interval maksimum yang diizinkan selama jeda sebelum transformasi dilanjutkan
Residual CFG
- RCFG adalah metode untuk mengaproksimasi CFG dengan kompleksitas komputasi yang dapat bersaing dengan kasus tanpa CFG
- Dapat ditentukan melalui argumen
cfg_typepadaStreamDiffusion - RCFG memiliki dua jenis
- RCFG Self-Negative: cara tanpa item penetapan negative prompt
- RCFG Onetime-Negative: cara yang memungkinkan penetapan negative prompt
- Perbandingan kompleksitas komputasi
- Tanpa CFG: N
- CFG biasa: 2N
- RCFG Self-Negative: N
- RCFG Onetime-Negative: N+1
- Nilai
cfg_typeadalah sebagai berikut- Tanpa CFG:
"none" - CFG biasa:
"full" - RCFG Self-Negative:
"self" - RCFG Onetime-Negative:
"initialize"
- Tanpa CFG:
deltamemiliki efek pelonggaran yang mengatur efek RCFG
Model dan Sumber Daya yang Digunakan
- Demo video dan gambar di repositori dibuat menggunakan LCM-LoRA + KohakuV2, SD-Turbo
- Model KohakuV2 dapat diunduh dari Civitai dan Hugging Face
- SD-Turbo juga dapat digunakan di Hugging Face Space
1 komentar
Komentar Hacker News
Makalah Arxiv ada di sini: https://arxiv.org/abs/2312.12491
Sepertinya ini bisa dibuat lebih cepat daripada pengukuran dasar pada 4090. Dengan SDXL Turbo, bahkan tanpa optimasi dan hanya 1 iterasi, sudah bisa mencapai 10fps
Namun, peningkatan seperti filter kemiripan probabilistik yang mencegah generasi yang tidak perlu tampak bagus untuk mendapatkan hasil cepat tanpa harus menjaga GPU selalu di 100%
Rasanya sampai tidak realistis. Terasa seperti 10 tahun berlalu dalam 1 tahun
apt-get installBaru saja mencoba demo
realtime-text2img, dan memakai npm di frontend terasa berlebihan untuk penggunaan ini. Aku mengubahnya agar hanya menghasilkan 1 gambar alih-alih 16, dan di laptop RTX-3080 pun berjalan dengan baik. Sepertinya keluar sekitar 2 gambar per detikEdit: demo
examples\screenterasa hampir seperti real-time. Di jendelanya tertulis 4fps, tapi aku tidak yakin itu tepatnya berarti apaEdit: tapi kekuatan denoising pada img2img sangat rendah, jadi gambar yang dikembalikan hanya sedikit berbeda dari gambar aslinya
Makalah model generatif memang selalu sulit dinilai sebelum dijalankan sendiri. Karena harus ditunjukkan ke reviewer, hasil yang dimasukkan mau tak mau adalah hasil yang sudah dipilih. Menurutku ini bukan hal yang baik, tapi memang begitulah kenyataannya sekarang
Di sini mereka memakai autoencoder kecil? Artspew juga melakukan itu dan menghasilkan FPS lebih tinggi, tetapi tidak memakai TensorRT, memakai Triton, dan kualitasnya buruk sekali. Meski begitu tetap keren
Bagaimanapun juga, walaupun kualitasnya ternyata jauh di bawah yang ditampilkan, ini tetap mengesankan, hanya saja sulit untuk benar-benar tahu
Aku penasaran apakah 100fps berarti bisa memasukkan input baru setiap 10ms dan menerima output baru setiap 10ms. Atau apakah untuk mendapatkan throughput rata-rata itu input perlu dikelompokkan dan diproses secara batch?
Bagian yang lambat pada model adalah tahap memuat model. Setelah modelnya sudah dimuat, seharusnya kita bisa mengirim input apa pun yang diinginkan
Secara intuitif, proses parsing dan pengiriman data gambar sepertinya bukan bottleneck di sini
Hampir langsung berjalan persis seperti yang tertulis di dokumentasi. Banyak demo seperti ini biasanya rusak dan mengeluarkan error mendalam yang aneh, tapi yang ini baik-baik saja
Dibuat dengan bagus. Layak dicoba. Kalau ingin membuat sesuatu yang bukan bergaya anime, cukup ganti model di
realtime-txt2imgpadaserver.py. Misalnya diarahkan ke https://huggingface.co/runwayml/stable-diffusion-v1-5 dan itu juga berjalan baikHasilnya memang sangat cepat. Tidak luar biasa, tapi cepat. Kalau diganti ke SDXL lewat LCM-LoRA https://huggingface.co/latent-consistency mungkin hasilnya bisa lebih baik, tetapi sejak titik itu semuanya mulai jadi sulit dan mulai muncul crash misterius seperti yang kusebut sebelumnya. Di situlah pekerjaan nyata mulai diperlukan
Lingkunganku adalah 4090/3990x/CUDA 12.2/debian sid, jadi bisa berbeda tergantung lingkungan
Demo karakter perempuan yang bergerak masuk dan keluar frame itu bekerja bagaimana? Apakah itu ControlNet?
Di Apple Silicon kira-kira fps-nya berapa?
Namun pada harga refurbished yang saat ini mirip, sekitar 1.800 dolar, Studio M1 Max 64GB sekitar 13 kali lebih lambat daripada RTX 4090 24GB untuk AI generatif SD1.5 dan SDXL
Gambar 512x512, 5 langkah, selesai dalam 5 detik. Tidak memakai refiner, upscaler, atau pemulihan wajah
Setahuku DrawThings masih belum dioptimalkan untuk SDXL Turbo atau generasi berbasis pipeline
Sebagai perbandingan, jika memakai SDXL Base+Refiner dengan pemulihan wajah aktif dan membuat gambar 2k x 2k, 50 langkah, itu memakan waktu sekitar 120 detik
Terutama untuk gaya anime, karena pada dasarnya sering digambar satu frame untuk setiap dua frame, jadi mungkin 12fps pun masih cukup bisa diterima
Apakah ada video yang bisa ditonton di suatu tempat?