Speech Synthesis · TTS
Self-hosting Tortoise TTS: 24kHz voice cloning that starts at 4GB of VRAM
Five models chained into one pipeline, 4.6GB of weights entirely on your own disk, and a voice pinned down by a handful of reference clips. Slow is literally its name, but the v3 hifidecoder pushed RTF down to 0.25-0.3.
Tortoise · self-hosted
The name is James Betker's own joke about the first release: a medium-length sentence took two minutes on a K80. What that bought was prosody nobody else had at the time, because Tortoise is not one end-to-end model but a relay of five. A GPT-2-style autoregressive decoder (autoregressive.pth, 1.72GB in fp32) emits dozens to hundreds of candidate mel-token sequences, CLVP2 (976MB) — a CLIP-like text-to-speech scorer — reranks them and keeps the one that best matches the text, a diffusion decoder (1.17GB) turns that into a mel spectrogram, and the UnivNet vocoder (391MB) renders 24kHz audio. Reference clips are loaded at 22.05kHz for conditioning; output is always 24kHz.
Betker built the whole thing alone on his own hardware: eight RTX 3090s over several months, roughly 50k hours of speech weighted heavily toward audiobooks, trained with DLAS, a framework he also wrote. Code lives at github.com/neonbjb/tortoise-tts under Apache 2.0, weights at jbetker/tortoise-tts-v2 on HuggingFace. Be clear about the project's state: upstream has been quiet for a long while. PyPI carries exactly one release, tortoise-tts 3.0.0 from October 2023, and it is the important one — it shipped the hifidecoder (71MB), which replaces both the diffusion decoder and UnivNet and generates waveforms straight from autoregressive latents. The README's number for that path is "0.25-0.3 RTF on 4GB vram", with sub-500ms first-chunk latency through tts_stream. The ecosystem has contracted too: JarodMica/ai-voice-cloning, which carried mrq's training fork, was archived in June 2025, and 152334H/tortoise-tts-fast is flagged maintenance only.
So why this page? Because two things about Tortoise were never quite replaced. First, the reading voice that comes out of the full diffusion path — long-sentence pacing, the rise and fall of narration, prose and poetry — which people still keep it around specifically for. Second, Apache 2.0 with fully offline weights: nothing phones home, nothing is metered by a vendor, and there is no licensing conversation to have before you deploy it privately. This page covers what it actually costs in VRAM, how the four presets differ, how to get a dependency set frozen in 2023 to install on a 2026 machine, and which NexGPU card to pick — starting at $0.193/GPU-hour for an RTX 3090 24GB. Every size and VRAM figure here comes from the actual byte counts of the published checkpoints and from upstream's own README, so you can check them yourself.
01 —
Five models, two inference paths
There is only one weight release. What you actually choose is which decode path to take and which optional modules to load.
| Version | Parameters | VRAM | Context | Notes |
|---|---|---|---|---|
| api_fast.py + hifidecoder (the v3.0.0 fast path) | autoregressive 1.72GB + hifidecoder 71MB | ~1.8GB of fp32 weights; ~0.9GB with half=True; upstream quotes 4GB VRAM | max_mel_tokens 500 (roughly one sentence) / 24kHz output | Skips the diffusion decoder and UnivNet entirely, going straight from AR latents to waveform. The only path with tts_stream chunked streaming (stream_chunk_size defaults to 40, overlap_wav_len 1024), and the source of that 0.25-0.3 RTF figure. If you need low latency, this is the only option. |
| api.py full diffusion path (the classic v2 pipeline) | AR 1.72GB + diffusion 1.17GB + CLVP2 976MB + UnivNet 391MB | ~4.3GB of resident fp32 weights, ~2.2GB with half=True; peak set by AR candidate batch | tts() defaults to num_autoregressive_samples=512, diffusion_iterations=100 | The path that makes Tortoise sound like Tortoise. All four presets differ on just two numbers: ultra_fast is 16 candidates / 30 diffusion steps, fast is 96/80, standard is 256/200, high_quality is 256/400. Cut candidates first to save time; cut diffusion steps only when you're willing to spend quality. |
| CVVP voice reranking (off by default) | cvvp.pth 151MB | +~0.15GB | cvvp_amount defaults to 0.0 | A second scorer. CLVP2 asks "does this match the text?", CVVP asks "does this match the speaker?". When candidates come back with the right words in the wrong voice, dial cvvp_amount up to 0.1-0.3, at the cost of another loaded model and a slower rerank. |
| RLG random voice (rlg_auto + rlg_diffuser) | 25MB + 101MB | +~0.13GB | voice='random' | Samples a speaker who does not exist when you supply no reference audio. The native answer for anonymous narration, placeholder VO, or any compliance situation where you would rather not touch a real person's voiceprint at all. |
| tortoise-detect classifier | classifier.pth 61MB | ~0.1GB | Called standalone; not part of synthesis | The provenance tool Betker published alongside the model: it judges whether a clip was generated by Tortoise. Handy in a private deployment for output watermarking and internal audit without contracting a third-party detection service. |
| tortoise-tts-fast (152334H community fork) | Reuses the official weights, no extra download | Same as the full path; CPU offload available to trade speed for VRAM | DDIM / DPM-Solver samplers | The community's speed answer from before upstream shipped the hifidecoder, claiming 5-10x and up to roughly 20x via kv_cache, fp16 and swapped diffusion samplers. The repo is marked maintenance only, but if you want the diffusion sound quality *and* more speed, it is still the only off-the-shelf option. |
02 —
Which NexGPU card to pick
Upstream's floor is 4GB, so the question with Tortoise is never "will it fit" — it is "how fast does AR sampling run".
Auditioning voices, ultra_fast preset, hifidecoder streaming
RTX 3090 24GB$0.193/GPU-hour
Upstream says 4GB is enough, so 24GB is wild overkill — but it is also the cheapest 24GB card on our list, and with fp16 plus kv_cache you still won't fill it, so there is no reason to pay more for a smaller card.
standard / high_quality presets: 256 candidates and 200-400 diffusion steps
RTX 4090 24GB$0.540/GPU-hour
This tier is pure compute — candidate count and diffusion steps both jump by more than an order of magnitude and AR sampling becomes the hard bottleneck, so 4090 fp16 throughput usually wins on total bill by finishing sooner.
Bulk offline audiobook synthesis with per-sentence resampling
RTX 5090 32GB$0.723/GPU-hour
The extra 8GB goes straight into a larger autoregressive_batch_size, so you place more bets per pass and let CLVP2 sort them in one rerank instead of babysitting read.py's --regenerate loop.
Fine-tuning the autoregressive backbone with DLAS for a bespoke voice
RTX A6000 48GB$0.817/GPU-hour
Training holds weights, gradients and optimizer state at once, and 48GB is the lowest tier that runs without code surgery — though note the A100 PCIE 80GB is $0.824, so $0.007 more per hour doubles your VRAM. Compare both before you launch.
03 —
From bare instance to first audio
The hard part of installing Tortoise isn't the model, it's the frozen requirements.txt. Isolate the environment first and the rest is smooth.
- 01
Launch an instance on a PyTorch image and pull the code
Pick an RTX 3090 24GB at console.nexgpu.net and one of the prebuilt PyTorch images (there are 2,000+ to choose from), then SSH in and clone. No CUDA install, no quota request.
git clone https://github.com/neonbjb/tortoise-tts.git && cd tortoise-tts - 02
Build an isolated conda environment and dodge the dependency mines
This is the only step that genuinely trips people up. The official requirements.txt pins transformers==4.31.0, deepspeed==0.8.3, pydantic==1.9.1, librosa==0.9.1 and tornado==4.2 — a set of 2023-era versions that will almost certainly collide with anything else on the machine. A dedicated Python 3.9 environment is the path of least resistance. Do not reuse base to save time.
conda create -n tortoise python=3.9 -y && conda activate tortoise && pip install "transformers==4.31.0" && pip install -e . - 03
Generate your first line; weights download themselves
The first run pulls the full weight set from HuggingFace — eight files totalling roughly 4.6GB, cached under ~/.cache. --voice takes any of the thirty voices bundled in tortoise/voices/ (tom, emma, freeman, geralt, applejack and friends), or random to have RLG invent a speaker on the spot. To clone your own voice, make a new directory under voices/ and drop in a few clean multi-second wavs. No training required.
python tortoise/do_tts.py --text "The quick brown fox jumps over the lazy dog." --voice tom --preset fast - 04
Switch to the streaming API with every optimization on
Once you hear sound, move to api_fast: kv_cache stops AR sampling from recomputing prefixes, half runs fp16, and use_deepspeed engages the DeepSpeed inference kernels. Those three flags are the precondition for 0.25-0.3 RTF and sub-500ms first chunks. To serve it, the repo ships tortoise/socket_server.py, which listens on port 5000.
python -c "from tortoise.api_fast import TextToSpeech; tts = TextToSpeech(use_deepspeed=True, kv_cache=True, half=True)"
What an audiobook actually costs
Start from the one number upstream commits to: 0.25-0.3 RTF on the hifidecoder path. Take the upper bound of 0.3, meaning one hour of finished speech occupies 0.3 GPU-hours. On an RTX 3090 24GB at $0.193/GPU-hour, that hour of audio costs 0.3 x 0.193 = $0.058. A nine-hour audiobook is 2.7 GPU-hours, so 2.7 x 0.193 = $0.52. Add two hours for the first weight pull, the conda environment and getting do_tts.py to speak: 2 x 0.193 = $0.386. Total about $0.91 — less than a coffee. If what you want is the narration quality Tortoise is actually known for, you're on the full diffusion path. The standard preset means 256 candidates and 200 diffusion steps, more than an order of magnitude slower than the hifidecoder, and the exact multiplier depends on sentence length and batch size, so measure thirty seconds of your own text before extrapolating. Assuming a rough 10x (RTF 3), that same nine-hour audiobook needs 27 GPU-hours; on an RTX 4090 24GB at $0.540/GPU-hour that's $14.58, or one night of unattended runtime. Storage is billed separately: 4.6GB of weights at the $0.414/GB-month median works out to $1.90/month. Mind the billing boundary — compute stops the moment the instance stops, but storage keeps running until you destroy the volume. So stop the instance after each batch and keep the weights around; that beats re-downloading 4.6GB every session. Everything is metered per second and priced per hour, with no minimum, no setup fee and no quota request.
04 —
Frequently asked questions
How much VRAM does Tortoise TTS actually need to self-host?
Why is Tortoise TTS so slow, and can I speed it up?
Does Tortoise TTS support languages other than English?
Installation fails with transformers, pydantic and DeepSpeed version conflicts. What now?
Has Tortoise been superseded by XTTS and F5-TTS? Is it still worth deploying?
I want to fine-tune my own voice. How big a GPU do I need?
More in Speech synthesis
Start building on NexGPU
Enterprise R&D team or solo developer — either way, your first job can be running in minutes.
Sign up to browse live network pricing. No payment method required.
