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
오픈소스 멀티모달 AI가 Apple Silicon M3 Pro에서 인터넷·클라우드 비용 없이 음성 인식·영상 이해·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
# 아키텍처 흐름 (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
관련 논문
로컬에서 SOTA LLM 실행하기 완전 가이드 (하드웨어부터 설정까지)
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Manticore Search에서 ONNX 경로를 재설계해 임베딩 속도를 14배 높인 방법
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: 97% 스토리지 절감으로 Late Interaction 검색 품질 유지하기
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.
Bash4LLM+ – 의존성 없는 경량 Bash LLM API 래퍼
Python이나 Node.js 없이 순수 Bash만으로 Groq 등 OpenAI 호환 LLM API를 호출할 수 있는 단일 스크립트 도구로, Termux(Android)를 포함한 모든 Unix 환경에서 동작한다.
Wayfinder Router: 로컬과 hosted LLM 간 deterministic 쿼리 라우팅 도구
프롬프트의 복잡도를 모델 호출 없이 오프라인으로 점수화해서 간단한 쿼리는 로컬 모델로, 어려운 쿼리는 유료 모델로 자동 라우팅하는 CLI 도구다. LLM 비용을 줄이면서도 응답 품질을 유지하고 싶은 개발자에게 유용하다.
Apple Neural Engine: 아키텍처, 프로그래밍, 성능 (리버스 엔지니어링 가이드)
Apple 기기에 내장된 AI 전용 칩인 ANE(Apple Neural Engine)를 리버스 엔지니어링으로 분석한 302페이지짜리 기술 문서로, Core ML 아래 숨겨진 내부 구조와 직접 접근 경로를 처음으로 공개한다.