요약
- WhisperX의 속도 이득은 단순한 "침묵 스킵"이 아니라 청크 간 의존성 제거로 인한 배치 추론 가능이 핵심이다
- Vanilla Whisper는 이전 청크 텍스트를 다음 청크 prompt로 넘기기 때문에 순차 처리에 묶여 있다
- VAD가 음성 구간을 미리 다 찾아두면 각 세그먼트는 독립 발화가 되어 GPU에 batch로 쌓을 수 있다
본문
Vanilla Whisper의 병렬화 제약
- 오디오를 30초씩 슬라이딩 윈도우로 처리
- 각 청크의 출력 텍스트가 다음 청크의
initial_prompt로 들어감 (condition_on_previous_text=True) - 청크 N+1의 입력이 청크 N의 출력에 의존 → 순차 의존성
- 그래서 batch_size를 키울 수 없음
WhisperX가 병렬화되는 메커니즘
- VAD가 먼저 음성 구간을 다 찾음 → 처리할 청크 목록이 사전에 확정
- 각 VAD 세그먼트는 침묵으로 끊긴 독립 발화
condition_on_previous_text=False로 청크 간 컨텍스트 전달 차단- N개 세그먼트를 한 batch로 GPU에 올려 동시 forward (
batch_size=16, 32...)
속도 이득의 출처 분해
순수 batching 효과 : GPU 활용률 ↑ (가장 큼)
침묵 스킵 : 처리할 오디오 총량 감소
condition_on_previous=False : 청크 간 독립성 확보 (배치의 전제조건)
large-v2 기준 70x 속도 보고는 이 세 가지의 합산 효과다. 단순히 VAD로 무음을 자른 것만으로는 이 정도 속도가 안 나온다.
트레이드오프
- 청크 간 컨텍스트가 사라져 대명사 해석이나 30초 경계에 걸친 문장에서 약간 불리할 수 있음
- 대신 wav2vec2 forced alignment로 단어 단위 타임스탬프 정밀 보정이 가능해 실용적 손실은 작음
- VAD가 짧은 발화/속삭임을 놓치면 그 구간은 STT 자체가 누락됨