Bark 아키텍처 — 세 개의 Transformer 모델
Bark 아키텍처 — 세 개의 Transformer 모델
Bark는 사실 단일 모델이 아니라, 텍스트를 오디오로 바꾸는 일련의 Transformer 모델 3단계로 구성돼요. 텍스트 → 의미(semantic) 토큰 → 조악(coarse) → 정밀(fine) 토큰 순서로 진행돼요.
3단계 구조
- 텍스트 → 의미 토큰: 입력은 Hugging Face BERT 토크나이저로 토큰화된 텍스트, 출력은 생성할 오디오를 인코딩하는 의미 토큰이에요.
- 의미 → 조악 토큰: 입력은 의미 토큰, 출력은 Facebook EnCodec 코덱의 첫 두 코드북이에요.
- 조악 → 정밀 토큰: 입력은 EnCodec의 첫 두 코드북, 출력은 EnCodec 8개 코드북이에요.
아키텍처 표
| Model | Parameters | Attention | Output Vocab size | | Text to semantic tokens | 80/300 M | Causal | 10,000 | | Semantic to coarse tokens | 80/300 M | Causal | 2x 1,024 | | Coarse to fine tokens | 80/300 M | Non-causal | 6x 1,024 |
체크포인트
- small (
suno/bark-small) — 8GB VRAM에도 들어가는 경량 버전 - large (
suno/bark) — 기본·고품질 체크포인트
최적화 팁
반정밀(torch.float16)과 Flash Attention 2를 함께 쓰면 상당한 속도 향상을 얻을 수 있어요. Bark는 4개의 서브모델을 순차적으로 호출해서, 한 서브모델을 쓸 때 나머지는 쉬는 구조예요. 이 특성을 이용하면 메모리 풋프린트를 줄일 수 있어요.
model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16, use_flash_attention_2=True).to(device)