How to run Spark-TTS on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install Spark-TTS from the SparkAudio/Spark-TTS README, download SparkAudio/Spark-TTS-0.5B the way that file prints, run example/infer.sh or cli.inference, and copy the wav off the instance before you destroy it. Destroying the instance deletes its disk.

Other speech pages: How to run XTTS-v2 on a cloud GPU, How to run F5-TTS on a cloud GPU, How to run CosyVoice on a cloud GPU, How to run IndexTTS2 on a cloud GPU, and How to run Bark text-to-audio on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The tunnel for the web UI is How to use SSH port forwarding on a cloud GPU.

Use a reference clip you have the right to clone. The README usage disclaimer says not to use the model for unauthorized voice cloning, impersonation, fraud, scams, deepfakes, or any illegal activities. The GitHub license field on 2026-11-13 was Apache-2.0. The repository LICENSE is the Apache License, Version 2.0, January 2004, with the unfilled copyright template. The model card for SparkAudio/Spark-TTS-0.5B the same day had license cc-by-nc-sa-4.0 and gated false. Its License Update section says the model license was updated from Apache 2.0 to CC BY-NC-SA. 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 README prints no GB figure. The model card README, read 2026-11-13, also prints no GB figure. The README runtime table is a latency table for a single L20 GPU. L20 is not a name in gpu-prices.json. This page does not treat that table as a memory figure and did not remeasure it.

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-13T02:59:34.866Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T02:59:35.996Z) 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. There is no upstream GB cutoff to match these values against. This page did not run Spark-TTS and does not mark a row as enough. Which listing you can start is on Deploy.

The catalog template list had no Spark-TTS template.

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 Linux install block is:

git clone https://github.com/SparkAudio/Spark-TTS.git
cd Spark-TTS
conda create -n sparktts -y python=3.12
conda activate sparktts
pip install -r requirements.txt

The README prints a second pip install -r requirements.txt line after that block. This page does not copy that line. Copy it from the README if you want that index URL. requirements.txt pins torch==2.5.1, torchaudio==2.5.1, transformers==4.46.2, and gradio==5.18.0. The README badge says Python 3.12+ and PyTorch 2.5+. The commits API for the default branch main listed 2f1ea9082400547242641f5271b6f941c9f439d1, committed 2025-04-09T10:17:58Z. The commits API for README.md listed ee29f36806237be088e71931d9e0a4ab91b34adf, committed 2025-03-12T07:56:38Z. This page did not install the environment.

Download the weights

The README download blocks are:

from huggingface_hub import snapshot_download

snapshot_download("SparkAudio/Spark-TTS-0.5B", local_dir="pretrained_models/Spark-TTS-0.5B")
mkdir -p pretrained_models

# Make sure you have git-lfs installed (https://git-lfs.com)
git lfs install

git clone https://huggingface.co/SparkAudio/Spark-TTS-0.5B pretrained_models/Spark-TTS-0.5B

The model API on 2026-11-13 listed top-level entries BiCodec, LLM, wav2vec2-large-xlsr-53, src, config.yaml, and README.md. cli/SparkTTS.py loads {model_dir}/LLM with AutoModelForCausalLM.from_pretrained. sparktts/models/audio_tokenizer.py loads {model_dir}/wav2vec2-large-xlsr-53. Those are paths under the directory the download command creates. This page did not download the repository.

The documented CLI and voice-cloning example

The README demo lines are cd example and then bash infer.sh. example/infer.sh sets script_dir from its own path and then cds to the parent of that directory. That cd is inside the script process. A parent shell that ran cd example is still in example after the script exits, and the later python -m cli.inference and python webui.py on this page would not resolve from there. From the repository root, this page prints one command instead. It was not run:

bash example/infer.sh

example/infer.sh sets device=0, save_dir=example/results, model_dir=pretrained_models/Spark-TTS-0.5B, and prompt_speech_path=example/prompt_audio.wav, then runs python -m cli.inference with --text, --prompt_text, and those values. The script assigns text and prompt_text to the strings in that file. This page does not reprint those two strings. The README also prints this command, which is run from the repository root:

python -m cli.inference \
    --text "text to synthesis." \
    --device 0 \
    --save_dir "path/to/save/audio" \
    --model_dir pretrained_models/Spark-TTS-0.5B \
    --prompt_text "transcript of the prompt audio" \
    --prompt_speech_path "path/to/prompt_audio"

cli/inference.py defaults --save_dir to example/results and --model_dir to pretrained_models/Spark-TTS-0.5B. It writes {save_dir}/{timestamp}.wav with soundfile samplerate=16000. The timestamp format is %Y%m%d%H%M%S. Optional flags are --gender (male or female), --pitch, and --speed (very_low, low, moderate, high, very_high). The README command above does not pass those three. The commits API listed example/infer.sh at db044a3610f79f3e72edfd331d0ac73f3457446a (2025-02-27T09:51:27Z) and cli/inference.py at 7d742ba4e6a3d26a0ca670c718fe8bbc4d81f4b5 (2025-03-09T18:35:39Z). This page did not run them.

Web UI

The README says to start the UI with python webui.py --device 0. Run that from the repository root. webui.py defaults --server_name to 0.0.0.0, --server_port to 7860, --device to 0, and --model_dir to pretrained_models/Spark-TTS-0.5B. The README command does not override the host or the port. demo.launch passes those two defaults. The UI save helper writes example/results/{timestamp}.wav at samplerate=16000. This page did not start the UI. From your own computer, the script default port is 7860. How to use SSH port forwarding on a cloud GPU is the tunnel. The commits API for webui.py listed 72f27d6a1db880cb97a06d7d7fd9a3c7283fbeb0, committed 2025-03-10T15:46:56Z.

The README does not link a ComfyUI install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3. This page does not add a ComfyUI install.

The README runtime section prints this table for a single L20 GPU, 26 prompt pairs, and 169 seconds of audio, at code commit 4d769ff782a868524f29e0be851ca64f8b22ebf1. This page did not remeasure it. L20 is not a catalog name.

Model Concurrency Avg Latency RTF
Spark-TTS-0.5B 1 876.24 ms 0.1362
Spark-TTS-0.5B 2 920.97 ms 0.0737
Spark-TTS-0.5B 4 1611.51 ms 0.0704

When it fails

CUDA out of memory. The README and the model card print no GB figure and no low-memory flag. 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. requirements.txt pins torch==2.5.1. 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 audio, then destroy

Copy example/results, or the --save_dir you passed, 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 VRAM does the Spark-TTS README print?

The README prints no GB figure. The model card for SparkAudio/Spark-TTS-0.5B, read 2026-11-13, also prints no GB figure. The runtime table is latency on a single L20 GPU. L20 is not a name in gpu-prices.json, and this page did not remeasure that table. This page does not mark a catalog row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which command is the documented voice-cloning example?

The README prints cd example and then bash infer.sh. That cd stays in the parent shell, because example/infer.sh changes directory only inside its own process. From the repository root this page prints bash example/infer.sh. The script sets prompt_speech_path to example/prompt_audio.wav, model_dir to pretrained_models/Spark-TTS-0.5B, and save_dir to example/results. The README also prints python -m cli.inference with --text, --device 0, --save_dir, --model_dir pretrained_models/Spark-TTS-0.5B, --prompt_text, and --prompt_speech_path. Run that command from the repository root. This page did not run either command.

Where is the wav file saved, and which port does the web UI use?

cli/inference.py writes {save_dir}/{timestamp}.wav with soundfile samplerate 16000. The default --save_dir is example/results. webui.py writes example/results/{timestamp}.wav at the same samplerate. The README command is python webui.py --device 0. The script defaults --server_name to 0.0.0.0 and --server_port to 7860. This page did not start the UI.

What usage terms do the README and the model card print?

The repository LICENSE is Apache 2.0, January 2004, with the unfilled copyright template. The model card license field is cc-by-nc-sa-4.0. Its License Update says the model can only be used for non-commercial purposes, that modifications or derivatives must also be released under CC BY-NC-SA 4.0, and that attribution is required. The usage disclaimer says not to use the model for unauthorized voice cloning, impersonation, fraud, scams, deepfakes, or any illegal activities. The non-commercial sentence is license text, not a CloudGPU price and not a storage allowance. The card prints no dollar amount.

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

  • SparkAudio/Spark-TTS README (install, both download blocks, infer.sh, CLI flags, python webui.py --device 0, L20 latency table, usage disclaimer): https://github.com/SparkAudio/Spark-TTS/blob/main/README.md commit ee29f36806237be088e71931d9e0a4ab91b34adf. Repository HEAD 2f1ea9082400547242641f5271b6f941c9f439d1, pushed_at 2025-04-09T10:18:00Z
  • example/infer.sh (save_dir, model_dir, prompt_speech_path): commit db044a3610f79f3e72edfd331d0ac73f3457446a
  • cli/inference.py (wav path, samplerate=16000, gender / pitch / speed choices): commit 7d742ba4e6a3d26a0ca670c718fe8bbc4d81f4b5
  • webui.py (server_name 0.0.0.0, server_port 7860, example/results): commit 72f27d6a1db880cb97a06d7d7fd9a3c7283fbeb0
  • cli/SparkTTS.py (loads {model_dir}/LLM): commit 6f1568567cafacaafbb77db551502cb2fc5de5ad
  • requirements.txt (torch==2.5.1, gradio==5.18.0): commit 07226156216386d46e5b56e52f5fea7a64dc7f9c
  • LICENSE (Apache 2.0, January 2004, unfilled copyright template): commit a32508896231624a3deb291acb8ec46152f2a49c. GitHub license field Apache-2.0
  • Model card SparkAudio/Spark-TTS-0.5B (license cc-by-nc-sa-4.0, gated false, License Update, no GB figure): https://huggingface.co/SparkAudio/Spark-TTS-0.5B read 2026-11-13. Model API tree the same day listed BiCodec, LLM, wav2vec2-large-xlsr-53, config.yaml, and README.md
  • ComfyUI examples top-level directories (no Spark-TTS directory): https://github.com/comfyanonymous/ComfyUI_examples commit f9431bb000ce792094ff345446e22cac1ea6cef3
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T02:59:34.866Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T02:59:35.996Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no Spark-TTS 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).