courses
자동 음성 인식은 최근 몇 년간 큰 발전을 이루었습니다. 예전에는 강력한 GPU가 필요하고 결과가 들쭉날쭉하던 음성-텍스트 모델이 이제는 일상적인 컴퓨터에서도 정확한 전사를 제공합니다.
동시에 모델 크기는 더 작아지고 CPU 추론 속도는 빨라졌으며, 다국어 지원도 확대되어 전사 품질, 속도, 접근성, 프라이버시를 더 좋은 균형으로 제공합니다.
Microsoft의 VibeVoice-ASR-BitNet은 이런 발전을 잘 보여주는 예입니다.
최적화된 VibeASR.cpp 런타임을 통해 전용 GPU나 클라우드 서비스에 녹음을 전송하지 않고도 Windows, Linux, macOS 컴퓨터에서 다국어 음성-텍스트를 로컬로 실행할 수 있습니다.
이 가이드에서는 VibeASR.cpp를 설치 및 빌드하고, 양자화된 모델을 다운로드하고, 명령줄에서 오디오 파일을 전사하며, 지속 스트리밍 서버를 실행하고, Gradio 웹 인터페이스로 음성을 업로드하거나 녹음하는 방법을 배웁니다.
Microsoft VibeASR.cpp란 무엇인가요?
VibeASR.cpp는 VibeVoice-ASR-BitNet을 위한 Microsoft의 공식 C++ 추론 런타임으로, CPU에서 효율적으로 로컬 추론이 가능하도록 설계된 압축 다국어 자동 음성 인식 모델입니다.
VibeASR.cpp는 별도의 음성 모델이 아니라 모델 실행에 필요한 최적화 엔진을 제공하여, 전용 GPU나 클라우드 기반 음성 서비스 없이도 실시간 전사를 가능하게 합니다.
이는 노트북, 데스크톱, 엣지 디바이스 등 제한된 컴퓨팅 자원을 갖춘 시스템에 적합합니다.

출처: microsoft/VibeVoice-ASR-BitNet
CPU 배포를 실용적으로 만들기 위해 Microsoft는 원래 VibeVoice-ASR 아키텍처에서 사용하던 Qwen2.5-7B 언어 모델 구성요소를 훨씬 작은 Qwen2.5-1.5B 모델로 교체했습니다.
또한 두 주요 구성요소에 서로 다른 양자화 기법을 적용합니다:
I8_S는 VAE 오디오 인코더에 사용I2_S는 언어 모델에 사용하며, 임베딩은 더 높은 정밀도를 유지
이러한 최적화로 전체 모델 크기는 약 4.62 GB에서 1.58 GB로 줄어, 노트북과 데스크톱에서 실행하기에 실용적입니다.
크기가 크게 줄었음에도 압축 모델의 단어 오류율 증가는 약 1–4퍼센트포인트에 불과해 더 큰 아키텍처 대비 증가폭이 비교적 작습니다.
VibeASR.cpp는 ggml 프레임워크, 맞춤형 CPU 명령, 오퍼레이터 퓨전을 사용하여 추론 속도를 높입니다.
Microsoft의 벤치마크에 따르면, Whisper.cpp 대비 1.6–2.3배 빠른 속도를 유사한 모델 크기에서 달성하며, 충분한 스레드를 사용할 경우 지원되는 CPU에서 실시간보다 빠른 전사가 가능합니다.
Microsoft의 CPU 벤치마크에서는 이 모델이 스레드 4개에서 RTF 0.63, 스레드 8개에서 0.42를 기록했으며, 이는 대략 실시간의 1.59×와 2.38× 속도에 해당합니다.
보고된 WER은 MLC English에서 8.25%, AMI 헤드셋 오디오에서 21.36%, AMI 원거리 마이크 오디오에서 25.87%, LibriSpeech clean에서 2.41%로, 전사 정확도, 모델 크기, CPU 성능 간의 탄탄한 균형을 보여줍니다.
1. 필요한 빌드 도구 설치
VibeASR.cpp는 전적으로 CPU에서 동작하므로 전용 GPU가 필요하지 않습니다. 지원되는 Windows, Linux, macOS 컴퓨터와 Python 3.9 이상, Git, C++ 컴파일러, 그리고 소스 코드, 빌드 파일, 모델을 위한 약 4GB의 여유 디스크 공간만 있으면 됩니다.
빌드 과정에는 CMake와 Ninja도 필요합니다.
Windows에서는 미리 구성된 터미널에서 컴파일러와 빌드 도구를 제공하는 w64devkit을 사용하는 것이 가장 쉽습니다.
Linux에서는 필요한 패키지를 시스템 패키지 관리자를 통해 바로 설치할 수 있습니다.
Windows
w64devkit 릴리스 페이지에서 최신 x64 .exe 파일을 다운로드하세요.

다운로드한 파일은 자동 압축 해제 아카이브입니다. 실행한 뒤 다음과 같이 간단한 위치에 폴더를 압축 해제하세요:
C:\w64devkit
그다음 다음을 엽니다:
C:\w64devkit\w64devkit.exe
그러면 GCC, CMake, Make, Ninja가 포함된 즉시 사용 가능한 터미널이 실행됩니다. 나머지 Windows 단계는 환경 변수를 수동으로 설정하지 않고 이 터미널에서 진행하시면 됩니다.
Linux
Ubuntu, Debian 계열 Linux 배포판에서는 다음 한 줄로 필요한 컴파일러와 빌드 도구를 설치할 수 있습니다:
sudo apt update
sudo apt install build-essential cmake ninja-build git python3 python3-venv
이 명령은 GCC 컴파일러, CMake, Ninja, Git, Python, 그리고 Python 가상 환경 생성을 위한 패키지를 설치합니다.
macOS
macOS에서는 다음으로 Apple의 명령줄 개발 도구를 설치하세요:
xcode-select --install
또한 Git, Python 3.9 이상, CMake, Ninja가 필요합니다. 남은 도구들은 Homebrew로 설치하는 것이 가장 쉽습니다:
brew install git python cmake ninja
2. VibeASR.cpp 클론 및 Python 환경 설정
다음 설정 과정은 Windows, Linux, macOS에서 동일합니다.
운영체제별로 다른 단계는 Python 가상 환경을 활성화하는 명령뿐입니다.
터미널을 열고 프로젝트를 저장할 폴더로 이동한 뒤, VibeASR.cpp 저장소를 클론하세요:
git clone --recursive https://github.com/microsoft/VibeASR.cpp.git
cd VibeASR.cpp

--recursive 옵션은 필요한 llama.cpp 서브모듈도 함께 내려받습니다. 이 옵션이 없으면 추론 런타임 빌드에 필요한 일부 파일이 빠지게 됩니다.
프로젝트 폴더 안에 Python 가상 환경을 만듭니다.
python -m venv .venv
운영체제에 맞는 명령으로 활성화하세요.
w64devkit 터미널을 사용하는 Windows:
. .venv/Scripts/activate
Linux 및 macOS:
source .venv/bin/activate
활성화 후에는 명령 프롬프트 앞에 (.venv)가 표시됩니다. Python 사용 가능 여부를 확인하세요:
python --version
pip을 업그레이드하고 프로젝트 의존성을 설치합니다:
python -m pip install --upgrade pip
pip install -r requirements.txt
여기에는 설정 스크립트, 모델 다운로드, 로컬 Gradio 웹 인터페이스에 사용되는 Python 패키지가 포함됩니다.
3. VibeASR.cpp 빌드 및 모델 다운로드
VibeASR.cpp에는 C++ 빌드와 모델 다운로드를 모두 처리하는 설정 스크립트가 포함되어 있습니다.
이 스크립트는 명령줄 및 스트리밍 실행 파일을 컴파일하고, 필요한 GGUF 패키지를 설치하며, 사전 양자화된 모델 파일을 프로젝트 디렉터리로 내려받습니다.
설정 스크립트를 실행하기 전에 Python 가상 환경이 활성화되어 있는지 확인하세요.
Linux 및 macOS에서는 다음을 실행합니다:
python setup_env.py
Windows에서는 w64devkit 터미널에서 다음 명령을 실행하세요:
CMAKE_GENERATOR=Ninja python setup_env.py
CMAKE_GENERATOR=Ninja를 설정하면 CMake가 w64devkit 환경에 없는 Microsoft Visual C++ 대신 Ninja 빌드 시스템을 사용하도록 보장합니다.
설정 스크립트는 다음을 수행합니다:
- 필수
ggufPython 패키지를 설치합니다. - VibeASR.cpp를 구성 및 컴파일합니다.
- 추론 및 스트리밍 실행 파일을 빌드합니다.
- 사전 양자화된 VibeASR 모델 파일을 다운로드합니다.
- 다운로드한 모델을
models/vibeasr에 저장합니다.
완료되면 주요 추론 실행 파일은 다음 위치에서 이용할 수 있습니다.
Windows:
build/bin/asr_infer.exe
Linux 및 macOS:
build/bin/asr_infer
사용 가능한 명령줄 옵션을 표시하여 실행 파일이 정상적으로 빌드되었는지 확인합니다.
Windows:
./build/bin/asr_infer.exe --help
Linux 및 macOS:
./build/bin/asr_infer --help

4. 파일 전사 및 스트리밍 전사 테스트
이제 런타임과 모델 준비가 끝났으니 두 가지 전사 방식을 테스트할 수 있습니다.
표준 추론 실행 파일은 하나의 오디오 파일을 처리하고 전체 전사 결과를 반환합니다. 반면 스트리밍 서버는 모델을 계속 로드한 채로 토큰이 생성되는 대로 점진적으로 전사를 표시합니다.
먼저 VibeASR.cpp 프로젝트 폴더 안에서 짧은 샘플 녹음을 다운로드합니다:
curl -L "https://homepages.inf.ed.ac.uk/htang2/notes/speech-samples/103-1240-0000.wav" -o recording.wav
오디오 파일은 현재 프로젝트 디렉터리에 recording.wav로 저장됩니다.
오디오 파일 전사
표준 추론 명령은 오디오 인코더와 언어 모델을 로드하고 녹음을 처리한 뒤 전체 전사 결과를 출력합니다.
Windows에서는 다음을 실행하세요:
./build/bin/asr_infer.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy
Linux 및 macOS에서는 .exe 확장자 없이 동일한 명령을 사용하세요:
./build/bin/asr_infer \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
--audio recording.wav \
-t 6 \
--greedy

-t 6 옵션은 추론에 CPU 스레드 6개를 할당합니다. 프로세서에 따라 이 값을 늘리거나 줄일 수 있습니다.
--greedy 옵션은 각 디코딩 단계에서 가장 그럴듯한 토큰을 선택하여, 일관된 전사 결과를 제공합니다.
제 컴퓨터에서는 14.085초 길이의 녹음을 처리하는 데 약 13.7초가 걸렸습니다:
RTF: 0.9726
Speed: approximately 1.03× real time
RTF(Real-Time Factor, 실시간 계수)는 처리 시간과 오디오 길이를 비교한 값입니다.
RTF가 1.0 미만이면 녹음의 실제 재생 길이보다 더 빠르게 전사했다는 의미입니다. 성능은 프로세서, 운영체제, 스레드 수, 녹음 길이에 따라 달라집니다.
토큰 단위 스트리밍 테스트
VibeASR.cpp에는 지속 스트리밍 서버도 포함되어 있습니다. 두 모델 파일을 한 번 로드한 뒤 계속 실행되므로, 매번 모델을 다시 시작하고 재로딩하지 않고 여러 녹음을 제출할 수 있습니다.
출력은 대규모 언어 모델의 스트리밍과 유사하게 동작합니다.
전체 전사가 끝날 때까지 기다리는 대신, 디코더가 각 토큰을 생성하는 즉시 텍스트가 보이기 시작합니다.
어떤 토큰은 완전한 단어를, 어떤 토큰은 단어의 일부나 구두점을 나타낼 수 있으며, 전사가 완료될 때까지 점진적으로 표시됩니다.
Windows에서는 다음으로 서버를 시작합니다:
./build/bin/asr_stream_server.exe \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy
Linux 및 macOS에서는 다음을 실행합니다:
./build/bin/asr_stream_server \
--vae-model models/vibeasr/vibeasr-vae-encoder-i8_s.gguf \
--lm-model models/vibeasr/vibeasr-lm-i2_s-embed-q6_k.gguf \
-t 6 \
--greedy

서버가 모델 로딩을 마치고 다음 메시지를 표시할 때까지 기다리세요:
---READY---
오디오 파일 경로를 입력하고 Enter를 누르세요:
recording.wav
전사가 토큰 단위로 나타나기 시작합니다. 녹음이 완전히 처리되면 서버는 다음을 표시합니다:
---END---

이후 모델을 다시 로드하지 않고 다른 오디오 파일 경로를 입력할 수 있습니다. 서버를 중지하려면 다음을 입력하세요:
exit
이러한 지속 워크플로는 여러 녹음을 전사할 때나, 점진적인 전사 출력을 필요로 하는 다른 애플리케이션에 VibeASR.cpp를 연결할 때 특히 유용합니다.
5. 웹 인터페이스 실행 및 테스트
VibeASR.cpp에는 오디오 파일 업로드 또는 마이크로 직접 녹음을 위한 로컬 Gradio 웹 인터페이스가 포함되어 있습니다. 프로세스는 Windows, Linux, macOS에서 동일하며, Windows에서는 실행 파일이 .exe로 끝난다는 점만 다릅니다.
인터페이스에 필요한 Gradio, SoundFile, NumPy 등 의존성은 이미 requirements.txt를 통해 설치되었습니다.
먼저 가상 환경이 활성화되어 있는지 확인하세요.
w64devkit 터미널을 사용하는 Windows:
. .venv/Scripts/activate
Linux 및 macOS:
source .venv/bin/activate
Windows에서는 다음으로 인터페이스를 실행합니다:
python demo/gradio_asr_demo.py \
--port 7860 \
--bin build/bin/asr_infer.exe \
--server-bin build/bin/asr_stream_server.exe
Linux 및 macOS에서는 기본 실행 파일 경로가 자동으로 감지됩니다:
python demo/gradio_asr_demo.py --port 7860
모든 운영체제에서 모델 경로는 Gradio 스크립트 내부에 이미 구성되어 있으므로 명령에 포함할 필요가 없습니다.
또한 이 스크립트는 표준 추론 실행 파일과 스트리밍 서버의 경로를 분리해 지정하는 것도 지원합니다.
브라우저에서 다음 주소를 여세요:
http://127.0.0.1:7860
인터페이스 살펴보기
인터페이스에서는 다음을 할 수 있습니다:
- CPU 모델 선택.
- CPU 스레드 수 선택.
- 온라인/오프라인 처리 모드 전환.
- 그리디 디코딩 사용 또는 temperature와 Top-p 조정.
- 오디오 파일 업로드 또는 마이크로 직접 녹음.
- 이름이나 기술 용어 같은 핫워드 추가(선택).
- 전사 결과, 오디오 길이, 실시간 계수 확인.
여기서 온라인 모드가 오디오를 온라인 서비스로 전송한다는 뜻은 아닙니다.
가능할 경우 asr_stream_server를 사용해 긴 녹음을 청크 단위로 점진 처리합니다.
오프라인 모드는 전체 오디오 파일을 처리한 후 결과를 표시합니다.

짧은 녹음 테스트
첫 테스트에서는 마이크로 짧은 문장을 직접 녹음하고 CPU 스레드 4개로 오프라인 모드를 선택했습니다.

RTF 0.9584는 오디오 1초를 처리하는 데 약 0.96초가 걸렸다는 의미입니다.
이는 대략 실시간의 1.04×로, 전사가 실제 녹음 길이보다 약간 더 빨리 완료되었습니다.
긴 녹음 테스트
약 109.7초 분량의 음성이 담긴 긴 녹음으로도 인터페이스를 테스트했습니다. 모델은 전체 전사를 성공적으로 생성했고 다음과 같이 보고했습니다:
RTF: 0.5305
Audio: 109.7s

이는 오디오 1초를 처리하는 데 약 0.53초가 걸렸다는 뜻입니다. 전체 녹음 전사에는 약 58초가 소요되었으며, 속도는 대략 실시간의 1.88×에 해당합니다.
마무리 소감
로컬 음성 인식이 얼마나 실용적으로 발전했는지 인상적이었습니다.
오래된 CPU에서도 VibeASR.cpp는 GPU, 많은 메모리, 큰 저장 공간 없이도 실시간에 가깝거나 더 빠른 속도로 오디오를 전사할 수 있습니다.
컴파일된 실행 파일은 Python 애플리케이션에 통합하거나, FastAPI 엔드포인트로 감싸거나, 더 큰 로컬 도구의 전사 엔진으로도 사용할 수 있습니다.
고려해야 할 주요 설정은 프로세스에 할당하는 CPU 스레드 수입니다.
또한 전사를 점진적으로 스트리밍하는 온라인 모드와 오디오 처리 후 전체 전사를 반환하는 오프라인 모드 중에서 선택해야 합니다.
설치는 여전히 더 쉬워질 여지가 있으며, Windows, Linux, macOS에서 특히 그렇습니다.
프로젝트가 계속 개발 중이므로, 시간이 지나면 설치와 사전 빌드 바이너리 지원이 개선될 것으로 기대합니다. 안정적인 독립 실행형 바이너리가 제공되면, 더 많은 로컬 음성-텍스트 프로젝트에서 이 모델을 활용할 수 있을 것 같습니다.
또한 저희의 GPT Live Transcribe API 튜토리얼도 확인해 보시기 바랍니다.
FAQs
VibeASR 모델은 실제로 어떤 언어를 지원하나요?
VibeVoice-ASR 모델은 기본적으로 50개 이상의 언어를 지원합니다. 여기에는 영어, 중국어, 프랑스어, 이탈리아어, 한국어, 포르투갈어, 베트남어가 포함됩니다. 명시적인 언어 설정이 필요 없으며, 한 문장 안에서 여러 언어를 자연스럽게 섞어 쓰는 "코드 스위칭"도 자동으로 처리할 수 있습니다.
MP3나 동영상 파일을 전사하기 전에 변환이 필요한가요?
직접 asr_infer 명령줄 실행 파일을 사용하는 경우, 일반적으로 16kHz, 16비트 모노의 .wav 파일을 기대합니다. MP3, M4A, FLAC 등의 다른 형식 오디오가 있다면, CLI에 전달하기 전에 FFmpeg 같은 도구를 사용해 먼저 WAV로 변환해야 합니다.
모델이 서로 다른 화자를 식별하거나 단어 수준 타임스탬프를 출력할 수 있나요?
기본 VibeVoice-ASR 아키텍처는 한 번의 패스에서 "Who"(화자 분리), "When"(타임스탬프), "What"(콘텐츠)을 포함한 구조화된 출력을 생성하도록 명시적으로 설계되었습니다. 그러나 경량 C++ 추론 실행 파일(VibeASR.cpp)은 현재 점진적인 원시 텍스트 전사에 초점을 맞추고 있습니다. 화자 ID와 타임스탬프가 포함된 완전한 구조화 JSON 출력을 얻으려면 일반적으로 Python의 transformers 라이브러리로 모델을 실행해야 합니다.