피드로 돌아가기
Building a Local Voice AI Stack: Whisper + Ollama + Kokoro TTS on Apple Silicon
Dev.toDev.to
AI/ML

Xaden가 Whisper.cpp + Ollama + Kokoro ONNX를 조합하여 Apple Silicon Mac에서 클라우드 API 없이 완전 로컬 음성 AI 스택 구축, TTS 콜드 스타트 지연 9초 → 300ms로 단축

Building a Local Voice AI Stack: Whisper + Ollama + Kokoro TTS on Apple Silicon

Xaden2026년 3월 27일10intermediate

Context

클라우드 음성 API 사용 시 마이크 스트림이 데이터센터로 왕복하면서 레이턴시가 누적되고, 개인정보 보호 위험이 발생하며, 사용량에 따라 월간 비용이 선형으로 증가하는 문제가 있었다.

Technical Solution

  • Whisper.cpp를 STT 엔진으로 도입: C/C++ ARM64 네이티브 컴파일, Metal GPU 가속, GGML 압축 포맷 모델 사용으로 3초 오디오를 500ms 이내에 처리
  • PyTorch 대신 ONNX Runtime으로 Kokoro TTS 교체: ARM64의 최적화된 NEON SIMD 명령어 사용으로 4~10배 속도 향상
  • 일회성 프로세스 대신 Kokoro를 persistent HTTP 서버로 구현: 시작 시 모델을 메모리에 로드하여 요청 당 1~2초 디스크 로드 오버헤드 제거
  • ffmpeg의 silencedetect 필터로 VAD(음성 활동 감지) 구현: 자체 라이브러리 추가 없이 기존 도구 활용
  • 시스템 프롬프트를 통한 마크다운 제거: LLM 출력에서 코드 블록, 기호, URL 등을 정규표현식으로 제거하는 텍스트 전처리 단계 추가

Impact

  • TTS 콜드 스타트 지연: 9초 → 300ms (30배 개선)
  • Whisper tiny.en 모델: 3초 오디오 전사 약 500ms (Metal GPU 가속)
  • 전체 음성 챗 루프 지연(워밍업 후): 1.5~2.5초 (STT 300ms + LLM 500ms~1초 + TTS 200~500ms + I/O 100ms의 조합)
  • 전체 디스크 용량: 약 500MB (Whisper tiny + Kokoro ONNX + 음성 + Python venv)

Key Takeaway

지연시간이 중요한 음성 상호작용 시스템에서는 프로세스 시작 오버헤드가 실제 계산 시간보다 클 수 있으므로, persistent 프로세스와 경량 런타임(ONNX)의 조합으로 콜드 스타트 문제를 우회하는 것이 효과적이다. Apple Silicon의 Metal 및 NEON 가속을 활용한 네이티브 컴파일이 클라우드 의존성 제거의 핵심이다.


Apple Silicon Mac을 개발 환경으로 사용하는 팀에서 프라이빗 음성 AI 기능을 구현할 때, Whisper.cpp(Metal 가속) + Ollama + Kokoro ONNX 스택을 도입하면 인터넷 의존성을 제거하면서 3초 이내의 완전 로컬 음성 대화 지연시간을 달성할 수 있다.

원문 읽기