Kokoro로 로컬 CPU에서 고품질 TTS 실행하기

1 hour ago 1
  • 로컬 음성 생성은 이제 전용 GPU 없이도 충분히 현실적인 품질을 낼 수 있으며, 예시 환경에서는 GPU를 LLM 추론에 남기고 TTS를 CPU가 처리함
  • Kokoro는 82M 파라미터 모델이지만 영어, 중국어, 힌디어 등 여러 언어를 지원하고 약 50개 음성을 제공하며 영어에 가장 최적화되어 있음
  • 가장 쉬운 구성은 Kokoro-FastAPI 컨테이너를 실행하는 방식이고, 음성 모델이 미리 포함되어 이미지 크기가 약 5GB임
  • OpenAI speech API와 호환되는 인터페이스를 제공해 기존 음성 API 기반 프로그램을 로컬 TTS로 비교적 쉽게 바꿔 쓸 수 있음
  • 짧은 문단 합성은 Intel Core i7-4770K 4.7초, Apple M2 Pro 4.5초, AMD Ryzen 7 8745HS 1.5초 수준이라 로컬 LLM 응답을 읽지 않고 듣는 사용 방식이 가능함

CPU만으로 실행하는 Kokoro TTS

  • 몇 년 전만 해도 현실적인 로컬 음성 생성은 어려웠지만, 지금은 개인정보를 외부 서비스에 맡기지 않고 높은 품질의 음성을 만들 수 있음
  • 예시는 이전에 다룬 로컬 LLM용 GTX 1080 Ti 머신에서 실행됨
    • 해당 머신의 전용 GPU는 LLM 추론에 예약됨
    • 음성 합성은 CPU만 사용함
  • 사용 모델은 Kokoro
    • 82M 파라미터 모델임
    • 영어, 중국어, 힌디어 등 여러 언어의 현실적인 음성을 생성함
    • 약 50개 음성을 제공하며, 주로 영어에 최적화되어 있음
  • 가장 간단한 서버 설정은 Kokoro-FastAPI 컨테이너 이미지를 쓰는 방식임
    • 미리 다운로드된 음성 모델이 포함되어 있음
    • 이 때문에 컨테이너 이미지 크기는 약 5GB
  • Docker 또는 Podman 실행 명령: podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu
  • 실행 후 웹 UI는 localhost:8880/web에서 열 수 있으며, 텍스트를 넣어 오디오를 생성하고 자동 재생할 수 있음

OpenAI 호환 API와 예제 실행

  • Kokoro-FastAPI 컨테이너는 웹 UI 외에도 OpenAI speech API 호환 TTS 인터페이스를 제공함
    • 기존 OpenAI speech API 사용 프로그램을 쉽게 맞춰 쓸 수 있음
    • JavaScript와 Python 예제 코드는 github.com/remotebrowser/speak에 있음
  • JavaScript 실행 예: export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.js "Good morning! How are you today?"
  • Python 실행 예: export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 ./speak.py "Good morning! How are you today?"
  • 생성된 오디오는 MP3 파일로 저장됨
    • SoX 또는 Sound eXchange가 설치되어 있으면 오디오가 자동 재생됨
    • SoX 정보는 sox.sf.net에서 확인할 수 있음
  • 다른 음성을 고르려면 TTS_VOICE 환경 변수를 설정함 export TTS_API_BASE_URL=http://127.0.0.1:8880/v1 export TTS_VOICE="am_eric" ./speak.js "Good morning! How are you today?"
  • 사용 가능한 전체 음성 목록은 Kokoro VOICES.md에 있음

CPU별 합성 시간과 대안

  • am_eric 음성으로 짧은 테스트 문단을 합성한 결과, 3회 실행 중 최선 기록 기준 생성 시간은 다음과 같음
    • Intel Core i7-4770K: 4.7초
    • Apple M2 Pro: 4.5초
    • AMD Ryzen 7 8745HS: 1.5초
  • 목록의 첫 CPU는 12년 전에 출시된 모델이며, 오래된 CPU에서도 작업을 처리할 수 있음
  • OpenAI 호환 컨테이너형 TTS 대안으로 Speaches도 있음
    • Kokoro-FastAPI와 달리 컨테이너 이미지에 음성 가중치가 포함되지 않으며, API로 명시적으로 다운로드해야 함
    • Whisper를 포함해 고품질 STT 기능도 제공함
    • 애플리케이션에 TTS와 STT가 모두 필요하면 한 곳에서 처리하는 선택지가 될 수 있음
  • 로컬 LLM과 결합하면 LLM 답변을 읽는 대신 음성으로 듣는 사용 방식이 가능함
Read Entire Article