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