Dia-1.6B를 로컬에서 실행하고 사용하는 방법
Dia-1.6B를 로컬에서 실행하고 사용하는 방법 - 완벽 가이드
로봇처럼 들리는 텍스트-투-스피치 음성에 실망한 적 있으신가요? 아니면 제한된 커스터마이징에 구독료를 지불하는 클라우드 기반 TTS 서비스에 지치셨나요? 저도 그랬습니다. 그러다 Dia-1.6B를 발견했죠 — 텍스트-투-스피치 기술의 가능성을 재정의하는 혁신적인 오픈소스 모델입니다.
처음 Dia-1.6B가 생성한 오디오 샘플을 들었을 때, 기계가 만든 것이라고 믿기 어려웠습니다. 자연스러운 멈춤, 감정의 억양, 심지어 웃음이나 목을 가다듬는 비언어적 신호까지 진짜 사람처럼 들렸습니다. 간단한 내레이션부터 복잡한 다중 인물 대화까지 다양한 스크립트로 일주일간 테스트한 결과, 오늘날 이용 가능한 가장 인상적인 오픈소스 TTS 솔루션 중 하나임을 확신하게 되었습니다.
이 가이드에서는 Dia-1.6B를 로컬 머신에서 실행하는 데 필요한 모든 것을, 설치부터 고급 사용법까지 단계별로 안내합니다. 이 글을 마치면, 완전한 제어와 프라이버시를 유지하며 스튜디오 품질의 대화를 직접 생성할 수 있게 될 것입니다.
Dia-1.6B란?
Dia-1.6B는 소규모 연구팀인 Nari Labs에서 개발한 획기적인 텍스트-투-스피치 모델입니다. 기존의 단일 음성 내레이션에 초점을 맞춘 TTS 모델과 달리, Dia는 대화 생성에 특화되어 있습니다. 16억 개의 파라미터를 가진 이 모델은 자연스러운 억양, 속도 조절, 비언어적 요소까지 포함한 현실적인 대화 음성으로 작성된 스크립트를 직접 변환할 수 있습니다.
Apache 2.0 라이선스로 공개된 Dia-1.6B는 ElevenLabs Studio나 Sesame CSM-1B 같은 독점 솔루션에 대한 강력한 오픈소스 대안입니다. 특히 다음과 같은 기능이 돋보입니다:
- 개별 음성이 뚜렷한 다중 화자 대화 생성
- 텍스트 지시에 따라 웃음, 기침, 한숨 같은 비언어적 소리 생성
- 오디오 샘플로부터 음성 클로닝하여 일관된 음성 생성
- 오디오 컨디셔닝을 통한 감정 톤 및 전달 제어
본질적으로 Dia-1.6B는 고품질 음성 합성 기술의 민주화를 크게 진전시켰습니다. 완전한 오픈소스 모델이므로 인터넷 연결 없이 로컬에서 실행 가능하며, 구독료 없이 콘텐츠에 대한 완전한 프라이버시를 유지할 수 있습니다.
하드웨어 및 소프트웨어 요구사항
설치에 앞서, Dia-1.6B를 실행할 시스템이 준비되었는지 확인해봅시다. 모델은 놀라울 정도로 효율적이지만, 몇 가지 구체적인 요구사항이 있습니다.
하드웨어 요구사항
16억 파라미터 모델을 로컬에서 실행하는 것은 간단하지 않지만, 슈퍼컴퓨터가 필요하지는 않습니다. 필요한 사양은 다음과 같습니다:
구성 요소 | 최소 요구사항 | 권장 사양 |
---|---|---|
GPU | CUDA 지원 NVIDIA GPU | RTX 3070/4070 이상 |
VRAM | 8GB (일부 제한 있음) | 10GB 이상 |
RAM | 16GB | 32GB |
저장 공간 | 10GB 여유 공간 | 20GB 이상 SSD |
CPU | 쿼드코어 | 6코어 이상 |
가장 중요한 부품은 GPU입니다. 저는 11GB VRAM의 구형 GTX 1080 Ti에서도 Dia-1.6B를 실행했지만, 최신 RTX 3080에 비해 생성 속도가 눈에 띄게 느렸습니다. 적합한 GPU가 없다면 Hugging Face의 ZeroGPU Space에서 온라인으로 모델을 사용해보거나, 향후 업데이트 예정인 CPU 지원을 기다려보는 것도 방법입니다.
소프트웨어 필수 조건
원활한 설치를 위해 다음이 필요합니다:
- 운영체제: Windows 10/11, macOS (M1/M2/M3의 MPS 지원), 또는 Linux
- Python: 3.8 이상 (저는 Python 3.10을 사용했고 매우 만족스러웠습니다)
- CUDA Toolkit: 12.6 버전 (NVIDIA GPU용)
- Git: 저장소 클론용
- 가상환경 관리자: venv, conda 또는 uv (추천)
저는 uv 패키지 관리자를 사용하면 설치 과정이 훨씬 간단해져서, 표준 방법과 uv 방법 두 가지 모두에 대한 안내를 포함하겠습니다.
Dia-1.6B 로컬 설치하기
필요한 준비가 끝났으니, 이제 Dia-1.6B를 머신에 설치하고 실행해봅시다. 각 단계를 차근차근 안내하겠습니다.
1단계: 저장소 클론하기
먼저 GitHub에서 코드를 받아야 합니다. 터미널이나 명령 프롬프트를 열고 다음을 실행하세요:
git clone https://github.com/nari-labs/dia.git
cd dia
이렇게 하면 "dia"라는 새 디렉터리가 생성되고 필요한 모든 코드가 포함됩니다.
2단계: 환경 설정하기
두 가지 옵션이 있습니다. 가장 간단한 방법은 uv를 사용하는 것입니다. 강력히 추천합니다:
옵션 A: uv 사용하기 (추천)
uv가 설치되어 있지 않다면 다음으로 설치하세요:
pip install uv
그런 다음 한 줄 명령으로 uv가 모든 것을 처리합니다:
uv run app.py
이 명령은 자동으로 가상환경을 만들고, 모든 의존성을 설치하며, Gradio 인터페이스를 실행합니다. 제가 시도했을 때, 괜찮은 인터넷 속도에서 약 5분 정도 걸렸습니다.
옵션 B: 수동 설정
전통적인 방법을 선호한다면:
# 가상환경 생성
python -m venv .venv
# 가상환경 활성화
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# 의존성 설치
pip install -e .
# 애플리케이션 실행
python app.py
처음 이 방법을 시도했을 때, 시스템에 설치된 오래된 라이브러리와 의존성 충돌이 있었습니다. 비슷한 문제가 발생하면 다른 디렉터리에 새 가상환경을 만들어 시도해보세요.
3단계: 첫 실행
Dia-1.6B를 처음 실행하면 Hugging Face에서 모델 가중치(약 3GB)와 Descript Audio Codec을 다운로드합니다. 인터넷 속도에 따라 몇 분 걸릴 수 있습니다.
다운로드가 완료되면 터미널에 Gradio 서버가 실행 중임을 알리는 메시지와 http://127.0.0.1:7860
같은 URL이 표시됩니다. 웹 브라우저에서 이 URL을 열어 인터페이스에 접속하세요.
모든 것이 정상이라면 Dia-1.6B Gradio 인터페이스가 나타나고, 스크립트로부터 음성을 생성할 준비가 된 상태일 것입니다!
Gradio 인터페이스로 Dia-1.6B 사용하기
Gradio 인터페이스는 Dia-1.6B와 직관적으로 상호작용할 수 있는 방법을 제공합니다. 효과적으로 사용하는 법을 살펴봅시다.
기본 텍스트-투-스피치 생성
첫 대화를 생성하려면:
- 텍스트 입력란에 화자 태그를 사용해 스크립트를 입력하세요:
[S1] Dia에 오신 것을 환영합니다, 놀라운 텍스트-투-스피치 모델입니다. [S2] 여러 화자의 현실적인 대화를 생성할 수 있습니다. [S1] 그리고 웃음 같은 비언어적 신호도 처리합니다! (laughs)
"Generate" 버튼을 클릭하고 처리가 완료될 때까지 기다립니다.
완료되면 제공된 컨트롤로 오디오를 재생하거나 나중에 사용할 수 있도록 다운로드할 수 있습니다.
처음 테스트했을 때, Dia가 화자 전환과 끝의 자연스러운 웃음을 얼마나 잘 처리하는지 놀랐습니다. 각 화자의 음성은 뚜렷했지만, 오디오 프롬프트를 제공하거나 고정 시드를 설정하지 않으면 생성할 때마다 음성이 바뀝니다.
화자 태그 및 비언어적 신호 사용하기
Dia-1.6B는 간단한 표기법을 사용합니다:
- 화자 태그:
[S1]
,[S2]
등으로 다른 화자를 표시 - 비언어적 신호:
(laughs)
,(coughs)
,(sighs)
같은 설명을 괄호 안에 넣음
예를 들어:
[S1] 그 농담 들었어? (laughs) 정말 웃겼어! [S2] (clears throat) 잘 이해가 안 되는데, 설명해줄래? [S1] (sighs) 괜찮아.
모델은 이러한 신호를 해석해 적절한 소리를 생성하여 몰입감 있는 대화 경험을 만듭니다.
오디오 프롬프트로 음성 클로닝하기
Dia-1.6B의 가장 강력한 기능 중 하나는 오디오 샘플로부터 음성을 클로닝하는 능력입니다. 사용법은 다음과 같습니다:
- 클로닝하려는 음성의 오디오 파일(MP3 또는 WAV)을 준비합니다.
- Gradio 인터페이스에서 "Audio Prompt" 섹션에 오디오 파일을 업로드합니다.
- "Transcript of Audio Prompt" 필드에 오디오에서 말한 정확한 텍스트를 입력합니다.
- 메인 텍스트 필드에 새 스크립트를 추가합니다.
- 평소처럼 생성 버튼을 누릅니다.
모델은 오디오 샘플을 분석해 음성 특성에 맞게 출력을 조절합니다. 저는 10~15초 이상의 명확하고 고품질 녹음에서 가장 좋은 결과를 얻었습니다.
음성 클로닝이 완벽하지는 않으며, 긴 생성에서는 약간의 음성 변화가 있을 수 있지만, 여러 세대에 걸쳐 일관된 캐릭터 음성을 유지하는 데 매우 효과적입니다.
Dia-1.6B를 Python 애플리케이션에 통합하기
Gradio 인터페이스는 실험에 편리하지만, Dia-1.6B를 직접 Python 애플리케이션에 통합하고 싶을 수도 있습니다. 다행히도 모델은 Python 라이브러리로 쉽게 접근할 수 있습니다.
기본 통합 예제
시작하기 위한 간단한 예제입니다:
import soundfile as sf
from dia.model import Dia
# 모델 불러오기
model = Dia.from_pretrained("nari-labs/Dia-1.6B")
# 스크립트 정의
text = "[S1] Dia와 Python 통합은 정말 간단합니다. [S2] 네, 어떤 애플리케이션에도 추가할 수 있습니다. [S1] 정말 대단하네요! (laughs)"
# 오디오 생성
output = model.generate(text)
# 파일로 저장
sf.write("output.wav", output, 44100)
print("오디오가 생성되어 output.wav에 저장되었습니다.")
이 코드는 모델을 불러와 스크립트로부터 음성을 생성하고 WAV 파일로 저장합니다. 처음 실행할 때 초기화에 시간이 걸릴 수 있지만, 이후 생성은 훨씬 빠릅니다.
Python에서 고급 음성 클로닝
음성 클로닝을 더 세밀하게 제어하려면 audio_prompt_path
매개변수를 사용할 수 있습니다:
import soundfile as sf
from dia.model import Dia
# 모델 불러오기
model = Dia.from_pretrained("nari-labs/Dia-1.6B")
# 오디오 프롬프트 정보
clone_from_audio = "your_voice_sample.mp3"
clone_from_text = "[S1] 이 음성 샘플의 전사 텍스트입니다."
# 클로닝된 음성으로 생성할 새 스크립트
new_script = "[S1] 이 음성 샘플과 비슷한 음성으로 들릴 것입니다. [S2] 하지만 이 부분은 완전히 다른 음성입니다."
# 음성 클로닝과 함께 생성
output = model.generate(
clone_from_text + new_script, # 프롬프트 전사와 새 스크립트 결합
audio_prompt_path=clone_from_audio
)
# 파일로 저장
sf.write("cloned_voice.wav", output, 44100)
이 방법은 제가 진행 중인 팟캐스트 프로젝트에서 여러 생성 파일 간 캐릭터 일관성을 유지하는 데 특히 유용했습니다.
여러 스크립트 일괄 처리
여러 스크립트를 처리해야 한다면, 모델을 한 번만 불러와 재사용하는 것이 효율적입니다:
import soundfile as sf
from dia.model import Dia
# 모델 한 번 불러오기
model = Dia.from_pretrained("nari-labs/Dia-1.6B")
# 처리할 스크립트 목록
scripts = [
"[S1] 첫 번째 스크립트입니다. [S2] 여러 화자가 포함되어 있습니다.",
"[S1] 또 다른 예시입니다. [S2] Dia가 모두 효율적으로 처리합니다.",
"[S1] 일괄 처리가 훨씬 빠릅니다. [S2] 맞아요! (laughs)"
]
# 각 스크립트 처리
for i, script in enumerate(scripts):
output = model.generate(script)
sf.write(f"output_{i+1}.wav", output, 44100)
print(f"output_{i+1}.wav 생성 완료")
이 방법은 모델을 반복해서 불러오는 시간을 절약해줍니다.
고급 기법 및 최적화
며칠간 Dia-1.6B를 실험하면서 모델을 최대한 활용할 수 있는 몇 가지 기법을 발견했습니다.
음성 일관성 향상
Dia-1.6B는 특정 음성에 대해 미세 조정되지 않았기 때문에, 생성할 때마다 음성이 달라질 수 있습니다. 일관성을 높이려면:
- 랜덤 시드 고정: 현재 공개 API에 문서화되어 있지 않지만, 생성 전에 PyTorch 랜덤 시드를 설정해 실험해볼 수 있습니다.
- 긴 오디오 프롬프트 사용: 20초 이상의 오디오 프롬프트가 더 일관된 음성 클로닝 결과를 냈습니다.
- 화자 패턴 유지: 스크립트에서 항상 [S1]을 메인 내레이터로 사용하는 등 일관된 패턴을 유지하세요.
성능 최적화
Dia-1.6B의 최적 성능을 위해:
- torch.compile 활성화: 호환 GPU에서 추론 속도를 크게 향상시킬 수 있습니다:
import torch
from dia.model import Dia
model = Dia.from_pretrained("nari-labs/Dia-1.6B")
# 빠른 추론을 위해 컴파일 활성화
if torch.cuda.is_available() and hasattr(torch, 'compile'):
model.generator = torch.compile(model.generator)
# 나머지 코드...
- 유사한 스크립트 일괄 처리: 비슷한 화자나 톤의 스크립트를 함께 처리하면 결과가 더 일관됩니다.
- VRAM 사용량 모니터링: 메모리 부족 오류가 발생하면 스크립트를 짧게 하거나 더 많은 메모리를 가진 클라우드 인스턴스 사용을 고려하세요.
창의적 활용 사례
테스트 중에 발견한 Dia-1.6B의 흥미로운 활용법:
- 팟캐스트 생성: 뚜렷한 진행자와 게스트 음성으로 인터뷰 스타일 콘텐츠 제작
- 오디오북 제작: 대화가 많은 구간에 개성 있는 캐릭터 음성 부여
- 언어 학습: 자연스러운 억양의 대화 예시 생성
- 게임 개발: 감정 표현이 풍부한 동적 NPC 대화 생성
Dia-1.6B와 다른 TTS 솔루션 비교
Dia-1.6B가 TTS 생태계에서 어디에 위치하는지 이해를 돕기 위해 인기 솔루션과 비교해보았습니다:
기능 | Dia-1.6B | ElevenLabs | OpenAI TTS | Sesame CSM-1B |
---|---|---|---|---|
비용 | 무료 (오픈소스) | 구독 기반 | 사용량 기반 | 무료 (오픈소스) |
대화 지원 | 네이티브 다중 화자 | 제한적 | 제한적 | 기본 |
비언어적 소리 | 있음 (네이티브) | 제한적 | 없음 | 없음 |
음성 클로닝 | 있음 | 있음 (프리미엄) | 제한적 | 기본 |
로컬 배포 | 가능 | 불가 | 불가 | 가능 |
언어 지원 | 영어만 | 29개 이상 | 10개 이상 | 영어만 |
VRAM 요구량 | 약 10GB | 클라우드 기반 | 클라우드 기반 | 약 4GB |
라이선스 | Apache 2.0 | 독점 | 독점 | Apache 2.0 |
ElevenLabs와 OpenAI는 더 많은 언어 옵션과 로컬 하드웨어 불필요함을 제공하지만, Dia-1.6B는 대화 기능, 비언어적 소리 생성, 구독료 없는 완전한 자유로 돋보입니다. Sesame CSM-1B에 비해 더 많은 자원이 필요하지만, 품질과 기능 면에서 확실히 우수합니다.
수많은 샘플을 비교한 결과, Dia-1.6B가 대화 전환과 감정 표현에서 다른 대안보다 일관되게 자연스러운 결과를 냈습니다.
자주 발생하는 문제 해결
테스트 중 제가 겪은 문제와 해결책을 공유합니다.
CUDA 메모리 부족 오류
증상: CUDA 메모리 부족 관련 오류 메시지 발생
해결법:
- GPU를 많이 사용하는 다른 프로그램 종료
- 스크립트 길이 줄이기
- VRAM이 더 많은 머신에서 실행
느린 생성 속도
증상: 오디오 생성이 예상보다 오래 걸림
해결법:
- CUDA 호환 GPU 사용 확인
- 최적화 섹션의 torch.compile 활성화
- GPU 자원을 사용하는 백그라운드 프로세스 점검
음성 불일치
증상: 생성할 때마다 음성이 크게 달라짐
해결법:
- 오디오 프롬프트 사용으로 일관성 향상
- 비슷한 도메인이나 감정 범위 내 스크립트 유지
- 랜덤 시드 고정 실험
설치 의존성 충돌
증상: 의존성 설치 중 오류 발생
해결법:
- 새 가상환경 사용
- pip 대신 uv 방법 시도
- CUDA 툴킷과 GPU 드라이버 최신 버전으로 업데이트
향후 개발 및 한계
Dia-1.6B는 인상적이지만, 현재 한계와 향후 계획도 알아두면 좋습니다.
현재 한계
- 영어 전용 지원: 현재 영어 텍스트만 지원
- GPU 의존성: CPU 지원 미지원으로 일부 사용자 접근성 제한
- VRAM 요구량: 효율적 실행을 위한 충분한 GPU 메모리 필요
- 음성 일관성: 프롬프트 없이는 세대 간 음성 변화 가능
향후 로드맵
Nari Labs 로드맵에 따르면, 앞으로 다음 기능들이 추가될 수 있습니다:
- CPU 지원으로 접근성 확대
- VRAM 요구량을 줄인 양자화 버전
- 도커 지원으로 배포 용이성 향상
- 추론 속도 최적화
- 다국어 지원 가능성
결론
Dia-1.6B와 함께 상당한 시간을 보내며, Nari Labs의 소규모 팀이 이룬 성과에 깊은 인상을 받았습니다. 이들은 독점 솔루션과 견줄 만한, 특히 대화 생성에 특화된 오픈소스 TTS 모델을 만들어냈습니다.
현실적인 음성을 애플리케이션에 추가하려는 개발자, 팟캐스트나 오디오북 작업을 하는 콘텐츠 제작자, 또는 최첨단 AI에 관심 있는 기술 애호가라면 Dia-1.6B는 꼭 탐색해볼 가치가 있습니다.
설치 과정은 간단하고, 모델은 매우 강력하며, 구독료나 프라이버시 걱정 없이 로컬에서 모든 것을 실행할 수 있다는 점이 큰 장점입니다. 활발한 개발과 지원 커뮤니티 덕분에 Dia-1.6B는 앞으로 더욱 발전할 것입니다.
이 가이드가 Dia-1.6B 시작에 도움이 되길 바랍니다. 여기서 다루지 않은 문제가 있으면 Nari Labs GitHub 저장소를 확인하거나 Discord 커뮤니티에 참여해 도움을 받으세요. 즐거운 생성 되시길 바랍니다!