4 poin oleh GN⁺ 2026-02-11 | 1 komentar | Bagikan ke WhatsApp
  • Implementasi berbasis Rust yang dapat menjalankan pengenalan suara streaming baik di lingkungan native maupun browser, menggunakan framework Burn ML
  • Model ini berbasis Voxtral Mini 4B Realtime milik Mistral, dan melakukan inferensi sepenuhnya di sisi klien dalam tab browser melalui WASM + WebGPU
  • Model terkuantisasi Q4 GGUF (2,5GB) dapat dijalankan di browser, sementara model F32 berbasis SafeTensors (9GB) berjalan di lingkungan native
  • Untuk mengatasi batasan browser (alokasi 2GB, ruang alamat 4GB, pembatasan pembacaan GPU, dll.), diterapkan teknik seperti sharding, pemuatan dua tahap, dan pemrosesan tensor asinkron
  • Dirilis dengan lisensi Apache-2.0, dan demo real-time dapat dicoba di HuggingFace Spaces

Gambaran umum Voxtral Mini 4B Realtime (Rust)

  • Model Voxtral Mini 4B Realtime milik Mistral diimplementasikan sepenuhnya dengan Rust dan framework Burn ML
    • Pengenalan suara streaming dapat dijalankan di lingkungan lokal dan browser
    • Versi browser memanfaatkan WASM (WebAssembly) dan WebGPU untuk berjalan di sisi klien
  • Model terkuantisasi Q4 GGUF (sekitar 2,5GB) berjalan di browser, sedangkan model F32 SafeTensors (sekitar 9GB) digunakan di lingkungan native
  • Menyediakan demo real-time di HuggingFace Spaces

Arsitektur

  • Audio masukan (16kHz mono) diubah menjadi Mel spectrogram, lalu dikonversi menjadi teks melalui encoder (32 lapisan) dan decoder (26 lapisan)
  • Tahap pemrosesan utama
    • Mel spectrogram → encoder (32 lapisan, 1280 dimensi) → Conv downsample 4x → adapter (3072 dimensi) → decoder (GQA 32Q/8KV)
  • Menyediakan dua jalur inferensi
    • F32 (native): berbasis SafeTensors, menggunakan operasi tensor Burn
    • Q4 GGUF (native + browser): kuantisasi GGUF Q4_0, menggunakan shader WGSL kustom

Solusi teknis untuk menjalankan di browser

  • Untuk menjalankan model 4B di browser, proyek ini mengatasi 5 batasan
    1. Batas alokasi 2GB → membaca banyak buffer dengan ShardedCursor
    2. Batas ruang alamat 4GB → pemuatan dua tahap (parse lalu lepaskan reader, kemudian finalisasi)
    3. Tabel embedding 1,5GiB → embedding Q4 di GPU + lookup baris di CPU
    4. Pembacaan sinkron GPU dilarang → menggunakan into_data_async().await
    5. Batas 256 workgroup → membatasi ukuran kernel dengan patch cubecl-wgpu

Koreksi padding Q4

  • mistral-common bawaan mem-padding audio dengan 32 token senyap, tetapi ini hanya mencakup setengah dari 38 prefix decoder
  • Akibatnya, model terkuantisasi Q4_0 dapat menghasilkan error pada input yang langsung dimulai dengan suara
  • Untuk mengatasinya, padding diperluas menjadi 76 token (=38 token decoder) agar seluruh prefix terisi dengan keheningan

Build dan pengujian

  • Opsi build
    • Default: cargo build --release (wgpu + native-tokenizer)
    • Untuk browser: wasm-pack build --target web --features wasm
  • Pengujian
    • Mendukung unit test dan integration test berbasis GPU
    • Pengujian browser E2E dilakukan dengan Playwright + lingkungan GPU nyata
    • Di CI, pengujian terkait dilewati karena tidak ada GPU

Persiapan model dan sharding

  • Untuk memenuhi batas ArrayBuffer browser (maksimal 512MB), file GGUF dibagi menjadi beberapa shard
    split -b 512m models/voxtral-q4.gguf models/voxtral-q4-shards/shard-  
    
  • Server pengembangan dan pengujian E2E akan otomatis menemukan shard

Lisensi dan sumber daya

1 komentar

 
GN⁺ 2026-02-11
Komentar Hacker News
  • Jika ada yang tertarik, @antirez telah merilis implementasi C untuk Voxtral Mini 4B
    Bisa dilihat di antirez/voxtral.c
    Saya membuat versi fork saya dan sedang menambahkan implementasi CUDA serta beberapa peningkatan
    Sudah bekerja cukup baik, tetapi masih belum menyamai kecepatan endpoint API Mistral AI

    • Saya penasaran bagaimana cara mulai mempelajari hal seperti kode inferensi atau implementasi CUDA seperti ini
      Rasanya saya perlu membaca dan belajar dari materi terkait dulu, bukan langsung menulis kode, jadi akan sangat membantu kalau ada panduan yang bisa dijadikan referensi
    • Ada juga implementasi Mistral lain, yaitu mistral.rs
      Saya tidak terlalu paham bedanya, tetapi respons komunitas tampaknya lebih baik ke yang ini
  • Setelah mencoba demonya, hasil baru keluar setelah menekan tombol Mic untuk merekam lalu “Stop and transcribe”
    Saya penasaran apakah ini bisa dibuat menjadi mode realtime sungguhan di mana subtitle langsung muncul dalam 1–2 detik setelah pengguna berbicara
    Demo server Hugging Face melakukan itu dengan model 8.5GB berbasis GPU

    • Dengan kecepatan saat ini, realtime penuh memang sulit
      Namun, dengan membuat UI berbasis ring buffer, hal serupa tetap bisa diwujudkan
      Saya memakai Whisper seperti ini di Flutter, dan inferensi GGUF dari llama.cpp juga saya jalankan lewat Dart
      Bahkan di M4 Max ini belum realtime, sementara Whisper di perangkat sejak 2022 hampir realtime dengan ONNX
      Menurut saya, di hardware konsumen, kecepatan inferensi lebih penting daripada peningkatan akurasi (WER)
  • Arah seperti model terbuka on-premise inilah yang benar-benar dibutuhkan
    Baik pengguna maupun perusahaan lebih menyukai bentuk seperti ini. Sepertinya Mistral berhasil menangkap kebutuhan itu

    • Mistral mungkin sedang menghadapi momen seperti titik balik RedHat
      Era model terbuka tampaknya akan menjadi jauh lebih menarik sekarang
  • Keren sekali. Akan bagus jika bisa terintegrasi dengan handy.computer, dan saya juga penasaran apakah ada rencana untuk dukungan streaming

    • Saya ingin mem-port ini ke transcribe-rs agar bisa dipakai di Handy
      Versi pertama kemungkinan belum akan mendukung streaming
    • Saya sudah mencoba Handy, dan dibanding solusi sebelumnya, UI-nya jauh lebih ringan dan bersih
      Berkat itu saya jadi tahu tool yang bagus, dan sekarang rasanya dukungan Voxtral benar-benar dibutuhkan
  • Saya tidak terlalu paham model, tetapi saya pernah mencoba Nvidia Parakeet dan hasilnya sangat baik
    Saya penasaran, untuk model 9GB seperti ini, apakah agar bisa dipakai realtime model harus terus dimuat di memori GPU, atau boleh dimuat ulang setiap kali dipakai

    • Saya juga memakai Parakeet V3, dan keseimbangan kecepatan dan akurasinya yang terbaik
      Kalimat pendek hampir seketika, kalimat panjang berubah dalam 1–3 detik
      Sedikit penurunan akurasi tidak berarti untuk penggunaan berbicara dengan AI
      Aplikasi open source bernama Handy (tautan) memakai Parakeet V3, tetapi implementasi C jauh lebih lambat
      Dalam STT, kecepatan adalah inti dari UX
    • Saya menjalankan server ollama, dan loading model cukup cepat
      Latensi muncul saat memanggil model baru atau mengganti context besar
      Sebagian besar waktu model sudah dimuat, jadi tokens per second menjadi variabel utama
      Dalam arsitektur kompleks dengan banyak agen, pergantian context membuatnya lambat
      Prompt caching dari ik_llama membantu mempercepat dalam situasi seperti itu
      Singkatnya, selama Anda tidak sering mengganti model atau context, latensi loading bobot bukan masalah besar
  • Saya ragu apakah struktur di mana satu tab browser mengunduh model 2.5GB lalu segera menghapusnya itu efisien
    Walaupun kecepatan internet dan ruang penyimpanan makin murah, pendekatan seperti ini tetap terasa boros
    Komputasi sisi klien memang bagus, tetapi untuk model sebesar ini, menjalankannya di server tampaknya lebih masuk akal

    • Di lingkungan browser saat ini, model lokal memang sulit menjadi arus utama
      Namun, jika ada standar web API untuk LLM, situasinya bisa berubah
      Jika browser berkomunikasi dengan model pilihan pengguna dan mengabstraksi inferensi lokal/jarak jauh, model bisa dibagikan antarsitus
    • Teknologi baru selalu mengundang keluhan
      Jika pada 2026 model lokal 2.5GB masih dianggap masalah, saya jadi bertanya-tanya apa yang bisa disebut aman sekarang
      Kita berkembang dari mustahil → terpusat → lokal, dan kalau harganya 2.5GB, itu masih sangat layak diterima
  • Menjalankannya di browser memang keren, tetapi saya tidak ingin hidup di dunia di mana situs web diam-diam mengunduh 2.5GB di background

    • Saya pernah membandingkan Gemini Nano (model AI bawaan Chrome) dengan solusi berbasis server
      Nano disimpan di local storage dan dibagikan antar-situs, jadi cukup diunduh sekali
      Sepertinya Mistral tidak seperti itu
      Statistik terkait dirangkum dalam postingan blog ini
    • Tentu saya juga tidak ingin itu otomatis diunduh saat mengunjungi halaman web,
      tetapi menurut saya lingkungan sandbox browser lebih aman daripada memasang paket atau mengunduh executable
    • Saat ini pun untuk menampilkan satu landing page statis saja sudah memuat puluhan MB
      Sebentar lagi kita mungkin akan terbiasa dengan hal seperti ini :-)
  • Di lingkungan saya (Firefox, Asahi Linux, M1 Pro), ini tidak berfungsi dengan benar
    Saya mengatakan “hello”, lalu sekitar semenit kemudian kata-kata aneh terus keluar berulang-ulang

  • Ini pertanyaan sederhana, tetapi saya penasaran, model terbuka seperti Mistral dibanding OpenAI atau Anthropic itu ada di level seperti apa
    Apakah sudah cukup untuk memakai fitur LLM secara privat di mesin pribadi,
    atau masih sangat tertinggal dibanding model komersial

  • Proyek yang menarik, dan menyenangkan juga melihat framework burn dipakai
    Namun, saat saya menjalankannya di Chromium versi terbaru, sistem saya macet dan OS melakukan shutdown paksa
    Tepat setelah model selesai diunduh, koneksi VPN juga terputus, padahal tidak ada pembatasan bandwidth jadi saya tidak tahu penyebabnya