본문으로 건너뛰기

[faster-qwen3-tts] CUDA Graphs 기반 Qwen3-TTS 래퍼를 설치 가능한 Python 패키지로 구조화

PR 링크: andimarafioti/faster-qwen3-tts#2 상태: Merged | 변경: +830 / -303

들어가며

Qwen3-TTS는 강력한 오픈소스 TTS 모델이지만, Python 레벨의 오버헤드로 인해 실시간 성능을 달성하기 어렵습니다. 이 PR은 torch.cuda.CUDAGraphStaticCache를 활용하여 RTX 4090에서 RTF 4.56(실시간 대비 4.56배 빠름), Jetson Orin에서 RTF 1.38을 달성하는 최적화 코드를 pip install 가능한 Python 패키지(qwen3_tts_cuda_graphs)로 구조화한 작업입니다.

핵심 코드 분석

1. 패키지 구조 설계

프로젝트가 단일 스크립트 모음에서 설치 가능한 패키지로 전환되었습니다.

Before:

root/
├── fast_generate_v5.py
├── manual_cudagraph_predictor.py
├── manual_cudagraph_talker.py
└── (스크립트 직접 실행)

After:

root/
├── qwen3_tts_cuda_graphs/
│   ├── __init__.py          # Qwen3TTSCudaGraphs 노출
│   ├── model.py             # from_pretrained API
│   ├── predictor_graph.py   # Predictor CUDA Graph 래핑
│   ├── talker_graph.py      # Talker CUDA Graph 래핑
│   └── generate.py          # Non-streaming 생성
├── benchmarks/              # baseline, streaming, throughput, chunk_sweep
└── pyproject.toml

from qwen3_tts_cuda_graphs import Qwen3TTSCudaGraphs 한 줄로 임포트할 수 있게 되었습니다.

2. Wrapper API 설계 (model.py)

기존 qwen-tts 라이브러리의 인터페이스와 호환되면서도, 내부적으로 CUDA Graphs를 활용하는 래퍼를 제공합니다.

from qwen3_tts_cuda_graphs import Qwen3TTSCudaGraphs

model = Qwen3TTSCudaGraphs.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-0.6B-Base",
    device='cuda', dtype=torch.bfloat16,
    attn_implementation='eager', max_seq_len=2048,
)

# 스트리밍 생성 - 청크 단위로 오디오 반환
for audio_chunk, sr, timing in model.generate_voice_clone_streaming(
    text="Hello world", language="English",
    ref_audio="ref.wav", ref_text="Reference text",
):
    play(audio_chunk, sr)  # 첫 청크부터 바로 재생 가능

from_pretrained 내부에서 base 모델을 로드한 뒤, predictor와 talker 각각에 대해 PredictorGraphTalkerGraph로 CUDA Graph를 빌드합니다.

3. 벤치마크 결과

GPU Baseline RTF CUDA Graphs RTF TTFA 개선
Jetson Orin 0.175 1.38 2,572ms -> 216ms
RTX 4090 1.34 4.56 462ms -> 55ms
H100 0.59 3.47 1,049ms -> 100ms

RTF > 1.0은 실시간보다 빠름을 의미합니다. Jetson Orin에서 7.9배 속도 향상으로 실시간 문턱을 넘었습니다.

왜 이게 좋은가

CUDA Graphs는 커널 launch 오버헤드를 제거하여 작은 연산이 반복되는 autoregressive 생성에서 극적인 효과를 보입니다. 이 프로젝트의 핵심 기여는 transformers의 StaticCache를 활용하여 attention 레이어를 재구현하지 않고도 CUDA Graphs를 적용했다는 점입니다. 738줄의 순수 PyTorch 코드로 C++ 커스텀 커널 없이 5~10배 속도 향상을 달성한 것은, 프레임워크의 기존 기능을 잘 활용한 좋은 사례입니다.

정리

  • 스크립트 모음을 pip install -e . 가능한 Python 패키지로 구조화
  • CUDA Graphs + StaticCache 조합으로 커널 launch 오버헤드 제거
  • 스트리밍 API로 첫 오디오 청크까지의 지연시간(TTFA) 8배 이상 개선
  • Jetson Orin 같은 엣지 디바이스에서 실시간 TTS 가능하게 함

참고 자료

⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글