M3 Pro에서 실시간 AI 음성/영상 대화 구현 (Gemma E2B + Kokoro)
Show HN: Real-time AI (audio/video in, voice out) on an M3 Pro with Gemma E2B
TL;DR Highlight
Apple Silicon M3 Pro에서 인터넷 없이 완전히 로컬로 동작하는 실시간 멀티모달 AI 음성·영상 대화 시스템을 오픈소스로 공개했다. 클라우드 비용 없이 음성 인식·영상 이해·TTS를 동시에 처리할 수 있다는 점에서 주목받고 있다.
Who Should Read
온디바이스 AI 음성 어시스턴트를 직접 만들어보고 싶은 개발자, 또는 클라우드 AI API 비용 없이 로컬에서 멀티모달 파이프라인을 구축하려는 백엔드/ML 개발자.
Core Mechanics
- 이 프로젝트(Parlor)는 마이크와 카메라 입력을 받아 AI가 음성으로 대답하는 실시간 멀티모달 대화 시스템으로, 모든 처리가 사용자 기기 내에서만 이루어진다.
- 언어 이해와 영상 인식에는 Google이 최근 공개한 Gemma 4 E2B 모델을 사용하며, GPU 가속을 위해 LiteRT-LM 런타임을 활용한다.
- TTS(텍스트를 음성으로 변환)에는 Kokoro를 사용한다. Mac에서는 MLX 백엔드로, Linux에서는 ONNX 백엔드로 동작한다.
- 브라우저에서 마이크와 카메라를 WebSocket으로 FastAPI 서버에 스트리밍하고, 서버에서 처리한 오디오를 다시 WebSocket으로 브라우저에 돌려주는 구조다.
- 브라우저 쪽에서 Silero VAD(음성 활동 감지 모델)를 실행해 push-to-talk 없이 핸즈프리로 대화할 수 있고, AI가 말하는 도중에 사용자가 끼어들어 중단시키는 barge-in 기능도 지원한다.
- TTS를 문장 단위로 스트리밍해서 전체 응답이 생성되기 전에 오디오 재생이 시작되므로 체감 지연시간이 줄어든다.
- 개발 동기는 영어 학습 서비스를 운영 중인데 서버 비용을 없애고 지속 가능하게 만들기 위해서였다. 6개월 전에는 실시간 처리에 RTX 5090이 필요했지만 지금은 M3 Pro로도 가능해졌다.
- Gemma 4 E2B는 다국어를 지원하기 때문에, 사용자가 모국어와 학습 언어를 자유롭게 섞어서 대화할 수 있다는 점을 개발자가 언어 학습 용도로 특히 강조했다.
Evidence
- 오프라인 환경 테스트에서 인터넷을 끊은 채로 localhost를 처음 열면 'loading...' 상태에서 멈추는 버그가 발견됐다. 한 사용자가 보고하기를, 인터넷이 연결된 상태에서 한 번 페이지를 로드한 후에 연결을 끊으면 정상 동작한다고 했다. M4 Pro 48GB에서도 영상 입력 포함해 빠르게 동작한다는 인상을 받았다고 덧붙였다.
- 비슷한 프로젝트를 만들고 있다는 개발자가 Gemma 4 E2B가 E2B임에도 여전히 너무 무겁다며, 자신은 Qwen 0.8B 모델로 대체해서 쓰고 있다고 공유했다. 모델 크기와 실시간 반응 속도 사이의 트레이드오프가 실제 장벽임을 보여주는 사례다.
- Kokoro TTS의 지연시간이 매우 낮다는 점에 여러 댓글이 공감했고, 한 개발자는 'Apple이 Siri에 이걸 썼어야 했다'고 언급하며 Apple이 기술 격차를 벌리고 있다고 비판했다.
- Gemma 4 E2B의 텍스트 부분만 따로 파인튜닝(fine-tuning)할 수 있다는 정보를 공유한 댓글이 있었다. 실제로 '해적처럼 말하는 AI'로 파인튜닝해봤다는 경험담과 함께 관련 영상 링크를 첨부했고, TTS 부분에는 파인튜닝이 적용되지 않는다는 점도 명시했다.
- M1 Max(64GB), RTX 5060 Ti(16GB), Snapdragon 8 Gen 2 등 다양한 하드웨어에서 Gemma E2B의 음성 인식 속도가 실시간에 미치지 못한다는 사용자도 있었고, 해결 방법을 묻는 질문이 달렸다. 이는 M3 Pro 이외 환경에서는 성능 보장이 되지 않을 수 있음을 시사한다.
How to Apply
- 핸즈프리 워크숍 어시스턴트나 장거리 운전 중 음성 AI가 필요한 경우, Parlor를 로컬 서버로 띄우고 브라우저만 열면 push-to-talk 없이 타이머·계산·메모 검색 등을 처리하는 음성 어시스턴트를 인터넷 없이 쓸 수 있다.
- 영어 학습 서비스나 다국어 대화 앱을 운영 중인데 클라우드 API 비용이 부담되는 경우, Parlor의 구조(FastAPI + WebSocket + Gemma 4 E2B + Kokoro)를 그대로 참고해 온디바이스 파이프라인으로 전환하면 서버 비용을 없앨 수 있다.
- Gemma 4 E2B 모델의 응답 방식을 특정 도메인에 맞게 바꾸고 싶다면, 텍스트 파인튜닝을 E2B 모델에 적용해 원하는 말투나 응답 패턴을 학습시킬 수 있다. TTS 부분은 파인튜닝 대상이 아니므로 텍스트 생성 단계에만 적용된다는 점을 감안해야 한다.
- Gemma 4 E2B가 너무 무겁게 느껴지는 저사양 환경(M1 이하, 16GB 이하 GPU 등)에서는 댓글에서 언급된 대로 Qwen 0.8B처럼 더 작은 모델로 교체하는 방향을 먼저 시도하고, 실시간 지연시간을 측정해 트레이드오프를 확인하는 것이 좋다.
Code Example
snippet
# 아키텍처 흐름 (README 발췌)
Browser (mic + camera)
│
│ WebSocket (audio PCM + JPEG frames)
▼
FastAPI server
├── Gemma 4 E2B via LiteRT-LM (GPU) → understands speech + vision
└── Kokoro TTS (MLX on Mac, ONNX on Linux) → speaks back
│
│ WebSocket (streamed audio chunks)
▼
Browser (playback + transcript)
# 설치 및 실행 (README 기준)
git clone https://github.com/fikrikarim/parlor
cd parlor
cp .env.example .env
# .env에서 필요한 설정 수정 후
pip install -r requirements.txt
uvicorn src.main:app --reloadTerminology
LiteRT-LMGoogle이 만든 온디바이스 LLM 추론 런타임. 모바일·엣지 기기에서 모델을 빠르게 실행하기 위해 최적화된 실행 엔진이다.
Kokoro오픈소스 TTS(텍스트 음성 변환) 모델. 지연시간이 매우 낮아 실시간 대화 시스템에 자주 쓰인다.
VAD (Voice Activity Detection)마이크 입력에서 사람이 말하는 구간을 자동으로 감지하는 기술. push-to-talk 버튼 없이 핸즈프리로 대화할 수 있게 해준다.
barge-inAI가 말하는 도중 사용자가 끼어들어 발화를 중단시키는 기능. 자연스러운 대화 흐름을 위해 필요하다.
MLXApple Silicon에 최적화된 Apple의 머신러닝 프레임워크. M 시리즈 칩의 통합 메모리 구조를 활용해 GPU 추론을 효율적으로 수행한다.
E2B (Efficient 2 Billion)Gemma 4 시리즈 중 약 20억 파라미터 규모의 경량 버전. 소비자용 하드웨어에서 실시간 추론이 가능하도록 설계됐다.