본문으로 건너뛰기

[faster-qwen3-tts] 모드 간 성능 동등성 검증 및 벤치마크 비교 문서화

PR 링크: andimarafioti/faster-qwen3-tts#18 상태: Merged | 변경: +146 / -0

들어가며

faster-qwen3-tts는 VoiceClone(xvec), VoiceClone(ICL), CustomVoice 세 가지 모드를 지원한다. 각 모드는 prefill 단계에서 다른 입력을 구성하지만, CUDA graph으로 캡처된 decode 단계는 동일하다. 이 PR은 모드 간 성능 동등성을 정량적으로 검증하는 벤치마크를 추가하고 결과를 문서화한다.

핵심 코드 분석

compare_modes.py 벤치마크

def bench_stream(fn, label):
    # TTFA 측정 (streaming)
    ttfas = []
    for _ in range(TTFA_RUNS):
        t0 = time.perf_counter()
        gen = fn(max_new_tokens=512, chunk_size=CHUNK_SIZE, streaming=True)
        _chunk, _sr, _timing = next(gen)
        ttfas.append((time.perf_counter() - t0) * 1000)

    # RTF 측정 (non-streaming)
    rtfs = []
    for _ in range(RTF_RUNS):
        t0 = time.perf_counter()
        audio_list, sr = fn(max_new_tokens=512, streaming=False)
        total = time.perf_counter() - t0
        rtfs.append(len(audio_list[0]) / sr / total)

    print(f"{label:>18} | TTFA={np.mean(ttfas):.0f}ms | RTF={np.mean(rtfs):.3f}")

측정 결과 (README에 추가)

Mode TTFA (ms) RTF ms/step
VoiceClone xvec 152 +/- 11 5.470 +/- 0.032 15.2 +/- 0.1
VoiceClone full ICL 149 +/- 1 5.497 +/- 0.026 15.2 +/- 0.1
CustomVoice 148 +/- 1 5.537 +/- 0.020 15.0 +/- 0.1

세 모드 모두 ms/step이 15ms 대로 사실상 동일하다.

왜 이게 좋은가

  1. 아키텍처 검증: "decode 단계는 모드와 무관하게 동일하다"는 설계 가정을 실측 데이터로 증명한다.
  2. 사용자 의사결정 지원: 모드 선택 시 성능 차이를 걱정할 필요 없다는 것을 수치로 보여준다.
  3. 재현 가능: benchmarks/compare_modes.py로 누구나 자신의 하드웨어에서 검증할 수 있다.

정리

벤치마크와 문서화가 함께 이루어진 모범적인 PR이다. CUDA graph 기반 추론에서 prefill과 decode의 성능 분리를 이해하는 데 도움이 되는 좋은 참고 자료다.

참고 자료


이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석과 해석에서 오류가 있을 수 있으니, 정확한 내용은 원본 PR을 참고해주세요.

댓글

관련 포스트

PR Analysis 의 다른글