🤗 Transformers를 사용한 Bark 최적화

Hugging Face는 Bark 텍스트-음성(TTS) 모델의 메모리 사용량을 줄이고 추론 속도를 높이기 위한 방법을 상세히 설명했습니다. Better Transformer, 반정밀도 부동소수점(fp16), CPU 오프로드라는 세 가지 특정 최적화 기술을 결합하면 사용자는 메모리 사용량을 최대 80% 줄이고 속도를 23% 높일 수 있습니다.

Bark 모델 아키텍처

Bark는 Suno AI에서 개발된 트랜스포머 기반 텍스트-음성(TTS) 모델로, 음성, 음악, 배경 소음 및 비언어적 소리(예: 웃음과 한숨)를 생성할 수 있습니다. 아키텍처는 순차적으로 작동하는 네 가지 주요 구성 요소로 구성됩니다:

  • BarkSemanticModel: 의미 있는 텍스트 토큰을 예측하는 인과 자기회귀 트랜스포머입니다.
  • BarkCoarseModel: EnCodec의 첫 두 오디오 코드북을 예측하는 인과 자기회귀 트랜스포머입니다.
  • BarkFineModel: 반복적으로 남은 코드북을 예측하는 비인과 오토인코더 트랜스포머입니다.
  • EncodecModel: 최종 코드북 채널을 출력 오디오 배열로 디코딩합니다.

최적화 기술

최적화는 최소한의 코드 변경으로 🤗 Optimum 및 🤗 Accelerate 라이브러리를 통해 달성됩니다.

Better Transformer

Better Transformer는 커널 퓨전과 Flash Attention을 활용하여 GPU 연산을 최적화합니다. Flash Attention은 시퀀스 길이에 대해 2차원에서 선형으로 메모리 사용량을 줄여 모델 성능을 저하시키지 않으면서 속도를 높입니다.

주요 이점: 출력 품질 손실 없이 속도가 20%~30% 증가합니다.

Half-Precision (fp16)

fp32(숫자당 32비트) 단정밀도 부동소수점에서 fp16(숫자당 16비트) 반정밀도로 전환하면 모델의 저장 요구 사항이 절반으로 줄어듭니다.

주요 이점: 메모리 사용량이 50% 감소하고 속도가 약 5% 향상되지만, 약간의 성능 저하가 발생할 수 있습니다.

CPU Offload

Bark의 네 개의 서브 모델은 순차적으로 호출되므로 어느 시점에 하나의 모델만 활성 상태이고 나머지는 유휴 상태입니다. CPU 오프로드는 비활성 상태인 서브 모델을 GPU에서 CPU로 언로드하여貴重한 GPU 메모리를 확보합니다.

주요 이점: 메모리 사용량이 약 60% 감소하지만 지연 시간이 약간(10%) 증가합니다.

성능 벤치마크

성능 벤치마크는 NVIDIA TITAN RTX 24GB에서 Bark의 대형 버전을 사용하여 최대 256개의 새로운 토큰을 기준으로 100개의 샘플에 대해 평균을 내어 수행되었습니다.

단일 샘플 생성 (배치 크기 = 1)

단일 샘플을 생성할 때 Better Transformer, CPU 오프로드, 그리고 fp16의 조합이 가장 큰 향상을 가져옵니다:

최적화 지연 시간 변화 메모리 사용량 변화
최적화 없음 0% 0%
Better Transformer만 -27% -1%
오프로드 + Better Transformer -15% -59%
오프로드 + Better Transformer + fp16 -23% -80%

배치 생성 (배치 크기 = 8)

여러 샘플을 함께 배치 처리하면 처리량이 크게 증가합니다. Better Transformer가 기본적으로 활성화된 상태에서 다음과 같은 결과를 관찰했습니다:

최적화 지연 시간 변화 메모리 사용량 변화 처리량 변화
기본 사례 (Better Transformer) 0% 0% 0%
+ fp16 -46% -50% +87%
+ 오프로드 +6% -38% -6%
+ 오프로드 + fp16 -43% -69% +77%

최적 구성 요약

사용 사례에 따라 다음과 같은 최적화 조합이 권장됩니다:

  • 메모리 효율성을 위해: Better Transformer와 CPU 오프로드를 사용하여 대형 Bark 모델을 5GB 대신 2GB의 메모리 사용량으로 실행합니다.
  • 높은 처리량을 위해: 배치 크기 8과 Better Transformer, 반정밀도(fp16)를 결합하여 사용합니다.
  • 균형 잡힌 성능을 위해: fp16, Better Transformer, 그리고 CPU 오프로드를 결합하여 지연 시간과 메모리 사용량을 전반적으로 가장 크게 줄입니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch