snow · 2026.5.24 02:32 · 조회 2
Bark 설치 및 사용 가이드 (Mac)
개요
이 가이드는 Mac(특히 Apple Silicon M1/M2/M3/M4 칩셋) 환경에서 Bark TTS 모델을 설치하고 사용하는 방법을 안내한다. Bark는 GPU(CUDA), Apple Silicon의 MPS(Metal Performance Shaders), 그리고 CPU 환경에서 모두 실행 가능하다. Mac에서는 주로 MPS 가속 또는 CPU 방식으로 실행된다.
사전 요구사항
- 운영체제: macOS 12 (Monterey) 이상 권장 (Apple Silicon MPS 사용 시)
- Python: 3.8 이상 (3.10 또는 3.11 권장)
- PyTorch: 2.0 이상 (MPS 지원 포함)
- 가상 환경: venv 또는 conda 사용 강력 권장
- 디스크 공간: 모델 다운로드에 약 5~10GB 필요
- 메모리: 최소 8GB RAM (16GB 이상 권장)
설치 방법
방법 1: pip 설치 (간단)
# 가상 환경 생성 및 활성화
python3 -m venv bark-env
source bark-env/bin/activate
# pip 업그레이드
pip install --upgrade pip
# Bark 설치
pip install bark
방법 2: GitHub 소스 설치 (최신 버전)
# 저장소 클론
git clone https://github.com/suno-ai/bark.git
cd bark
# 가상 환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate
# 의존성 설치
pip install --upgrade pip
pip install -e .
방법 3: Transformers 라이브러리 사용
HuggingFace Transformers를 통해 Bark를 사용하는 방법으로, 별도의 bark 패키지 없이도 실행 가능하다.
pip install --upgrade pip
pip install transformers scipy
Apple Silicon MPS / CPU 실행 설정
MPS 가속 활성화 (권장)
Apple Silicon Mac에서는 MPS(Metal Performance Shaders)를 통해 GPU 가속을 활용할 수 있다. PyTorch 2.0 이상에서 MPS를 지원한다.
import os
import torch
# MPS 사용 가능 여부 확인
if torch.backends.mps.is_available():
device = torch.device("mps")
print("MPS 사용 가능 - Apple Silicon 가속 활성화")
elif torch.cuda.is_available():
device = torch.device("cuda")
print("CUDA 사용 가능")
else:
device = torch.device("cpu")
print("CPU 모드로 실행")
일부 PyTorch 연산이 MPS에서 지원되지 않을 수 있다. 이 경우 아래 환경 변수를 설정하면 지원되지 않는 연산을 CPU로 폴백(fallback)하여 오류 없이 실행할 수 있다.
export PYTORCH_ENABLE_MPS_FALLBACK=1
또는 Python 코드에서:
import os
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"
CPU 전용 실행
메모리가 부족하거나 MPS에서 오류가 발생하는 경우, CPU 모드로 실행할 수 있다. 속도는 느리지만 안정성이 높다.
import os
# CPU 전용 모드 강제 설정
os.environ["SUNO_OFFLOAD_CPU"] = "True"
os.environ["SUNO_USE_SMALL_MODELS"] = "True" # 소형 모델 사용으로 메모리 절약
기본 TTS 사용법
bark 패키지 사용
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
import numpy as np
# 모델 사전 로드 (첫 실행 시 다운로드 포함, 시간 소요)
preload_models()
# 텍스트를 음성으로 변환
text_prompt = "안녕하세요. 저는 Bark TTS 모델입니다."
audio_array = generate_audio(text_prompt)
# WAV 파일로 저장
write_wav("output.wav", SAMPLE_RATE, audio_array)
print(f"오디오 저장 완료: output.wav (샘플레이트: {SAMPLE_RATE}Hz)")
Transformers 라이브러리 사용
from transformers import AutoProcessor, BarkModel
import torch
import scipy
# 디바이스 설정
device = "mps" if torch.backends.mps.is_available() else "cpu"
# 모델 및 프로세서 로드
processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark")
model = model.to(device)
# 텍스트를 음성으로 변환
text = "안녕하세요. Bark 모델을 테스트하고 있습니다."
inputs = processor(text, return_tensors="pt").to(device)
# 오디오 생성
with torch.no_grad():
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()
# 저장
sample_rate = model.generation_config.sample_rate
scipy.io.wavfile.write("output.wav", rate=sample_rate, data=audio_array)
특수 토큰 활용 예시
특수 토큰을 텍스트 내에 삽입하여 다양한 감정과 소리를 생성할 수 있다.
웃음 삽입
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
preload_models()
# 웃음 토큰 활용
text = "정말요? [laughs] 그건 제가 들어본 것 중 가장 재미있는 이야기예요! [giggles]"
audio_array = generate_audio(text)
write_wav("laugh_example.wav", SAMPLE_RATE, audio_array)
음악과 함께 내레이션
# 음악 토큰 활용
text = "오늘의 하이라이트를 소개합니다. [upbeat music] 첫 번째 순서는 특별 공연입니다!"
audio_array = generate_audio(text)
write_wav("music_example.wav", SAMPLE_RATE, audio_array)
감정 표현 혼합
# 다양한 감정 토큰 혼합
text = "[sighs deeply] 오늘도 하루가 지나가네요. [hums] 그래도 내일은 더 좋은 날이 올 거예요. [laughs]"
audio_array = generate_audio(text)
write_wav("emotion_example.wav", SAMPLE_RATE, audio_array)
화자 프롬프트 사용법
화자 프리셋을 지정하면 일관된 목소리 특성을 유지할 수 있다.
bark 패키지로 화자 지정
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
preload_models()
# 한국어 화자 프리셋 사용
text = "안녕하세요, 저는 한국어를 구사하는 Bark입니다."
audio_array = generate_audio(text, history_prompt="v2/ko_speaker_3")
write_wav("korean_speaker.wav", SAMPLE_RATE, audio_array)
# 영어 화자 프리셋 사용
text_en = "Hello! I am Bark, a text-to-audio model by Suno AI."
audio_array_en = generate_audio(text_en, history_prompt="v2/en_speaker_6")
write_wav("english_speaker.wav", SAMPLE_RATE, audio_array_en)
Transformers로 화자 지정
from transformers import AutoProcessor, BarkModel
import torch, scipy
device = "mps" if torch.backends.mps.is_available() else "cpu"
processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark").to(device)
# 화자 프리셋 지정
voice_preset = "v2/ko_speaker_5"
inputs = processor("오늘 날씨가 정말 좋네요!", voice_preset=voice_preset, return_tensors="pt").to(device)
with torch.no_grad():
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()
scipy.io.wavfile.write("ko_voice.wav", rate=model.generation_config.sample_rate, data=audio_array)
성능 최적화 팁 (오프로딩)
Mac에서 메모리 제약이 있을 경우 아래 최적화 기법을 활용할 수 있다.
소형 모델 사용
import os
# 소형 모델 사용 (품질 낮아지지만 속도·메모리 향상)
os.environ["SUNO_USE_SMALL_MODELS"] = "True"
from bark import SAMPLE_RATE, generate_audio, preload_models
preload_models()
CPU 오프로딩 (Transformers)
from transformers import BarkModel
# CPU 오프로딩 활성화 (accelerate 패키지 필요)
model = BarkModel.from_pretrained("suno/bark")
model.enable_cpu_offload()
enable_cpu_offload() 사용 시 accelerate 패키지가 필요하다.
pip install accelerate
float16 추론 (메모리 절약)
from transformers import BarkModel
import torch
model = BarkModel.from_pretrained("suno/bark", torch_dtype=torch.float16)
model = model.to("mps") # Apple Silicon MPS 사용
자주 발생하는 오류 해결
오류 1: MPS 연산 미지원
NotImplementedError: The operator 'aten::...' is not currently implemented for the MPS device
해결: MPS fallback 환경 변수 설정
export PYTORCH_ENABLE_MPS_FALLBACK=1
python your_script.py
오류 2: 메모리 부족 (OOM)
RuntimeError: MPS backend out of memory
해결: 소형 모델 사용 및 CPU 오프로딩 활성화
import os
os.environ["SUNO_USE_SMALL_MODELS"] = "True"
os.environ["SUNO_OFFLOAD_CPU"] = "True"
오류 3: 모델 다운로드 실패
해결: HuggingFace 캐시 초기화 후 재시도
# 캐시 삭제
rm -rf ~/.cache/huggingface/hub/models--suno--bark
# 또는 huggingface_hub 사용
python -c "from huggingface_hub import snapshot_download; snapshot_download('suno/bark')"
오류 4: scipy 미설치
ModuleNotFoundError: No module named 'scipy'
해결:
pip install scipy
오류 5: 생성된 오디오가 무음이거나 잡음
텍스트가 너무 길 경우 발생할 수 있다. Bark는 약 13초 이내의 오디오 생성에 최적화되어 있으며, 긴 텍스트는 문장 단위로 분할하여 생성 후 합치는 방식을 권장한다.
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
import numpy as np
preload_models()
# 긴 텍스트 분할 생성
sentences = [
"안녕하세요. 오늘은 Bark TTS를 테스트해보겠습니다.",
"Bark는 다양한 감정 표현이 가능한 AI 음성 모델입니다.",
"특수 토큰을 활용하면 더욱 자연스러운 음성을 생성할 수 있습니다."
]
audio_pieces = [generate_audio(s) for s in sentences]
full_audio = np.concatenate(audio_pieces)
write_wav("long_text.wav", SAMPLE_RATE, full_audio)
참고 링크
- GitHub 저장소: https://github.com/suno-ai/bark
- HuggingFace 모델: https://huggingface.co/suno/bark
- HuggingFace Transformers 문서: https://huggingface.co/docs/transformers/model_doc/bark
- PyTorch MPS 가속 가이드: https://pytorch.org/docs/stable/notes/mps.html
- 화자 프리셋 전체 목록: Bark Speaker Presets
- Apple Silicon 지원 이슈: GitHub Issue #19
댓글
아직 댓글이 없습니다.
댓글을 작성하려면 로그인이 필요합니다.