13 คะแนน โดย GN⁺ 2026-02-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2026-02-12
ความคิดเห็นจาก Hacker News
  • ฉันใช้ STT (การรู้จำเสียงพูด) โดยจับคู่แอปโอเพนซอร์ส Handy กับ Parakeet V3
    จนถึงตอนนี้ยังไม่เห็นอะไรที่เอาชนะชุดนี้ได้ทั้งในแง่ความเร็วและความแม่นยำ ถอดเสียงได้แทบจะทันที และการสูญเสียความแม่นยำเล็กน้อยก็ไม่ใช่ปัญหาเพราะ AI เข้าใจบริบท ได้
    ฉันลองรวม implementation ของ Voxtral C เข้ากับ Handy แล้ว แต่บน M1 Max MacBook (64GB) การถอดเสียงช้าเกินไป ยังมีแผนจะลอง implementation อื่น ๆ ต่อ

    • Handy ยอดเยี่ยม แต่เสียดายที่ STT ไม่ได้เป็นแบบ เรียลไทม์ และยังเป็นการประมวลผลแบบแบตช์
  • ฉันเป็นแฟนของโปรเจกต์ 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 หรือดิสก์

    • ตัวโมเดลเองยอดเยี่ยม แต่ใหญ่เกินไปสำหรับ local inference ส่วน Whisper medium แม้คุณภาพจะด้อยกว่า แต่เหมาะกับ สภาพแวดล้อมการใช้งาน มากกว่า
      ตอนนี้ฉันกำลังจะทดสอบโมเดลถอดเสียง Qwen 0.6 ตัวใหม่ ถ้าเป็นไปตาม benchmark ก็มีโอกาสสูงที่จะพัฒนาเป็นสายงานแบบเบาที่คำนึงถึงการปรับแต่งสำหรับ CPU ล้วนและ การ quantization แบบ 8bit ด้วย
      เนื่องจากต้องติดตั้งได้ในสภาพแวดล้อมเช่าเซิร์ฟเวอร์อย่าง Hetzner ด้วย ฉันจึงตั้งใจจะลองปรับแต่งแยกตามชุด Intel, AMD และ ARM
    • ฉันต้องการ ฟีดแบ็กแบบภาพ ที่ถอดเสียงไปพร้อมกับที่ฉันพูด อยากรู้ว่า voxtype รองรับสิ่งนั้นหรือไม่
      Handy บอกว่ามีฟีเจอร์ overlay แต่บนระบบของฉันมันไม่ทำงาน
    • ฉันขอโหวตให้ชุด voxtype กับโมเดล Whisper-base ค่อนข้างเร็วและแม่นยำดี
  • บน Linux ติดตั้งได้ง่าย แต่ยังทำ การถอดเสียงแบบเรียลไทม์ ไม่ได้เหมือน Whisper.cpp หรือ Moonshine
    ตัวเลือก --from-mic รองรับแค่ Mac ฉันเลยลองจับเสียงด้วย ffmpeg แต่เชื่อมต่ออินพุตไมค์ไม่สำเร็จ
    ดูเหมือนว่าสเปกเครื่องของฉันจะไม่พอสำหรับรันโมเดลค่าเริ่มต้น
    ฉันอยากลองใช้ โมเดล voxtral-q4.gguf

    • พอทดสอบบน Linux แล้ว โมเดลนี้ ช้าเกินไปสำหรับการถอดเสียงแบบเรียลไทม์ ใช้เวลาครึ่งวันในการประมวลผลไฟล์อินพุตยาว 12 นาที
    • ฉันอยากจับไม่ใช่แค่ไมค์ แต่รวมถึง เสียงจากพอร์ตมอนิเตอร์ ด้วย เพื่อทำ pipeline ถอดเสียงเว็บออดิโอแบบเรียลไทม์
      เพราะ Audacity กับ OBS Studio อัดได้ ก็เลยคิดว่าน่าจะทำแบบเรียลไทม์ได้เหมือนกัน
    • ถ้าใช้ ffmpeg อ่านเสียงจากไฟล์แล้วส่งต่อให้ voxtral ก็น่าจะทำงานได้
      ส่วนตัวคิดว่าน่าจะลองตามลำดับ 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