Robert Zhou

Work · Jul 2026 – Jul 2026

Podcast ASR at 158× realtime

Will one A100 transcribe 173 hours of audio in 75 minutes?

Corpus
216 episodes / 173 audio-hours
Words
1.1M
Runtime
75 min on one A100
Throughput
158× realtime

I needed 1.1M words of spoken-word text, and the naive way to get it — transcribe each episode, one at a time — was going to take days of GPU time.

The pipeline is faster-whisper large-v3 with batched inference: audio is chunked into clips and decoded in batches rather than sequentially, which is what turns a memory-bandwidth-bound workload into a throughput-bound one. The difference is not incremental. Batched clips ran at roughly 220× realtime against 40.5× sequential — same model, same weights, different execution shape.

The measured result: 216 podcast episodes, 173 audio-hours, 1.1M words, in 75 minutes on a single A100. That is 158× realtime including audio decode and all the bookkeeping.

Two things mattered more than batch size. First, coverage checking: every episode's transcript is validated to have at least 0.95 coverage against its audio duration, so a silently truncated episode cannot slip into the corpus as "one where the speaker paused a lot." Second, treating the run as a restartable job — per-episode checkpoints mean a crash at episode 200 costs one episode, not three hours.

What I'd do differently: validate a small sample end to end — decode, transcribe, coverage, word counts — before launching the full corpus. Batch width is exactly the kind of setting that can quietly degrade quality on the longest episodes, and coverage and word-count metrics will not tell you the text is wrong. On a corpus this size, spot-reading the longest episodes is the check that actually catches it.

The corpus is the foundation for the rest of my language work: everything downstream assumes those 1.1M words are complete and correctly attributed.

Timeline

  1. Batched faster-whisper pipeline transcribed the full corpus in 75 minutes

faster-whisper · CTranslate2 · Python · A100