1 poin oleh GN⁺ 2023-12-25 | 1 komentar | Bagikan ke WhatsApp
  • 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-txt2img dan demo/realtime-img2img; demo Img2Img menggunakan feed webcam live atau tangkapan layar di browser web
  • Digunakan dengan membungkus StableDiffusionPipeline dari 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.10 atau venv
  • 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
  • Cara instalasi pengguna
  • Jika menginstal versi stabil di Windows, Anda mungkin perlu menginstal pywin32 tambahan
  • Instalasi Docker ditujukan untuk lingkungan yang sudah siap TensorRT, dan dijalankan dengan opsi --gpus all setelah docker 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 StableDiffusionPipeline dari Diffusers lalu membungkusnya dengan StreamDiffusion
  • Contoh Img2Img memuat model KBlueLeaf/kohaku-v2.1 dan mengonfigurasi stream dengan t_index_list=[32, 45]
    • Jika model bukan LCM, gunakan load_lcm_lora() dan fuse_lora()
    • Untuk akselerasi tambahan, gunakan Tiny VAE dari madebyollin/taesd
    • Aktifkan attention hemat memori xformers dengan enable_xformers_memory_efficient_attention()
  • Contoh Txt2Img menggunakan t_index_list=[0, 16, 32, 45], dan untuk teks-ke-gambar disarankan menggunakan cfg_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_tensorrt dari streamdiffusion.acceleration.tensorrt
  • Konfigurasi contoh meneruskan stream, "engines", dan max_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 dijeda
    • similar_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_type pada StreamDiffusion
  • 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_type adalah sebagai berikut
    • Tanpa CFG: "none"
    • CFG biasa: "full"
    • RCFG Self-Negative: "self"
    • RCFG Onetime-Negative: "initialize"
  • delta memiliki efek pelonggaran yang mengatur efek RCFG

Model dan Sumber Daya yang Digunakan

1 komentar

 
GN⁺ 2023-12-25
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

    • Kalau ini nanti bisa menggantikan pekerjaanku, aku berharap bisa menjalankannya di PC dan menghubungkannya ke Slack. Jadi pemberi kerja akan mendapat hasil yang mirip seperti kalau aku mengerjakannya sendiri, dan aku bisa tetap digaji tanpa benar-benar menghabiskan waktu untuk bekerja, lalu akhirnya fokus pada hobi. Memang arahnya semua akan jadi seperti ini, kan?
    • Seluruh ekosistem AI open source sekarang terasa seperti ini. Hampir setiap hari ada kemajuan baru yang membuat hal yang tadinya dianggap mustahil menjadi mungkin, dan sangat sulit mengikuti semua perubahannya
    • Sebagai developer frontend, sekarang aku jadi paham orang-orang yang dulu mengeluh bahwa dunia frontend berubah terlalu cepat untuk diikuti
    • Perangkat lunak ini berkembang lebih cepat daripada aku menjalankan apt-get install
    • Jadi teringat game incremental (https://www.reddit.com/r/incremental_games/). Tapi sebaiknya jangan mulai main game seperti itu. Liburanmu bisa hancur karenanya
  • Baru 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 detik
    Edit: demo examples\screen terasa hampir seperti real-time. Di jendelanya tertulis 4fps, tapi aku tidak yakin itu tepatnya berarti apa
    Edit: tapi kekuatan denoising pada img2img sangat rendah, jadi gambar yang dikembalikan hanya sedikit berbeda dari gambar aslinya

    • Aku penasaran bagaimana kualitas sebenarnya, variasinya, dan kesesuaian dengan prompt. Sudah beberapa hari aku tidak bisa memakai GPU jadi belum bisa mengeceknya sendiri
      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?

    • Aku belum mencobanya sendiri, tapi dugaanku pemrosesan batch tidak akan diperlukan
      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-txt2img pada server.py. Misalnya diarahkan ke https://huggingface.co/runwayml/stable-diffusion-v1-5 dan itu juga berjalan baik
    Hasilnya 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?

    • Itu input video. Menurut tulisan tersebut, filter kemiripan probabilistik mengurangi kerja transformasi saat perubahan dari frame sebelumnya kecil pada input video, sehingga menurunkan beban pemrosesan GPU. Frame merah pada GIF di atas adalah contohnya
    • Saat ini ada issue GitHub yang dibuka untuk menambahkan dukungan ControlNet, jadi sepertinya itu bukan ControlNet. Kelihatannya hanya img2img yang memakai prompt dan skala rcfg
    • Jadi maksudnya yang kiri adalah gambar asli dan yang kanan adalah gambar hasilnya?
  • Di Apple Silicon kira-kira fps-nya berapa?

    • Karena tidak ada dukungan MPS, jadi 0
      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
    • Aku menjalankan SDXL Turbo dengan DrawThings di M1 Pro dan RAM 32GB
      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
    • Setidaknya mungkin bisa mencapai sekitar 1/8, tetapi akan luar biasa kalau di Apple bisa berjalan minimal 24fps. Mungkin dengan sedikit interpolasi itu bisa dicapai
      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?