Apple Silicon에서 Swift/MLX로 구동한 Nvidia PersonaPlex 7B, 실시간 음성 에이전트에 한 걸음 더 다가가다

Hacker News 토론: https://news.ycombinator.com/item?id=47258801
원문: Ivan Campos의 PersonaPlex 7B 포팅기

이번 HN 글은 단순한 benchmark 차트보다 더 실용적인 실험을 가리킨다. NVIDIA Research의 PersonaPlex 7B speech-to-speech 스택을 MLX를 통해 Apple Silicon 위에서 native Swift로 돌리는 작업이다. PersonaPlex가 흥미로운 이유는 그것이 단순한 speech-to-text + text-to-speech 연결이 아니라 full-duplex 음성 상호작용을 겨냥한 모델이기 때문이다. 그리고 이 글이 더 유용한 이유는, 그 구성을 로컬 머신에서 실제로 쓸 만하게 만들기 위해 무엇을 바꿨는지에 초점을 맞추기 때문이다.

포팅에서 바뀐 점

0.5초마다 오디오를 내보내는 heartbeat chunking을 넣어 dead air와 문장 끝 반복을 줄였다.

passthrough mode와 realtime preview를 추가해 assistant 음성이 바로 들리기 시작하고 interruption도 가능하게 했다.

audio stack을 ring buffer, dynamic chunk dropping, session 관리 중심으로 다시 짜 multi-user·multi-agent 구성까지 염두에 두었다.

작성자에 따르면 초기 포트는 3~4초 수준의 latency에 묶여 있어 자연스러운 turn-taking에는 너무 느렸다. 파이프라인을 손본 뒤에는 M4 Pro 데모에서 1.5B encoder 단계부터 incremental audio output까지 약 1.3x real time, 사용자 발화 종료 시점부터 assistant 음성 시작까지는 대략 0.4 latency factor 수준에 도달했다고 한다. 남은 약점은 turn detection이다. 기존 Python reference 환경에서 쓰던 voice activity logic을 Swift 쪽에서 더 다듬을 필요가 있다는 설명이다.

AI 빌더 관점에서 중요한 이유는 분명하다. 로컬 voice agent가 이제 “데모에서는 된다” 수준에서 “대화에 쓸 만하다”는 쪽으로 이동하고 있기 때문이다. 이 글은 speech-to-speech 시스템의 난점이 모델 품질만이 아니라 streaming, buffering, interruption, 그리고 전체 audio loop의 사용감에 있다는 점을 잘 보여준다.