How to transcribe and diarize audio with WhisperX on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install WhisperX with the command the m-bain/whisperX README prints, accept the speaker-diarization agreement that README names, and run the documented CLI. Copy the transcript files off the instance before you destroy it, because destroying the instance deletes its disk.

An earlier page, How to transcribe audio with WhisperX on a cloud GPU, was written on 2026-10-30. This page follows the README at the commit named below. Transcription without this diarization step is How to transcribe audio with faster-whisper on a cloud GPU. Model downloads are How to download a Hugging Face model on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. Stem separation from a different repository, whose README prints at least 3GB and about 7GB, is How to separate music stems with Demucs on a cloud GPU.

The GitHub license field on 2026-11-13 was BSD-2-Clause. The LICENSE file is the BSD 2-Clause License, and its copyright line is Copyright © 2024, Max Bain. pyproject.toml sets the license text to BSD-2-Clause. The model API for pyannote/speaker-diarization-community-1 the same day returned license cc-by-4.0. Those files are not merged. Read each one before you redistribute the program or the weights.

The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.

What the README says about memory

The features list says the faster-whisper backend requires <8GB gpu memory for large-v2 with beam_size=5. The same opening paragraph says the repository provides fast automatic speech recognition “(70x realtime with large-v2)”. This page did not measure that speed sentence, and it does not treat 70x as a memory figure. The optional Numba section says alignment can be accelerated by up to 30×–100×. This page did not measure that sentence either.

A later section says to reduce GPU memory requirements, try any of the following, and that items 2 and 3 can affect quality: reduce batch size, for example --batch_size 4; use a smaller ASR model --model base; use a lighter compute type --compute_type int8. The Python example sets batch_size = 16 and compute_type = "float16", and its comments say to reduce the batch size if low on GPU memory and to change the compute type to int8 if low on GPU memory. This page does not collapse 16, 4, float16, and int8.

GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T04:12:00.119Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T04:11:58.989Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. Every vram_gb below is 8 or higher. No row is under 8, so the “<8GB” sentence does not name a card in this table. This page did not run WhisperX and does not mark a row as enough. Which listing you can start is on Deploy. How published FLUX and SDXL weight sizes are read: How much VRAM do I need for FLUX and SDXL.

The catalog template list had no WhisperX template. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. The README does not link a ComfyUI install. This page does not add one.

Catalog name vram_gb
RTX 2080 8
RTX 3080 10
RTX 2080 Ti 11
RTX 3080 Ti 12
V100 16G 16
A30 24
RTX 3090 24
RTX 4090 24
RTX 4090D 24
RTX 4080 SUPER 32G 32
RTX 5090 32
RTX 5090D 32
V100 32G 32
A100 40G 40
A800 40G 40
A40 48
RTX 4090 48G 48
RTX 4090D 48G 48
RTX A6000 48
NVIDIA RTX PRO 5000 72G 72
RTX PRO 5000 72G 72
A100 80G 80
A800 80G 80
H800 80
RTX 6000D 83
H20 96G 96
RTX PRO 6000 96G 96
RTX PRO 6000 Max-Q 96
H20-3e 141G 141

Install

On Deploy, choose Raw GPU. The deploy page says “SSH access and root within a dedicated container”.

The README says to install the CUDA toolkit 12.8 before WhisperX for GPU use, and to skip that step for CPU only. It links the CUDA Installation Guide for Linux. This page did not install the toolkit.

The recommended install is:

pip install whisperx

PyPI package whisperx on 2026-11-13 was version 3.8.6. Its requires_python was >=3.10, <3.14. Its requires_dist included torch~=2.8.0 and torchaudio~=2.8.0. The tag v3.8.6 points at 3ccc17b8de34f305300f8a3fd3c9f76ba820c0d0. Repository HEAD the same day was b904f02b7e1f26fd10fb04840d655ff27e88e464, committed 2026-11-12T17:34:05Z. pyproject.toml at that commit sets version to 3.8.7rc1, requires-python to >=3.10, <3.14, and the same torch~=2.8.0 pin. This page did not install the PyPI release and did not install the git tree. The CLI defaults below are from __main__.py at HEAD. The only argument name present at HEAD and absent from the v3.8.6 __main__.py is --interleaved_context.

The README also prints uvx whisperx, an install from GitHub with uvx git+https://github.com/m-bain/whisperX.git, and a developer clone:

git clone https://github.com/m-bain/whisperX.git
cd whisperX
uv sync --all-extras --dev

The developer note says the development version may contain experimental features and bugs, and to use the stable PyPI release for production environments. The next sentence says you may also need ffmpeg and rust. The URL in that sentence is a setup page under a closed-model vendor. This page does not copy that URL. Open that sentence in the README if you need it.

The optional alignment extra at HEAD is:

pip install "whisperx[fast]"

or pip install numba. pyproject.toml lists the fast extra as numba>=0.68.0. The v3.8.6 README does not print this extra. This page did not install it.

Transcribe, align, and diarize

The English usage section says to run whisper on an example segment using default params, whisper small, and to add --highlight_words True to visualise word timings in the .srt file:

whisperx path/to/audio.wav

whisperx/__main__.py defaults --model to small, --batch_size to 8, --compute_type to default, --beam_size to 5, --output_dir to ., --output_format to all, and --highlight_words to False. The --compute_type help says default uses float16 on GPU and float32 on CPU. The choices are default, float16, float32, and int8.

The larger-model example is:

whisperx path/to/audio.wav --model large-v2 --align_model WAV2VEC2_ASR_LARGE_LV60K_960H --batch_size 4

--align_model defaults to None. whisperx/alignment.py maps the language codes en, fr, de, es, and it to torchaudio pipeline names. A second map in that file points those pipeline names at repository ids. This page does not copy those ids. The README’s phoneme paragraph also links an example model page whose repository id this page does not copy. Open TORCHAUDIO_PIPELINE_TO_HF and that paragraph in the upstream files.

The speaker-label example is:

whisperx path/to/audio.wav --model large-v2 --diarize --highlight_words True

The Speaker Diarization section says to include a Hugging Face access token (read), generated from the token settings page, after the --hf_token argument, and to accept the user agreement for the speaker-diarization-community-1 model. The command above does not pass --hf_token. This page joins that command with the setup sentence. The joined line was not in the README as one block, and it was not run:

whisperx path/to/audio.wav --model large-v2 --diarize --highlight_words True --hf_token "$HF_TOKEN"

--diarize_model defaults to pyannote/speaker-diarization-community-1. --min_speakers and --max_speakers default to None. The README says to set the number of speakers if known, for example --min_speakers 2 and --max_speakers 2. whisperx/diarize.py loads the pipeline with Pipeline.from_pretrained(model_config, token=token, cache_dir=cache_dir). The model API on 2026-11-13 returned gated auto, license cc-by-4.0, and extra_gated_fields that include a company or university text field. A request for the model README body returned HTTP 401. The limitations list says diarization is far from perfect.

HEAD also prints this command twice:

whisperx path/to/audio.wav --model large-v2 --interleaved_context

The v3.8.6 README does not print --interleaved_context. The Python example at HEAD passes interleaved_context=True to model.transcribe. The v3.8.6 Python example does not.

The other-languages section says the alignment model is language-specific, to pass the --language code, and to use --model large. The German example is:

whisperx --model large-v2 --language de path/to/audio.wav

DEFAULT_ALIGN_MODELS_HF in alignment.py names other languages. This page does not paste that map. The README says that if the detected language is not in the list, you need to find a phoneme-based ASR model from the Hugging Face model hub and test it on your data.

The Python example at HEAD is the block in the README under “Python usage”. It loads large-v2 with compute_type float16, transcribes with batch_size 16 and interleaved_context=True, calls whisperx.load_align_model and whisperx.align with return_char_alignments=False, then builds DiarizationPipeline(token=YOUR_HF_TOKEN, device=device). YOUR_HF_TOKEN is the placeholder printed in the README. This page does not replace it and did not run the example.

Where the files are saved

--output_dir defaults to .. --output_format choices are all, srt, vtt, txt, tsv, json, and aud. The help text says that if the format is not specified, all available formats will be produced. get_writer in whisperx/utils.py treats all as txt, vtt, srt, tsv, and json. aud is written only when --output_format is aud. This page does not treat the help text and that function as the same list.

ResultWriter joins output_dir with the audio basename, without its extension, plus . plus the writer extension. A command that uses the default directory writes those files in the current directory. --model_dir defaults to None. Its help text says model files use ~/.cache/whisper by default. This page did not trace the download call past that help text. How to download a Hugging Face model on a cloud GPU is the page for the Hub cache.

The README does not print a Gradio launch line. There is no port to forward for the CLI. How to use SSH port forwarding on a cloud GPU is the tunnel page for programs that do open a port.

When it fails

CUDA out of memory. The documented memory lines are the “<8GB” features sentence and the three reductions in the technical-details section. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.

“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. The README asks for the CUDA toolkit 12.8. pyproject.toml pins torch~=2.8.0 and, for Linux x86_64, a wheel index whose URL ends in cu128. It does not name compute capability 12.0. The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. This page did not install a torch wheel and did not re-test this package on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.

Save the transcripts, then destroy

Copy the directory you passed to --output_dir, or the current directory if you left the default, before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.

The pricing page FAQ states the billing rule in these words:

Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.

Prices are not copied here.

Frequently asked questions

How much GPU memory does the WhisperX README print?

The features list says WhisperX requires <8GB gpu memory for large-v2 with beam_size=5. That is the wording printed in the README. The CLI default for --beam_size is 5. A later section lists --batch_size 4, --model base, and --compute_type int8, and says the last two can affect quality. The Python example sets batch_size to 16 and compute_type to float16. This page does not collapse those figures. Every vram_gb in https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T04:12:00.119Z) is 8 or higher. No listed row is under 8. This page did not run WhisperX and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which command adds speaker labels, and where are the files written?

The README prints whisperx path/to/audio.wav --model large-v2 --diarize --highlight_words True. That line does not pass --hf_token. The Speaker Diarization section says to put a read token after --hf_token and to accept the user agreement for pyannote/speaker-diarization-community-1. --output_dir defaults to the current directory. --output_format defaults to all. The choices are all, srt, vtt, txt, tsv, json, and aud. get_writer treats all as txt, vtt, srt, tsv, and json. aud is written only when --output_format is aud. Each file is the audio basename plus that extension. This page did not run the command.

What does the README require before diarization?

The README says to include a Hugging Face access token with read scope after --hf_token and to accept the user agreement for pyannote/speaker-diarization-community-1. The CLI default for --diarize_model is that repository id. The model API on 2026-11-13 returned gated auto and license cc-by-4.0, and extra_gated_fields include a company or university text field. A request for the model README body returned HTTP 401. The limitations list says diarization is far from perfect.

What license is on the repository?

The GitHub license field on 2026-11-13 was BSD-2-Clause. The LICENSE file is the BSD 2-Clause License, and the copyright line names 2024 and Max Bain. pyproject.toml sets the license text to BSD-2-Clause. The diarization model API returned license cc-by-4.0. Those files are not merged. The LICENSE file prints no dollar amount.

Sources (read 2026-11-13, Asia/Shanghai)

  • m-bain/whisperX README (pip install whisperx, CUDA toolkit 12.8, <8GB and beam_size=5, the CLI examples, the Hugging Face token sentence, the Python example, the three memory reductions): https://github.com/m-bain/whisperX/blob/main/README.md commit b904f02b7e1f26fd10fb04840d655ff27e88e464, committed 2026-11-12T17:34:05Z
  • whisperx/__main__.py (defaults, including --output_format all and --diarize_model pyannote/speaker-diarization-community-1) and whisperx/utils.py (get_writer: all is txt, vtt, srt, tsv, json; aud is separate): that commit
  • whisperx/diarize.py (Pipeline.from_pretrained, token) and whisperx/alignment.py (language maps; repository ids not copied here): that commit
  • pyproject.toml (version 3.8.7rc1, requires-python >=3.10, <3.14, torch~=2.8.0, fast extra numba>=0.68.0). LICENSE is BSD 2-Clause, Copyright © 2024, Max Bain. GitHub license field BSD-2-Clause
  • Tag v3.8.6 is 3ccc17b8de34f305300f8a3fd3c9f76ba820c0d0. Its __main__.py has no --interleaved_context. PyPI whisperx 3.8.6 on 2026-11-13 had requires_python >=3.10, <3.14 and torch~=2.8.0. This page did not install it
  • Model API pyannote/speaker-diarization-community-1 (gated auto, license cc-by-4.0, lastModified 2025-09-29T08:43:24.000Z). The README body request returned HTTP 401
  • ComfyUI examples top-level directories (no WhisperX directory): https://github.com/comfyanonymous/ComfyUI_examples commit f9431bb000ce792094ff345446e22cac1ea6cef3
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T04:12:00.119Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T04:11:58.989Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no WhisperX template

Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.

Last updated: 2026-11-13 (Asia/Shanghai).