-
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
- 오픈소스 형태로 누구나 수정 및 재배포 가능