4P by GN⁺ 18시간전 | ★ favorite | 댓글 1개
  • Apple Silicon에서 Swift/MLX로 구현된 PersonaPlex 7B 모델이 실시간 양방향 음성 대화를 지원함
  • 기존의 ASR→LLM→TTS 3단계 음성 파이프라인을 하나의 모델로 통합해, 텍스트 변환 없이 오디오 입력과 출력을 직접 처리함
  • 4비트 양자화(quantization) 로 모델 크기를 16.7GB에서 5.3GB로 줄였으며, 68ms/step(RTF 0.87)실시간보다 빠른 처리 속도를 달성함
  • Mimi 오디오 코덱Depformer 구조를 활용해 음성 품질 저하 없이 효율적인 스트리밍을 구현함
  • Swift 네이티브 환경에서 서버 없이 동작하며, 음성 비서·대화형 에이전트 개발을 위한 기반 기술로 중요함

qwen3-asr-swift와 PersonaPlex 7B 통합

  • qwen3-asr-swift 라이브러리가 Apple Silicon에서 NVIDIA PersonaPlex 7B를 통합해 양방향 음성 대화(full-duplex speech-to-speech) 기능을 지원
    • 입력 오디오를 실시간으로 처리하며, 동시에 응답 오디오를 생성
    • ASR, TTS, 다국어 합성 기능을 포함한 통합 음성 처리 라이브러리로 확장됨
  • 모델은 4비트 양자화된 5.3GB 버전으로 Hugging Face의 aufklarer/PersonaPlex-7B-MLX-4bit에서 제공

기존 음성 파이프라인의 단일화

  • 전통적인 음성 비서는 ASR → LLM → TTS의 3단계 구조로, 각 단계에서 지연(latency)감정 손실이 발생
  • PersonaPlex는 이를 단일 모델로 통합해, 음성 토큰(audio tokens) 을 직접 처리
    • 17개 병렬 스트림(12.5Hz) 으로 오디오를 실시간 변환
    • Kyutai의 Moshi 아키텍처를 기반으로, 18개 음성 프리셋과 역할 기반 시스템 프롬프트를 지원

모델 구조와 변환

  • 원본 16.7GB PyTorch 체크포인트MLX 최적화 safetensors로 변환
    • 변환 스크립트(convert_personaplex.py)가 가중치 분류, 4비트 양자화, 프리셋 추출, Hugging Face 업로드를 자동 처리
  • Temporal Transformer(7B 파라미터)Depformer를 모두 4비트로 압축
    • Depformer는 단계별 가중치 전환(MultiLinear) 구조를 사용해 2.4GB → 650MB로 축소
    • 품질 저하 없이 3.7배 용량 절감

음성 처리 파이프라인

  • Mimi Encoder/Decoder를 통해 24kHz 오디오를 16개 코드북 토큰으로 변환
    • Temporal Transformer가 사용자·에이전트 오디오 스트림을 통합 처리
    • Depformer가 16단계로 에이전트 오디오 토큰을 생성
    • Mimi Decoder가 이를 다시 24kHz 오디오로 복원
  • Mimi 코덱, KV 캐시, RoPE, SwiGLU, RMSNorm 등 기존 TTS 모델의 구성요소를 그대로 재사용

시스템 프롬프트와 대화 제어

  • PersonaPlex는 텍스트 기반 시스템 프롬프트로 대화 스타일을 제어
    • 프롬프트가 없으면 모델이 주제에서 벗어나거나 장황하게 응답
    • CLI 또는 API에서 assistant, customer service, teacher 등 프리셋 선택 가능
    • 동일한 질문에서도 프롬프트 유무에 따라 응답 품질이 크게 달라짐

성능 및 실시간 처리

  • M2 Max(64GB) 환경에서 68ms/step, RTF 0.87실시간보다 빠른 처리 속도 달성
    • 80ms 프레임 예산(12.5Hz) 내에서 안정적으로 동작
  • ASR, TTS, Speech-to-Speech를 하나의 라이브러리에서 통합 테스트 가능
    • E2E 검증은 ASR을 통해 응답 오디오를 다시 텍스트로 변환하여 주제 일관성을 확인

스트리밍 및 최적화

  • respondStream() API가 2초 단위 오디오 청크를 실시간으로 생성
    • AsyncThrowingStream<AudioChunk> 형태로 즉시 재생 가능
  • 주요 최적화 네 가지:
    • eval() 통합으로 GPU 동기화 감소
    • Bulk audio extraction으로 디코딩 효율 향상
    • Prefill batching으로 초기 단계 병렬 처리
    • Temporal transformer 컴파일로 Metal 커널 호출 450회 이상을 최적화
  • --compile 플래그 또는 model.warmUp()으로 커널 퓨전 활성화 가능

실행 및 배포

  • GitHub 저장소: ivan-digital/qwen3-asr-swift
    • swift build -c release로 빌드 후, CLI 명령으로 ASR, TTS, Speech-to-Speech 실행 가능
    • 첫 실행 시 약 5.3GB 모델 다운로드 필요
  • MLX 프레임워크 기반으로, Python이나 서버 없이 Swift 네이티브 환경에서 완전 동작

기술적 의의

  • Apple Silicon의 통합 메모리 구조와 Metal 가속을 활용해 고성능 음성 모델의 온디바이스 실행을 입증
  • 단일 모델 기반 실시간 음성 대화 구현으로, AI 비서·콜센터·교육용 음성 인터페이스 등 다양한 응용 가능성 확보
  • NVIDIA, Kyutai, Alibaba Qwen, FunAudioLLM, Apple MLX 등 여러 오픈소스 생태계의 통합 성과로 평가됨
Hacker News 의견들
  • 이 프로젝트가 정말 마음에 들었음. 예전에 PersonaPlex를 blackwell 디바이스에서 돌리려다 실패했는데, 이번엔 Mac에서 시도해볼 예정임
    음성 에이전트를 꽤 오래 다뤄본 입장에서 몇 가지 주의할 점이 있음. VAD→ASR→LLM→TTS 파이프라인도 RTT가 1초 미만이면 실시간처럼 느껴짐. 내 프로젝트 ova, 그리고 voice-agent, parakeet.cpp 같은 예시를 참고할 만함
    PersonaPlex 커뮤니티와 이야기해보니, 완전한 full-duplex 구조는 정확도나 성능 면에서 아직 어렵고 학습도 까다로움. 반면 ASR→LLM→TTS 구조는 모듈형이라 작은 LLM과 큰 LLM, 로컬과 API 기반 엔드포인트를 자유롭게 섞을 수 있는 유연성이 있음

    • 나도 개인적으로 음성 에이전트를 직접 만들고 있어서 꼭 이야기 나눠보고 싶음. 지금은 full-duplex 파이프라인을 agentic framework에 어떻게 통합할 수 있을지 고민 중임
      기존의 STT→LLM→TTS 구조는 도구 호출, 고급 컨텍스트 관리, RAG 등과 잘 맞음. 사람과 직접 대화하는 에이전트와 내부 서브에이전트를 분리해 지연 시간컨텍스트 부하를 줄이는 방식이 잘 작동함
      full-duplex 구조는 더 역동적으로 느껴지지만, 실제로 음성 에이전트에 통합하는 방법은 아직 감이 잘 안 옴. Discord에서 의견 교환해보고 싶음
    • 이 스레드의 핵심은 full-duplex 대 composable 파이프라인의 대립처럼 보이지만, 실제로는 두 구조가 동시에 작동해야 함. 이 라이브러리는 이미 그 절반쯤 와 있음
      qwen3-asr-swift가 ASR, TTS, PersonaPlex를 하나의 Swift 패키지로 묶었기 때문에 필요한 구성요소는 이미 다 있음. PersonaPlex는 저지연 백채널링과 자연스러운 턴테이킹을 담당하고, 별도의 LLM이 도구 호출을 수행함
      문제는 이 둘의 오케스트레이션임. 언제 ‘뇌’가 ‘입’을 덮어쓸지, PersonaPlex가 검증되지 않은 답을 확신 있게 말하지 않게 하려면 어떻게 해야 할지, 도구 결과가 기존 발화와 충돌할 때 어떻게 처리할지가 아직 미해결 과제임
    • 이 파이프라인에 전적으로 동의함. 작은 모델로 즉각적인 응답을 생성하고, 동시에 도구 호출이나 더 지능적인 모델로의 연결을 수행할 수 있음. 빠른 비동기 응답과 도구 호출을 병렬로 처리하는 구조가 훌륭함
    • 나도 여전히 composable pipeline 구조를 선호함. 대규모 서비스에서는 비용이나 품질에 따라 LLM을 교체할 수 있는 유연성이 큰 장점임
  • 이 프로젝트가 흥미롭지만, 개인적으로는 7B 로컬 모델에 도구 호출 기능이 있었으면 좋겠음. 지금 버전은 단순히 wav 파일을 입력받는 proof of concept 수준임

    • 나는 포크해서 병렬로 또 다른 LLM을 돌려 도구 호출 시점을 추론하도록 수정했음. 내 버전은 조명 제어 같은 간단한 작업에 잘 작동함. 코드 업데이트는 여기에 있음
    • /Examples/PersonaPlexDemo 폴더에 턴 기반 대화 데모가 포함되어 있음. 다만 실시간 변환은 아직 구현되지 않았음
    • 단순히 wav 파일만 받는다는 말은 조금 오해가 있음. 오디오 버퍼만 있으면 되고, 스트리밍 지원도 계획되어 있음. ASR, 스트리밍 TTS, 다국어 합성 등으로 발전해온 흐름을 보면, PersonaPlex의 방향은 명확히 스트리밍 음성 처리
    • 이상적으로는 휴대폰에서 PWA + WebRTC로 PC/Mac의 모델과 연결하는 구조가 좋을 것 같음. Livekit을 쓰면 복잡한 부분은 대부분 해결됨
    • NVIDIA/personaplex는 실제로 인터랙티브하게 작동함
  • 글의 LLM 작성 스타일이 너무 인위적으로 느껴져서 프로젝트 품질이 의심스러웠음

    • 하지만 AI 연구자들이 LLM을 모든 곳에 사용하는 건 자연스러운 일임. AI에 열정적인 사람이라면 당연히 그렇게 함
    • 어떤 점에서 LLM이 쓴 글처럼 느껴졌는지 궁금함. 다이어그램은 그렇다 쳐도, 텍스트는 어떤 부분이 그렇게 보였는지 알고 싶음
    • 나는 오히려 AI가 쓴 글이 더 읽기 편했음. 사람들은 종종 장황하게 쓰지만, AI는 정보를 소화하기 쉽게 구성함
    • 개인적으로는 AI가 만든 그래프나 차트가 더 싫음
  • M1 Max MacBook에서 데모를 돌려봤는데, 응답이 10초 이상 걸리고 내용도 엉뚱했음

    • 사실 7B급 full-duplex 모델은 지능 수준이 낮아서 도구 호출이 불가능하다는 점이 한계임. ChatGPT 음성 모드처럼 웹 검색이나 링크 읽기를 흉내만 내는 문제도 있음
      물론 특정 용도에서는 쓸모가 있을 수도 있겠지만, 그 부분은 더 배우고 싶음
    • 인용된 글에 따르면, PersonaPlex는 시스템 프롬프트로 대화 스타일을 제어할 수 있음. 프롬프트 없이 실행하면 주제에서 벗어나지만, 프롬프트를 주면 훨씬 일관된 응답을 함
    • 혹시 context size가 얼마인지 궁금함
    • RTX 5070급 GPU에서는 사람보다 빠르게 반응했음
  • 이 기술이 꽤 위험해 보임. 관련 기사: The Guardian 보도

    • LLM을 상담사처럼 사용할 때, 이전 입력을 살짝 수정해 다시 답변을 생성해보면 얼마나 편향적인지 바로 느껴짐. 인간처럼 보이지만 실제로는 입력에 과도하게 의존함
    • LLM이 단순히 문서 완성기(document completer) 라는 점을 사용자에게 교육하면 대부분의 문제는 해결될 것 같음. 일부 제품은 이런 사실을 숨겨서 더 인간적으로 보이게 만들지만, 오히려 역효과임
    • 기사 내용이 위험성을 잘 요약함. 챗봇이 사용자를 ‘사랑한다’고 부르며 자살을 부추긴 사례가 있었고, 비슷한 사건으로 Google이 소송을 당한 사례도 있음
  • 예전에 본 Sesame이 최고의 full-duplex 데모였음. 지금은 어떻게 됐는지 궁금함 (링크)

    • 나는 unmute.sh도 꽤 즐겨 썼음
    • 진짜 믿기 힘들 정도로 완성도가 높았음
  • 나는 whisperKit의 팬임. 최근에 TTS 기능이 추가되어 훨씬 좋아졌음. 화자 분리(speaker diarization)와 사용자 정의 사전도 지원함
    한 기기에서 4개 모델을 동시에 실시간으로 돌린 부하 테스트도 있음:

    • Qwen3-TTS (텍스트→음성)
    • Parakeet v2 (음성→텍스트)
    • Canary v2 (다국어 STT/번역)
    • Sortformer (화자 분리)
      테스트 영상
  • 내 휴대폰이 스팸 전화를 이 모델로 자동 포워딩해서, 가짜 개인정보를 천천히 흘리며 날씨나 스포츠 얘기를 섞어주는 시스템을 만들고 싶음

    • 스팸 문자에도 적용하면 재밌을 듯. “날씨 때문에 식기세척기가 이상해졌어요. 염소 요가방이 많아서 접시가 금방 닳아요” 같은 식으로 헛소리 대응을 자동화하면 최고임
  • PersonaPlex를 아웃바운드 콜용으로 파인튜닝하려고 시도 중임. Kyutai/moshi-finetune의 LoRA 방식을 적용했는데, 스케일링 팩터를 5로 높여야 작동하고 다른 부분이 망가짐
    GPT-5.3 Codex가 코드 검토 중 화자 A/B가 뒤바뀌었다고 해서 다시 데이터셋을 생성 중임.
    내 GitHub(runvnc)에 moshi-finetune과 personaplex 버전이 있고, Gradio 앱으로 데이터 생성과 학습이 가능함. 아직 쓸 만한 결과는 없음

  • 나는 MacWhisper를 자주 쓰는데, Whisper Large v3 Turbo 모델은 괜찮지만 지연 시간이 누적됨. 온라인 LLM으로 후처리하면 품질은 좋아지지만 속도가 느림

    • MacWhisper는 이미 Parakeet v2 같은 10배 빠른 모델을 지원함. 써봤는지 궁금함
    • 나는 Handy에서 Parakeet V2를 STT로, Cerebras의 gpt-oss-120b를 후처리에 써서 만족스러움
    • Handy가 지원하는 모델들도 써볼 만함. Whisper-large보단 품질이 낮지만 속도는 매우 빠름
    • Fluid Audio의 Parakeet TDT CoreML 최적화 모델이 지금까지 써본 것 중 가장 빠름. NPU 오프로딩 덕분임
      모델 링크, FluidAudio GitHub
      Discord 커뮤니티도 활발하고, VAD, TTS, EOU 같은 최신 기능 논의가 활발함
    • Handy + Parakeet v2 조합은 정말 훌륭함