Higgs Audio V2: 차세대 오픈소스 음성 생성 모델 완벽 가이드
⏱️ 예상 읽기 시간: 8분
서론
음성 AI 기술이 급속도로 발전하면서, 표현력 있고 자연스러운 음성 생성에 대한 수요가 크게 증가하고 있습니다. 최근 BosonAI에서 공개한 Higgs Audio V2는 이러한 요구를 충족하는 혁신적인 오픈소스 음성 생성 모델입니다.
Higgs Audio V2는 1천만 시간 이상의 방대한 오디오 데이터로 사전 훈련된 강력한 오디오 기반 모델로, 별도의 후처리나 미세 조정 없이도 뛰어난 표현력을 보여줍니다. 특히 EmergentTTS-Eval에서 “gpt-4o-mini-tts” 대비 감정 표현에서 75.7%, 질문 표현에서 55.7%의 승률을 기록하며 업계 최고 수준의 성능을 입증했습니다.
Higgs Audio V2 주요 특징
혁신적인 기술 아키텍처
Higgs Audio V2는 세 가지 핵심 기술 혁신을 통해 탁월한 성능을 달성했습니다:
1. AudioVerse 데이터셋
- 1천만 시간의 고품질 오디오 데이터
- 다중 ASR 모델과 음향 이벤트 분류 모델을 활용한 자동 주석 파이프라인
- 음성, 음악, 사운드 이벤트를 포괄하는 통합 데이터셋
2. 통합 오디오 토크나이저
- 초당 25프레임의 효율적인 처리 속도
- 2배 높은 비트레이트 토크나이저와 동등하거나 더 나은 음질
- 24kHz 데이터에서 음성, 음악, 사운드 이벤트를 하나의 시스템으로 처리
- 빠른 배치 추론을 위한 비확산 인코더/디코더 구조
3. DualFFN 아키텍처
- Llama-3.2-3B 기반의 혁신적인 설계
- 오디오 전용 전문가 모듈로 작동
- 최소한의 계산 오버헤드로 성능 향상
- 3.6B (LLM) + 2.2B (Audio Dual FFN) 총 파라미터
뛰어난 성능 지표
Seed-TTS Eval & ESD 벤치마크
| 모델 | WER ↓ | SIM ↑ | ESD WER ↓ | ESD SIM ↑ | |——|——-|——-|———–|———–| | Cosyvoice2 | 2.28 | 65.49 | 2.71 | 80.48 | | ElevenLabs Multilingual V2 | 1.43 | 50.00 | 1.66 | 65.87 | | Higgs Audio v1 | 2.18 | 66.27 | 1.49 | 82.84 | | Higgs Audio v2 | 2.44 | 67.70 | 1.78 | 86.13 |
EmergentTTS-Eval 결과
| 모델 | 감정 표현 (%) | 질문 표현 (%) | |——|————–|————–| | Higgs Audio v2 | 75.71 | 55.71 | | gpt-4o-audio-preview | 61.64 | 47.85 | | Hume.AI | 61.60 | 43.21 | | gpt-4o-mini-tts (기준) | 50.00 | 50.00 |
설치 및 환경 구성
1. 시스템 요구사항
# Python 3.8 이상
# CUDA 지원 GPU (권장)
# 최소 16GB RAM
2. 라이브러리 설치
# 저장소 클론
git clone https://github.com/boson-ai/higgs-audio.git
cd higgs-audio
# 가상환경 생성 및 활성화
python3 -m venv higgs_audio_env
source higgs_audio_env/bin/activate
# 의존성 설치
pip install -r requirements.txt
pip install -e .
3. 모델 다운로드 확인
# Hugging Face 모델 경로 확인
python -c "from transformers import AutoModel; print('모델 다운로드 준비 완료')"
기본 사용법
1. 간단한 텍스트-음성 변환
from boson_multimodal.serve.serve_engine import HiggsAudioServeEngine, HiggsAudioResponse
from boson_multimodal.data_types import ChatMLSample, Message, AudioContent
import torch
import torchaudio
# 모델 경로 설정
MODEL_PATH = "bosonai/higgs-audio-v2-generation-3B-base"
AUDIO_TOKENIZER_PATH = "bosonai/higgs-audio-v2-tokenizer"
# 시스템 프롬프트 설정
system_prompt = (
"Generate audio following instruction.\n\n<|scene_desc_start|>\n"
"Audio is recorded from a quiet room.\n<|scene_desc_end|>"
)
# 메시지 구성
messages = [
Message(role="system", content=system_prompt),
Message(
role="user",
content="안녕하세요! 오늘은 정말 좋은 날씨네요. 산책하기 딱 좋을 것 같아요."
),
]
# 디바이스 설정
device = "cuda" if torch.cuda.is_available() else "cpu"
# 서빙 엔진 초기화
serve_engine = HiggsAudioServeEngine(
MODEL_PATH,
AUDIO_TOKENIZER_PATH,
device=device
)
# 음성 생성
output: HiggsAudioResponse = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=messages),
max_new_tokens=1024,
temperature=0.3,
top_p=0.95,
top_k=50,
stop_strings=["<|end_of_text|>", "<|eot_id|>"],
)
# 오디오 파일 저장
torchaudio.save(
"korean_output.wav",
torch.from_numpy(output.audio)[None, :],
output.sampling_rate
)
print("음성 파일이 'korean_output.wav'로 저장되었습니다.")
2. 다국어 음성 생성
# 영어 음성 생성
english_messages = [
Message(role="system", content=system_prompt),
Message(
role="user",
content="The sun rises in the east and sets in the west. "
"This simple fact has been observed by humans for thousands of years."
),
]
english_output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=english_messages),
max_new_tokens=1024,
temperature=0.3,
top_p=0.95,
top_k=50,
stop_strings=["<|end_of_text|>", "<|eot_id|>"],
)
torchaudio.save("english_output.wav", torch.from_numpy(english_output.audio)[None, :], english_output.sampling_rate)
고급 활용 사례
1. 감정 표현 음성 생성
# 감정이 담긴 시스템 프롬프트
emotional_system_prompt = (
"Generate expressive audio with emotions following instruction.\n\n"
"<|scene_desc_start|>\nAudio is recorded from a studio with clear acoustics.\n<|scene_desc_end|>"
)
emotional_messages = [
Message(role="system", content=emotional_system_prompt),
Message(
role="user",
content="정말 놀라운 소식이에요! 드디어 프로젝트가 성공했습니다! "
"모든 팀원들이 정말 열심히 노력한 결과입니다."
),
]
emotional_output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=emotional_messages),
max_new_tokens=1024,
temperature=0.5, # 더 다양한 표현을 위해 온도 증가
top_p=0.95,
top_k=50,
)
torchaudio.save("emotional_output.wav", torch.from_numpy(emotional_output.audio)[None, :], emotional_output.sampling_rate)
2. 내레이션 스타일 조정
# 내레이션용 프롬프트
narration_system_prompt = (
"Generate audio for storytelling narration.\n\n"
"<|scene_desc_start|>\nAudio is recorded for audiobook narration with professional quality.\n<|scene_desc_end|>"
)
narration_messages = [
Message(role="system", content=narration_system_prompt),
Message(
role="user",
content="옛날 옛적에 깊은 숲속에 작은 마을이 있었습니다. "
"그 마을에는 신비로운 이야기가 전해져 내려왔는데..."
),
]
narration_output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=narration_messages),
max_new_tokens=1024,
temperature=0.4,
top_p=0.9,
)
torchaudio.save("narration_output.wav", torch.from_numpy(narration_output.audio)[None, :], narration_output.sampling_rate)
멀티 스피커 대화 생성
Higgs Audio V2의 독특한 기능 중 하나는 자동 멀티 스피커 대화 생성입니다:
# 멀티 스피커 대화 프롬프트
multi_speaker_system_prompt = (
"Generate multi-speaker dialogue audio.\n\n"
"<|scene_desc_start|>\nDialogue between two people in a casual conversation setting.\n<|scene_desc_end|>"
)
dialogue_messages = [
Message(role="system", content=multi_speaker_system_prompt),
Message(
role="user",
content="Speaker A: 안녕하세요! 오늘 날씨가 정말 좋네요.\n"
"Speaker B: 네, 맞아요! 이런 날에는 산책하기 딱 좋을 것 같아요.\n"
"Speaker A: 좋은 생각이에요. 같이 공원에 가볼까요?"
),
]
dialogue_output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=dialogue_messages),
max_new_tokens=1536, # 더 긴 대화를 위해 토큰 수 증가
temperature=0.6,
top_p=0.95,
)
torchaudio.save("dialogue_output.wav", torch.from_numpy(dialogue_output.audio)[None, :], dialogue_output.sampling_rate)
성능 최적화 팁
1. GPU 메모리 최적화
import torch.cuda
# GPU 메모리 캐시 정리
if torch.cuda.is_available():
torch.cuda.empty_cache()
# 혼합 정밀도 사용 (선택사항)
serve_engine = HiggsAudioServeEngine(
MODEL_PATH,
AUDIO_TOKENIZER_PATH,
device=device,
torch_dtype=torch.float16 # 메모리 절약
)
2. 배치 처리
# 여러 텍스트를 배치로 처리
texts = [
"첫 번째 문장입니다.",
"두 번째 문장입니다.",
"세 번째 문장입니다."
]
for i, text in enumerate(texts):
messages = [
Message(role="system", content=system_prompt),
Message(role="user", content=text),
]
output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=messages),
max_new_tokens=1024,
temperature=0.3,
)
torchaudio.save(f"batch_output_{i+1}.wav", torch.from_numpy(output.audio)[None, :], output.sampling_rate)
실제 워크플로우 통합
1. API 서버 구축
from flask import Flask, request, send_file
import io
import base64
app = Flask(__name__)
# 전역 서빙 엔진 초기화
global_engine = HiggsAudioServeEngine(MODEL_PATH, AUDIO_TOKENIZER_PATH, device=device)
@app.route('/tts', methods=['POST'])
def text_to_speech():
data = request.json
text = data.get('text', '')
if not text:
return {'error': 'Text is required'}, 400
messages = [
Message(role="system", content=system_prompt),
Message(role="user", content=text),
]
try:
output = global_engine.generate(
chat_ml_sample=ChatMLSample(messages=messages),
max_new_tokens=1024,
temperature=0.3,
)
# 오디오를 base64로 인코딩
audio_buffer = io.BytesIO()
torchaudio.save(audio_buffer, torch.from_numpy(output.audio)[None, :], output.sampling_rate, format="wav")
audio_base64 = base64.b64encode(audio_buffer.getvalue()).decode('utf-8')
return {
'audio': audio_base64,
'sample_rate': output.sampling_rate,
'status': 'success'
}
except Exception as e:
return {'error': str(e)}, 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
2. 스트리밍 처리
def stream_audio_generation(text_chunks):
"""텍스트 청크들을 스트리밍으로 음성 변환"""
for chunk in text_chunks:
messages = [
Message(role="system", content=system_prompt),
Message(role="user", content=chunk),
]
output = serve_engine.generate(
chat_ml_sample=ChatMLSample(messages=messages),
max_new_tokens=512, # 청크별로 짧게
temperature=0.3,
)
yield output.audio, output.sampling_rate
# 사용 예시
text_chunks = [
"첫 번째 문단입니다.",
"두 번째 문단입니다.",
"세 번째 문단입니다."
]
for i, (audio, sample_rate) in enumerate(stream_audio_generation(text_chunks)):
torchaudio.save(f"stream_chunk_{i+1}.wav", torch.from_numpy(audio)[None, :], sample_rate)
트러블슈팅
1. 일반적인 문제 해결
GPU 메모리 부족
# CUDA 메모리 상태 확인
nvidia-smi
# 작은 배치 크기로 실행
python -c "
import torch
if torch.cuda.is_available():
print(f'GPU 메모리: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB')
print(f'사용 가능한 메모리: {torch.cuda.memory_reserved(0) / 1e9:.1f} GB')
"
모델 로딩 실패
# 모델 다운로드 확인
from huggingface_hub import snapshot_download
try:
snapshot_download(repo_id="bosonai/higgs-audio-v2-generation-3B-base")
snapshot_download(repo_id="bosonai/higgs-audio-v2-tokenizer")
print("모델 다운로드 완료")
except Exception as e:
print(f"다운로드 오류: {e}")
2. 성능 이슈 해결
느린 추론 속도
# 모델 최적화 설정
serve_engine = HiggsAudioServeEngine(
MODEL_PATH,
AUDIO_TOKENIZER_PATH,
device=device,
torch_compile=True, # PyTorch 2.0 컴파일 최적화
load_in_8bit=True # 양자화로 메모리 절약
)
커뮤니티 및 확장성
1. 오픈소스 기여
- GitHub: https://github.com/boson-ai/higgs-audio
- Hugging Face: bosonai/higgs-audio-v2-generation-3B-base
- 라이선스: 커스텀 라이선스 (상업적 사용 검토 필요)
2. 확장 가능성
- 다양한 언어 지원 확대
- 실시간 스트리밍 최적화
- 감정 제어 API 개발
- 음성 복제 및 개인화
결론
Higgs Audio V2는 오픈소스 음성 생성 기술의 새로운 이정표를 세웠습니다. 1천만 시간의 방대한 데이터로 훈련된 이 모델은 기존 상용 서비스와 경쟁할 수 있는 수준의 성능을 보여주며, 동시에 오픈소스의 투명성과 확장성을 제공합니다.
특히 DualFFN 아키텍처와 통합 오디오 토크나이저를 통한 기술적 혁신은 향후 오디오 AI 발전 방향을 제시하고 있습니다. 다국어 지원, 멀티 스피커 대화, 감정 표현 등의 고급 기능은 실제 프로덕션 환경에서도 충분히 활용 가능한 수준입니다.
개발자와 연구자들에게 Higgs Audio V2는 단순한 TTS 도구를 넘어서, 차세대 멀티모달 AI 시스템 구축의 핵심 구성 요소가 될 것입니다. 오픈소스 생태계의 힘을 통해 더욱 발전된 음성 AI의 미래를 기대해 봅시다.
관련 링크: