snow · 2026.5.18 00:06 · 조회 2

StyleTTS2 설치 및 사용 가이드 (Mac)

StyleTTS2

개요

이 가이드는 Apple Silicon(M1/M2/M3) Mac에서 StyleTTS2를 설치하고 사용하는 방법을 단계별로 설명한다. StyleTTS2는 공식적으로 CUDA(NVIDIA GPU) 환경을 주 타깃으로 개발되었지만, PyPI 패키지(styletts2)를 통해 Mac에서도 CPU 또는 Apple의 MPS(Metal Performance Shaders) 가속으로 실행할 수 있다. 이 가이드는 Python 3.10 + Conda 환경을 기준으로 작성되었다.

사전 요구사항

설치를 시작하기 전에 아래 항목이 준비되어 있는지 확인한다.

항목권장 사항
macOS12.3 Monterey 이상 (MPS 가속 사용 시 필수)
Apple SiliconM1 / M2 / M3 및 파생 칩 (Intel Mac은 CPU 모드만 가능)
Python3.9 또는 3.10 (ARM64 네이티브 빌드)
Conda / MinicondaARM64용 Miniconda3 설치 권장
Homebrew패키지 관리자 (espeak-ng 설치에 필요)
Xcode CLI Toolsxcode-select --install로 설치

중요: Python은 반드시 ARM64 네이티브 빌드를 사용해야 한다. Rosetta 2를 통한 x86 에뮬레이션 환경에서는 MPS 가속이 동작하지 않는다. Miniconda를 설치할 때 Apple Silicon용 .pkg 또는 .sh 파일을 선택한다.

저장소 클론 및 의존성 설치

방법 1: PyPI 패키지 사용 (권장)

가장 간단한 방법은 styletts2 PyPI 패키지를 사용하는 것이다. 이 패키지는 MIT 라이선스 의존성만 사용하며 설치가 간편하다.

1# 1. Conda 가상환경 생성 (Python 3.10 권장)2conda create -n styletts2 python=3.103conda activate styletts24 5# 2. espeak-ng 설치 (phonemizer 의존성)6brew install espeak-ng7 8# 3. PyTorch 설치 (MPS 지원 포함)9pip install torch torchaudio10 11# 4. styletts2 패키지 설치12pip install styletts213 14# 5. pycrfsuite 아키텍처 호환성 문제 해결 (Mac 전용)15conda install -c conda-forge python-crfsuite

방법 2: GitHub 저장소 직접 클론

더 세밀한 제어가 필요하거나 학습/파인튜닝을 원한다면 저장소를 직접 클론한다.

1# 1. 저장소 클론2git clone https://github.com/yl4579/StyleTTS2.git3cd StyleTTS24 5# 2. Conda 가상환경 생성6conda create -n styletts2 python=3.107conda activate styletts28 9# 3. espeak-ng 설치10brew install espeak-ng11 12# 4. PyTorch 설치 (Apple Silicon용 — CUDA 버전 설치 금지)13pip install torch torchaudio14 15# 5. 나머지 의존성 설치16pip install -r requirements.txt17 18# 6. pycrfsuite 호환성 수정19conda install -c conda-forge python-crfsuite

사전훈련 모델 다운로드

StyleTTS2의 사전훈련 모델은 HuggingFace에서 제공된다.

LJSpeech 모델 (단일 화자)

1# huggingface_hub 설치2pip install huggingface_hub3 4# Python으로 다운로드5python - <<'EOF'6from huggingface_hub import hf_hub_download, snapshot_download7 8# LJSpeech 모델 전체 다운로드9snapshot_download(10    repo_id="yl4579/StyleTTS2-LJSpeech",11    local_dir="./Models/LJSpeech"12)13print("LJSpeech 모델 다운로드 완료")14EOF

LibriTTS 모델 (다중 화자 / 음성 복제용)

1python - <<'EOF'2from huggingface_hub import snapshot_download3 4snapshot_download(5    repo_id="yl4579/StyleTTS2-LibriTTS",6    local_dir="./Models/LibriTTS"7)8print("LibriTTS 모델 다운로드 완료")9EOF

다운로드 후 각 디렉토리에 config.yml과 모델 체크포인트 파일(.pth)이 있는지 확인한다.

Apple Silicon 환경 설정

MPS 가속 확인

아래 스크립트로 MPS가 정상적으로 활성화되는지 확인한다.

1import torch2 3print(f"PyTorch 버전: {torch.__version__}")4print(f"MPS 사용 가능: {torch.backends.mps.is_available()}")5print(f"MPS 빌드 포함: {torch.backends.mps.is_built()}")6 7if torch.backends.mps.is_available():8    device = torch.device("mps")9    x = torch.ones(3, device=device)10    print(f"MPS 테스트 성공: {x}")11else:12    device = torch.device("cpu")13    print("MPS 불가 — CPU 모드로 실행됩니다.")

출력이 MPS 사용 가능: True이면 GPU 가속이 적용된다. Apple Silicon Mac이지만 False로 나온다면 macOS 버전(12.3 이상 필요)과 PyTorch 버전을 확인한다.

PyPI 패키지에서 장치 설정

styletts2 패키지는 기본적으로 CUDA → CPU 순서로 장치를 자동 선택한다. Apple Silicon에서 MPS를 명시적으로 사용하려면 초기화 후 모델을 수동으로 이동시킨다.

1import torch2from styletts2 import tts3 4# TTS 객체 초기화 (초기에는 CPU로 로드됨)5my_tts = tts.StyleTTS2()6 7# MPS 장치로 이동8if torch.backends.mps.is_available():9    device = torch.device("mps")10    # 내부 모델 컴포넌트를 MPS로 이동11    for key in my_tts.model:12        if hasattr(my_tts.model[key], 'to'):13            my_tts.model[key] = my_tts.model[key].to(device)14    print("모델을 MPS 장치로 이동 완료")

MPS 이동 시 일부 연산자 호환성 문제로 오류가 발생할 수 있다. 그럴 경우 CPU 모드로 실행하는 것이 안정적이다.

기본 TTS 사용법

PyPI 패키지 사용

1from styletts2 import tts2 3# TTS 초기화 (첫 실행 시 모델 자동 다운로드)4my_tts = tts.StyleTTS2()5 6# 기본 음성으로 텍스트 합성7out = my_tts.inference(8    "Hello, this is a test of StyleTTS2 on Apple Silicon.",9    output_wav_file="output.wav"10)11 12print("음성 파일 생성 완료: output.wav")

파라미터 조정

1# 세밀한 제어를 위한 파라미터 설정2out = my_tts.inference(3    text="The quick brown fox jumps over the lazy dog.",4    output_wav_file="output_tuned.wav",5    alpha=0.3,            # 음색 제어 (높을수록 텍스트에 가까움, 기본값 0.3)6    beta=0.7,             # 운율 제어 (높을수록 텍스트에 가까움, 기본값 0.7)7    diffusion_steps=5,    # 품질/속도 트레이드오프 (높을수록 느리지만 고품질)8    embedding_scale=1.0   # 감정 강도 (높을수록 더 표현적)9)

음성 복제 사용법

음성 복제는 참조 음성 파일(최소 3~10초, WAV 형식 권장)을 제공하면 해당 화자의 목소리로 텍스트를 합성한다.

1from styletts2 import tts2 3my_tts = tts.StyleTTS2()4 5# 음성 복제 — 참조 음성 파일 경로를 지정6out = my_tts.inference(7    text="이 문장은 참조 화자의 목소리로 합성됩니다.",8    target_voice_path="/path/to/reference_voice.wav",  # 참조 음성 경로9    output_wav_file="cloned_output.wav",10    diffusion_steps=10,   # 복제 품질을 위해 steps 증가 권장11    alpha=0.3,12    beta=0.7,13    embedding_scale=1.014)15 16print("음성 복제 완료: cloned_output.wav")

참조 음성 파일 권장 사항:

  • 형식: WAV, 샘플레이트 24000Hz 권장
  • 길이: 3~15초 (너무 짧으면 품질 저하)
  • 배경 잡음이 없는 깨끗한 음성
  • 영어 텍스트와 영어 참조 음성 사용 권장

자주 발생하는 오류 해결

오류 1: ImportError: pycrfsuite 아키텍처 불일치

ImportError: dlopen(...pycrfsuite...): incompatible architecture (have 'x86_64', need 'arm64e')

해결:

1# conda-forge에서 ARM64 네이티브 빌드로 재설치2conda install -c conda-forge python-crfsuite

오류 2: RuntimeError: espeak not installed

RuntimeError: espeak not installed on your system

해결:

1# espeak-ng 설치2brew install espeak-ng3 4# 설치 확인5espeak-ng --version6 7# 환경변수로 경로 지정 (필요 시)8export PHONEMIZER_ESPEAK_PATH=$(brew --prefix)/bin/espeak-ng9export PHONEMIZER_ESPEAK_LIBRARY=$(brew --prefix)/lib/libespeak-ng.dylib

오류 3: AssertionError: Torch not compiled with CUDA enabled

AssertionError: Torch not compiled with CUDA enabled

해결: Mac에는 CUDA가 없다. CUDA를 요구하는 PyTorch 설치 명령어(예: --index-url https://download.pytorch.org/whl/cu118)를 사용했다면 제거 후 재설치한다.

1pip uninstall torch torchaudio2pip install torch torchaudio  # 기본 설치 = CPU+MPS 지원

오류 4: MPS 연산 오류 (NotImplementedError)

NotImplementedError: The operator 'aten::...` is not currently implemented for the MPS device.

해결: 일부 연산자가 MPS에서 미지원인 경우 CPU로 폴백한다.

1# 환경변수로 MPS 미지원 연산을 CPU에서 실행2import os3os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"4 5import torch6# 이후 코드 실행

오류 5: 고음 노이즈 / 오디오 품질 저하

구형 하드웨어나 일부 모델 설정에서 고음 노이즈가 발생할 수 있다.

  • diffusion_steps를 5에서 10~20으로 늘려본다.
  • CPU 모드로 실행해 본다.
  • 입력 텍스트가 너무 길지 않게 분할한다.

참고 링크

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.