- Mistral Voxtral Realtime 4B คือ พายป์ไลน์การทำอนุมานที่พัฒนาด้วยภาษา C ล้วน สำหรับโมเดลนี้ โดยเป็นโครงสร้างแบบสแตนด์อโลนที่ไม่มีการพึ่งพาไลบรารีภายนอกเลย
- รองรับแบ็กเอนด์ Metal GPU acceleration (MPS) และ BLAS (OpenBLAS/Accelerate) พร้อมจัดการอินพุตเสียงแบบเรียลไทม์และเอาต์พุตโทเค็นผ่าน Streaming API
- ใช้ น้ำหนัก BF16 ที่แมปหน่วยความจำ, เอนโค้ดเดอร์แบบ sliding window, และ rolling KV cache เพื่อรักษาการใช้หน่วยความจำให้คงที่แม้กับอินพุตเสียงยาว
- รองรับวิธีป้อนข้อมูลเสียงหลายแบบผ่าน ไมโครโฟน, stdin pipe, และ การแปลงด้วย ffmpeg พร้อมมี การแสดงโทเค็นทางเลือก และ ตัวเลือกปรับค่าหน่วงเวลา (-I)
- เผยแพร่ภายใต้ MIT license และทำความเร็วได้ เร็วกว่าเรียลไทม์ประมาณ 2.5 เท่าเมื่อทดสอบบน Apple M3 Max ทำให้สามารถสร้างระบบรู้จำเสียงแบบโลคัลที่มีขนาดเบาได้
ภาพรวม Voxtral.c
- เป็น เอนจินอนุมานที่พัฒนาด้วย C ล้วน สำหรับ โมเดล Voxtral Realtime 4B ของ Mistral AI โดยไม่มีการพึ่งพาสิ่งใดนอกจากไลบรารีมาตรฐานของภาษา C
- แบ็กเอนด์ MPS ให้ความเร็วอนุมานสูง ส่วน BLAS (OpenBLAS/Accelerate) ใช้งานในสภาพแวดล้อมที่เน้น CPU
- ทำอนุมานแบบโลคัลได้ครบถ้วนโดยไม่ต้องใช้ Python runtime, CUDA, vLLM
- มี Python reference implementation แบบง่ายให้ด้วยผ่านไฟล์ python_simple_implementation.py
- ต้องใช้เพียง PyTorch, safetensors, soundfile และ soxr
ความสามารถหลัก
- Zero dependencies: รันได้ด้วย C ล้วนโดยไม่ต้องมีไลบรารีภายนอก
- Metal GPU acceleration: เปิดใช้งานอัตโนมัติบน Apple Silicon พร้อมการรวมงานคำนวณบน GPU และการประมวลผล attention แบบ batch
- Streaming output: โทเค็นที่สร้างขึ้นจะถูกส่งออกไปยัง stdout ทันที
- Streaming C API: ป้อนเสียงทีละส่วนและรับสตริงโทเค็นแบบเรียลไทม์
- น้ำหนักแบบ memory-mapped: โหลดไฟล์ safetensors โดยตรงผ่าน mmap และใช้งานได้ทันที
- รองรับอินพุตจากไมโครโฟน (macOS) : มีระบบตรวจจับความเงียบอัตโนมัติ
- Chunked Encoder: ประมวลผลเสียงเป็นชังก์ที่ซ้อนทับกันเพื่อคงการใช้หน่วยความจำให้สม่ำเสมอ
- Rolling KV Cache: บีบอัดแคชอัตโนมัติด้วย sliding window ขนาด 8192 ตำแหน่ง รองรับเสียงความยาวไม่จำกัด
วิธีใช้งาน
- คำสั่งพื้นฐาน
./voxtral -d voxtral-model -i audio.wav : รู้จำเสียงจากไฟล์
./voxtral -d voxtral-model --from-mic : รู้จำเสียงแบบเรียลไทม์จากไมโครโฟน (macOS)
- สามารถรับอินพุตไฟล์เสียงหลายฟอร์แมตผ่าน
ffmpeg pipe ได้
- การแสดงโทเค็นทางเลือก
- ใช้ตัวเลือก
--alt <cutoff> เพื่อแสดงตัวเลือกคำที่ออกเสียงใกล้เคียงร่วมด้วย
- ยิ่งค่า
cutoff สูง ก็ยิ่งแสดงตัวเลือกมากขึ้น
- การปรับค่าหน่วงเวลา (ตัวเลือก -I)
- ตั้งรอบการเรียกเอนโค้ดเดอร์เป็นหน่วยวินาที
- ค่าต่ำ (เช่น 0.5 วินาที) ให้ความหน่วงต่ำแต่ใช้ GPU สูง / ค่าสูง (เช่น 5 วินาที) ประมวลผลได้มีประสิทธิภาพกว่า
- ค่าเริ่มต้นคือ 2.0 วินาที และแนะนำ 1.0~2.0 วินาทีสำหรับการสตรีมแบบเรียลไทม์
โครงสร้าง C API
- มี Streaming API ที่อิงกับ vox_stream_t
feed() : ป้อนข้อมูลเสียง
get() : รับโทเค็น
finish() : ประมวลผลเสียงที่เหลือ
flush() : บังคับประมวลผลบัฟเฟอร์
- ตั้งจำนวนโทเค็นทางเลือกได้ด้วย vox_stream_set_alt()
- ประมวลผลไฟล์เดี่ยวแบบแบตช์ได้ผ่านฟังก์ชัน vox_transcribe()
การดาวน์โหลดและองค์ประกอบของโมเดล
- ดาวน์โหลดน้ำหนักโมเดลขนาดประมาณ 8.9GB จาก HuggingFace
consolidated.safetensors (น้ำหนัก BF16)
tekken.json (คำศัพท์ของโทเคไนเซอร์)
params.json (การตั้งค่าโมเดล)
- โมเดลใช้ Apache-2.0 license และโค้ดใช้ MIT license
เบนช์มาร์กประสิทธิภาพ
- อ้างอิงจาก Apple M3 Max (GPU 40 คอร์, RAM 128GB)
- แบ็กเอนด์ MPS: เอนโค้ดเดอร์ 284ms, ดีโค้ดเดอร์ 23.5ms/สเต็ป
- แบ็กเอนด์ BLAS: เอนโค้ดเดอร์ประมาณ 8 วินาที, ดีโค้ดเดอร์ 335ms/สเต็ป
- สำหรับเสียงยาว 60 วินาที ได้ค่าเฉลี่ย 31.6ms/สเต็ป หรือ เร็วกว่าเรียลไทม์ประมาณ 2.5 เท่า
- ดีโค้ดเดอร์รันการคำนวณทั้งหมดต่อโทเค็นด้วย Metal command buffer เพียงครั้งเดียว
สถาปัตยกรรมของโมเดล
- เป็นโมเดลสตรีมมิงเสียงเป็นข้อความขนาด รวม 4 พันล้านพารามิเตอร์ (4B)
- Audio encoder: causal transformer 32 ชั้น, 1280 มิติ, 32 หัว, หน้าต่าง 750
- Adapter: Linear(5120→3072) → GELU → Linear(3072→3072)
- LLM decoder: transformer 26 ชั้น (อิง Ministral-3), 3072 มิติ, GQA(32 heads/8KV)
- ใช้ Tekken tokenizer โดยมีขนาดคำศัพท์ 131,072
- ภาษาที่รองรับ: อังกฤษ, สเปน, ฝรั่งเศส, โปรตุเกส, ฮินดี, เยอรมัน, ดัตช์, อิตาลี, อาหรับ, รัสเซีย, จีน, ญี่ปุ่น, เกาหลี
ความต้องการหน่วยความจำ
- น้ำหนักโมเดล: 8.9GB (mmap แบบ on-demand)
- GPU cache: ประมาณ 8.4GB (หลังแปลง BF16 → F16)
- KV cache: สูงสุด 1.8GB (ถูกจำกัดด้วย sliding window)
- บัฟเฟอร์ทำงาน: ประมาณ 200MB
การบิลด์และแพลตฟอร์ม
- macOS Apple Silicon:
make mps (เร็วที่สุด)
- macOS Intel / Linux(OpenBLAS) :
make blas
- Ubuntu/Debian:
sudo apt install libopenblas-dev
- Fedora:
sudo dnf install openblas-devel
ไลเซนส์
- โค้ด: MIT
- โมเดล: Apache-2.0
- เป็นโอเพนซอร์สที่ทุกคนสามารถแก้ไขและเผยแพร่ต่อได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันใช้ STT (การรู้จำเสียงพูด) โดยจับคู่แอปโอเพนซอร์ส Handy กับ Parakeet V3
จนถึงตอนนี้ยังไม่เห็นอะไรที่เอาชนะชุดนี้ได้ทั้งในแง่ความเร็วและความแม่นยำ ถอดเสียงได้แทบจะทันที และการสูญเสียความแม่นยำเล็กน้อยก็ไม่ใช่ปัญหาเพราะ AI เข้าใจบริบท ได้
ฉันลองรวม implementation ของ Voxtral C เข้ากับ Handy แล้ว แต่บน M1 Max MacBook (64GB) การถอดเสียงช้าเกินไป ยังมีแผนจะลอง implementation อื่น ๆ ต่อ
ฉันเป็นแฟนของโปรเจกต์ voxtral.c และ flux2.c ของ Salvatore
หวังว่าจะยังคงถูกปรับแต่งต่อไปในฐานะตัวเลือกที่เบาและทำงานได้โดยไม่มี dependency ภายนอก แต่ตอนนี้ยังช้าเกินไปสำหรับการใช้งานจริง (อ้างอิงจากสภาพแวดล้อม AMD 7800X3D/Blas)
ตอนเพิ่ม ฟีเจอร์ Voice Input ให้ llms-py การรองรับ voxtype.io ของ Omarchy ให้ UX ดีที่สุด รองลงมาคือ Whisper.cpp
OpenAI Whisper แม้จะช้า แต่ก็ยังเป็นตัวเลือกการถอดเสียงแบบโลคัลที่เสถียร
อีกทั้ง Voxtral Transcription API ของ Mistral ก็น่าประทับใจมากในแง่ความเร็วและราคา — เร็วมากและถูกมากที่ $0.003 ต่อนาที ฉันคิดว่านี่เป็นตัวเลือกที่ดีที่สุดในสภาพแวดล้อมที่มีข้อจำกัดด้าน CPU หรือดิสก์
ตอนนี้ฉันกำลังจะทดสอบโมเดลถอดเสียง Qwen 0.6 ตัวใหม่ ถ้าเป็นไปตาม benchmark ก็มีโอกาสสูงที่จะพัฒนาเป็นสายงานแบบเบาที่คำนึงถึงการปรับแต่งสำหรับ CPU ล้วนและ การ quantization แบบ 8bit ด้วย
เนื่องจากต้องติดตั้งได้ในสภาพแวดล้อมเช่าเซิร์ฟเวอร์อย่าง Hetzner ด้วย ฉันจึงตั้งใจจะลองปรับแต่งแยกตามชุด Intel, AMD และ ARM
Handy บอกว่ามีฟีเจอร์ overlay แต่บนระบบของฉันมันไม่ทำงาน
บน Linux ติดตั้งได้ง่าย แต่ยังทำ การถอดเสียงแบบเรียลไทม์ ไม่ได้เหมือน Whisper.cpp หรือ Moonshine
ตัวเลือก
--from-micรองรับแค่ Mac ฉันเลยลองจับเสียงด้วย ffmpeg แต่เชื่อมต่ออินพุตไมค์ไม่สำเร็จดูเหมือนว่าสเปกเครื่องของฉันจะไม่พอสำหรับรันโมเดลค่าเริ่มต้น
ฉันอยากลองใช้ โมเดล voxtral-q4.gguf
เพราะ Audacity กับ OBS Studio อัดได้ ก็เลยคิดว่าน่าจะทำแบบเรียลไทม์ได้เหมือนกัน
ส่วนตัวคิดว่าน่าจะลองตามลำดับ file→ffmpeg→voxtral จากนั้น mic→ffmpeg→file และสุดท้าย mic→ffmpeg→voxtral
ในชื่อระบุว่าเป็นแบบ CPU only แต่จริง ๆ แล้วก็รองรับ การเร่งความเร็วด้วย GPU ด้วย มีระบุไว้อย่างชัดเจนในคำอธิบายของ repository
โปรเจกต์นี้กับ implementation ของ Rust runtime ขึ้นหน้าแรก HN พร้อมกัน เป็น การแข่งขันที่น่าสนใจ
มี implementation เวอร์ชัน MLX ด้วย → voxmlx
ฉันสนใจสาย speech-to-text (STT) มาก
อยากทำงานกับข้อมูลที่มีทั้งสำเนียงหลากหลายและคำศัพท์เฉพาะทางปะปนกัน แต่ไม่รู้ว่าถ้าจะฝึกโมเดลจากข้อมูลตัวอย่างเสียงขนาดใหญ่ที่ฉันมี ควรเริ่มจากตรงไหน ขอคำแนะนำหน่อย
ลองรันบน MacBook Pro M3 16GB แล้ว โหลดขึ้นแต่ ค้างหรือช้ามากเกินไป
รู้สึกแปลกดีที่งานซึ่งเมื่อ 20 ปีก่อนทำได้ด้วยขนาดราว 200MB ตอนนี้กลับต้องใช้ โมเดลขนาด 9GB