Mistral Voxtral Realtime 4B 음성 인식 모델의 순수 C 기반 CPU 전용 추론 구현
(github.com/antirez)- Mistral Voxtral Realtime 4B 모델을 C 언어만으로 구현한 추론 파이프라인으로, 외부 의존성이 전혀 없는 독립 실행형 구조
- Metal GPU 가속(MPS) 과 BLAS(OpenBLAS/Accelerate) 백엔드를 지원하며, 스트리밍 API를 통해 실시간 음성 입력과 토큰 출력을 처리
- 메모리 매핑된 BF16 가중치, 슬라이딩 윈도우 기반 인코더, 롤링 KV 캐시로 긴 오디오 입력에서도 메모리 사용을 일정하게 유지
- 마이크 입력, stdin 파이프, ffmpeg 변환을 통한 다양한 오디오 입력 방식 지원, 대체 토큰 표시와 지연 조절 옵션(-I) 제공
- MIT 라이선스로 공개되었으며, Apple M3 Max 기준 실시간보다 약 2.5배 빠른 속도를 달성해 경량화된 로컬 음성 인식 구현 가능
Voxtral.c 개요
-
Mistral AI의 Voxtral Realtime 4B 모델을 위한 순수 C 기반 추론 엔진으로, C 표준 라이브러리 외에는 의존성이 없음
- MPS 백엔드는 빠른 추론 속도를 제공하며, BLAS(OpenBLAS/Accelerate) 는 CPU 기반 환경에서 동작
- Python 런타임, CUDA, vLLM 없이도 완전한 로컬 추론 가능
-
python_simple_implementation.py 파일을 통해 단순한 Python 참조 구현도 함께 제공
- PyTorch, safetensors, soundfile, soxr만 필요
주요 기능
- Zero dependencies: 외부 라이브러리 없이 C만으로 실행 가능
- Metal GPU 가속: Apple Silicon 환경에서 자동 활성화, GPU 연산 융합 및 배치된 어텐션 처리
- 스트리밍 출력: 생성된 토큰이 즉시 stdout으로 출력
- Streaming C API: 오디오를 순차적으로 입력하고, 토큰 문자열을 실시간으로 수신
- 메모리 매핑 가중치: safetensors 파일을 mmap으로 직접 로드, 즉시 사용 가능
- 마이크 입력 지원(macOS) : 자동 무음 감지 기능 포함
- Chunked Encoder: 오디오를 겹치는 청크 단위로 처리해 메모리 사용량 일정 유지
- Rolling KV Cache: 8192 포지션 슬라이딩 윈도우로 캐시 자동 압축, 무제한 길이 오디오 처리 가능
사용 방법
-
기본 명령어
-
./voxtral -d voxtral-model -i audio.wav: 파일 기반 음성 인식 -
./voxtral -d voxtral-model --from-mic: 마이크 입력 실시간 인식(macOS) -
ffmpeg파이프를 통해 다양한 오디오 포맷 입력 가능
-
-
대체 토큰 표시
-
--alt <cutoff>옵션으로 유사 발음 후보를 함께 표시 -
cutoff값이 높을수록 더 많은 후보 표시
-
-
지연 조절 (-I 옵션)
- 인코더 호출 주기를 초 단위로 설정
- 낮은 값(예: 0.5초)은 낮은 지연, 높은 GPU 부하 / 높은 값(예: 5초)은 효율적 처리
- 기본값은 2.0초, 실시간 스트리밍에는 1.0~2.0초 권장
C API 구조
-
vox_stream_t 기반 스트리밍 API 제공
-
feed(): 오디오 입력 -
get(): 토큰 수신 -
finish(): 남은 오디오 처리 -
flush(): 버퍼 강제 처리
-
- vox_stream_set_alt() 로 대체 토큰 수 설정 가능
- vox_transcribe() 함수로 단일 파일 일괄 처리 가능
모델 다운로드 및 구성
-
HuggingFace에서 약 8.9GB의 모델 가중치 다운로드
-
consolidated.safetensors(BF16 가중치) -
tekken.json(토크나이저 어휘) -
params.json(모델 설정)
-
- Apache-2.0 라이선스 모델, MIT 라이선스 코드
성능 벤치마크
-
Apple M3 Max (40코어 GPU, 128GB RAM) 기준
- MPS 백엔드: 인코더 284ms, 디코더 23.5ms/스텝
- BLAS 백엔드: 인코더 약 8초, 디코더 335ms/스텝
- 60초 오디오 기준 평균 31.6ms/스텝, 실시간보다 약 2.5배 빠른 속도
- 디코더는 Metal 커맨드 버퍼 단일 호출로 토큰당 전체 연산 수행
모델 아키텍처
-
총 40억 파라미터(4B) 규모의 스트리밍 음성-텍스트 모델
- 오디오 인코더: 32층 causal transformer, 1280차원, 32헤드, 윈도우 750
- 어댑터: Linear(5120→3072) → GELU → Linear(3072→3072)
- LLM 디코더: 26층 transformer (Ministral-3 기반), 3072차원, GQA(32헤드/8KV)
- Tekken 토크나이저, 어휘 크기 131,072
- 지원 언어: 영어, 스페인어, 프랑스어, 포르투갈어, 힌디어, 독일어, 네덜란드어, 이탈리아어, 아랍어, 러시아어, 중국어, 일본어, 한국어
메모리 요구사항
- 모델 가중치: 8.9GB (온디맨드 mmap)
- GPU 캐시: 약 8.4GB (BF16→F16 변환 후)
- KV 캐시: 최대 1.8GB (슬라이딩 윈도우 제한)
- 작업 버퍼: 약 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
- 오픈소스 형태로 누구나 수정 및 재배포 가능
Hacker News 의견들
-
나는 오픈소스 앱 Handy와 Parakeet V3를 조합해 STT(음성 인식)를 사용하고 있음
속도와 정확도 면에서 이 조합을 능가하는 걸 아직 못 봤음. 거의 즉시 전사되고, 약간의 정확도 손실은 AI가 맥락을 읽는 능력 덕분에 문제되지 않음
Voxtral C 구현체를 Handy에 통합해봤지만, M1 Max MacBook(64GB)에서는 전사가 너무 느렸음. 다른 구현체들도 시도해볼 예정임- Handy는 훌륭하지만 STT가 실시간이 아니라 배치 처리 방식인 게 아쉬움
-
나는 Salvatore의 voxtral.c와 flux2.c 프로젝트의 팬임
외부 의존성 없이 가볍게 동작하는 옵션으로 계속 최적화되길 바람. 하지만 현재는 실제 사용엔 너무 느림 (AMD 7800X3D/Blas 환경 기준)
llms-py의 Voice Input 기능을 추가할 때 Omarchy의 voxtype.io 지원이 UX 면에서 가장 좋았고, 그다음이 Whisper.cpp였음
OpenAI Whisper는 느리지만 여전히 안정적인 로컬 전사 옵션임
또 Mistral의 Voxtral Transcription API는 속도와 가격 면에서 인상적이었음 — 분당 $0.003로 매우 빠르고 저렴함. CPU나 디스크 제약이 있는 환경에서 최고의 선택이라 생각함- 모델 자체는 훌륭하지만 로컬 추론에는 너무 큼. Whisper medium이 품질은 낮지만 환경 적합성 면에서는 더 나음
이제 새로 나온 Qwen 0.6 전사 모델을 테스트해보려 함. 벤치마크대로라면 CPU 전용 최적화와 8bit 양자화까지 고려한 경량 체인으로 발전할 가능성이 큼
Hetzner 같은 서버 임대 환경에서도 설치 가능해야 하므로, Intel·AMD·ARM 세트별 최적화를 시도할 예정임 - 나는 말하면서 동시에 전사되는 시각적 피드백이 필요함. voxtype이 그걸 지원하는지 궁금함
Handy는 오버레이 기능이 있다고 하지만 내 시스템에서는 작동하지 않음 - voxtype과 Whisper-base 모델 조합에 한 표 던짐. 꽤 빠르고 정확함
- 모델 자체는 훌륭하지만 로컬 추론에는 너무 큼. Whisper medium이 품질은 낮지만 환경 적합성 면에서는 더 나음
-
Linux에서 설치는 쉬웠지만 Whisper.cpp나 Moonshine처럼 실시간 전사는 아직 안 됨
--from-mic옵션이 Mac만 지원해서 ffmpeg로 오디오를 캡처해봤지만 마이크 입력 연결은 실패했음
내 시스템이 기본 모델을 돌리기엔 사양이 부족한 듯함.
voxtral-q4.gguf 모델을 써보고 싶음- Linux에서 테스트해보니 이 모델은 실시간 전사에는 너무 느림. 12분짜리 입력 파일을 처리하는 데 반나절이 걸렸음
- 마이크뿐 아니라 모니터 포트 오디오도 캡처해서 웹 오디오를 실시간 전사로 파이프라인 처리하고 싶음
Audacity나 OBS Studio로는 녹음이 되니, 실시간도 가능할 것 같음 - ffmpeg로 파일에서 오디오를 읽어 voxtral로 넘기면 작동할지도 모름
개인적으로는 file→ffmpeg→voxtral, 그다음 mic→ffmpeg→file, 마지막으로 mic→ffmpeg→voxtral 순으로 시도해볼 것 같음
-
제목에는 CPU 전용이라고 되어 있지만, 실제로는 GPU 가속도 지원함. 저장소 설명에 명확히 나와 있음
-
이 프로젝트와 Rust 런타임 구현체가 동시에 HN 메인에 올라와 있음. 흥미로운 경쟁 구도임
-
MLX 버전 구현체도 있음 → voxmlx
-
나는 음성-텍스트(STT) 분야에 관심이 많음
다양한 억양과 전문 용어가 섞인 데이터를 다루고 싶은데, 내가 가진 대규모 음성 샘플 데이터로 모델을 학습하려면 어디서부터 시작해야 할지 모르겠음. 조언을 구함 -
16GB M3 MacBook Pro에서 실행해봤는데, 로딩은 되지만 멈추거나 너무 느림
-
20년 전에는 200MB 정도로 가능했던 일을 이제는 9GB 모델이 필요하다는 게 이상하게 느껴짐