Local music generation
Local music generation speed and hardware: how to read RTF correctly
Music-model speed tables do not all measure the same thing. Some time only sampling after the model is loaded; others include lyric planning and decoding1. RTF2 is generation time divided by the duration of the resulting audio, while the real-time multiple is its reciprocal. This guide places only verifiable official numbers side by side and marks missing conditions as missing. Before buying a GPU3, confirm that your chosen model and software backend actually run on it.
Compare like with like first
A model that turns text into a short sound effect, one that sings lyrics, and one that extends a melody do different jobs. Their durations and conditioning also differ, so a list of runtimes alone can mislead. Fix the task, output duration, stereo setting and whether vocals or lyrics are required before comparing.
For example, if you need a 30-second instrumental synth-pop loop, first confirm that every candidate can generate text-conditioned backing music. Do not force a lyric-song-only path and a sound-effect path into one ranking. Time only models that support a shared task, and state why unsupported candidates are excluded; that makes a buying decision more useful.
Choose a unit that matches the output. For a song, record the time and actual duration of one song; if a long track is made in segments, include the segment count and stitching time. A larger batch may change how many songs finish per hour without making one song finish sooner. Report single-request latency and throughput4 as separate metrics.
RTF and real-time multiple run in opposite directions
The real-time factor (RTF) is elapsed generation time divided by the playback duration of the output. If 60 seconds of audio takes 30 seconds to create, RTF is 0.5, or twice real time.
If it takes 120 seconds, RTF is 2 and slower than real time. Some repositories call the reciprocal—such as ‘34×’—RTF.
Read the definition and units, then recalculate from raw seconds when possible.
Separate loading time from audio-generation time
The first run may include checkpoint5 loading, memory allocation, compilation or kernel setup. Repeated generation with the model resident excludes those costs, so it differs from the wait a user experiences after opening an app. Record the first request (cold start) and requests after warmup separately, and keep a separate end-to-end user wait time.
What official sources measure—and what they leave blank
The table uses figures published in official repositories or model cards, while distinguishing their evidence quality. The older ACE-Step table and ACE-Step 1.5 README claims refer to different model versions; the latter is not a per-device result table reproduced with the profiler.
A blank means this research found no speed figure with enough stated conditions, not that the model is slow.
| Model and official source | Device and runtime | Published speed and output conditions | Conditions not reported |
|---|---|---|---|
| ACE-Step (legacy version) | RTX 4090; MacBook M2 Max. Repository inference script; runtime details not stated | 27 steps: 4090 34.48× (1-minute render 1.74 s), M2 Max 2.27× (26.43 s). 60 steps: 4090 15.63× (3.84 s), M2 Max 1.03× (58.25 s). Real-time multiples and render times per minute as published | Checkpoint/commit, sample count, batch, prompt, warmup/loading inclusion and repetitions/spread not stated |
| ACE-Step 1.5 | README claims: <2 s per ‘full song’ on A100 (0.5–10 s under some settings), <10 s on RTX 3090. macOS MLX script and profiler paths for CUDA/MPS/CPU and LLM vLLM/PyTorch/MLX documented | Official profiler measures duration/batch/thinking/steps and planning/DiT/VAE/save/end-to-end timings, but no reproducible per-device timing table is published | Full-song duration, checkpoint, batch, think/steps, cold/warm, metric definition and spread not stated. Do not generalize the headline claims to other versions/devices |
| YuE2-3B (HF pipeline) | Model-card setup: Linux, Python 3.10+, 24 GB BF16 NVIDIA GPU. HF path: PyTorch 2.10, Transformers 4.57.6, CUDA graphs/FlashAttention, BF16 AR/NAR + FP32 VAE, no quantization | RTX 4090: full 71.04 s / 214.85 s audio (32 warm samples); melody 68.68 / 214.67 s; off 57.91 / 196.88 s. H800: full 54.74 / 224.96 s (one sample). Synchronized pipeline calls; excludes initial path resolution and saving. As reported | GPU figures are model-card measurements on named devices; H800 is n=1. One candidate per call. Not end-to-end user wait including initial load and save |
| YuE2-Turbo | Open inference/serving implementation; claims same YuE2 weights and 32 flow steps. Single 5090 test | RTX 5090 32 GB, warm: single-request RTF 0.290→0.173 (1.68×). Four-concurrent system RTF 0.317→0.096 (3.31× throughput). PyTorch 2.10/CUDA 12.8/vLLM 0.19/BF16. These are different metrics | Project README measurement: single request, 3 songs × 3 repeats; concurrent, 4 requests × 3 waves. Different serving implementation from original YuE2; not an RTX 4090 result |
| HeartMuLa-oss-3B | Official example defaults to CUDA; model/codec device placement and lazy loading available | Only ‘RTF ≈ 1.0’ is stated; device and duration are missing | Definition, exact model revision, duration, samples, cold/warm conditions and Apple path not stated |
| Stable Audio Open 1.0 | Model-card example: CUDA or CPU PyTorch. No MPS/MLX speed table | Up to 47 s, 44.1 kHz stereo. tools example 100 steps/30 s; diffusers example 200 steps/10 s. No per-device speed | Usage examples are not performance measurements; GPU, runtime, warmup and end-to-end scope not stated |
| MusicGen / AudioCraft | Official guidance is GPU-oriented; about 16 GB GPU memory recommended for medium. No official Apple MLX path | 300M/1.5B/3.3B model variants documented; no per-device generation-time table | GPU, output duration, steps/tokens, decode inclusion and cold/warm split not stated |
Officially documented hardware speed evidence and missing conditions
ACE-Step (legacy version)
- Device and runtime
- RTX 4090; MacBook M2 Max. Repository inference script; runtime details not stated
- Published speed and output conditions
- 27 steps: 4090 34.48× (1-minute render 1.74 s), M2 Max 2.27× (26.43 s). 60 steps: 4090 15.63× (3.84 s), M2 Max 1.03× (58.25 s). Real-time multiples and render times per minute as published
- Conditions not reported
- Checkpoint/commit, sample count, batch, prompt, warmup/loading inclusion and repetitions/spread not stated
ACE-Step 1.5
- Device and runtime
- README claims: <2 s per ‘full song’ on A100 (0.5–10 s under some settings), <10 s on RTX 3090. macOS MLX script and profiler paths for CUDA/MPS/CPU and LLM vLLM/PyTorch/MLX documented
- Published speed and output conditions
- Official profiler measures duration/batch/thinking/steps and planning/DiT/VAE/save/end-to-end timings, but no reproducible per-device timing table is published
- Conditions not reported
- Full-song duration, checkpoint, batch, think/steps, cold/warm, metric definition and spread not stated. Do not generalize the headline claims to other versions/devices
YuE2-3B (HF pipeline)
- Device and runtime
- Model-card setup: Linux, Python 3.10+, 24 GB BF16 NVIDIA GPU. HF path: PyTorch 2.10, Transformers 4.57.6, CUDA graphs/FlashAttention, BF16 AR/NAR + FP32 VAE, no quantization
- Published speed and output conditions
- RTX 4090: full 71.04 s / 214.85 s audio (32 warm samples); melody 68.68 / 214.67 s; off 57.91 / 196.88 s. H800: full 54.74 / 224.96 s (one sample). Synchronized pipeline calls; excludes initial path resolution and saving. As reported
- Conditions not reported
- GPU figures are model-card measurements on named devices; H800 is n=1. One candidate per call. Not end-to-end user wait including initial load and save
YuE2-Turbo
- Device and runtime
- Open inference/serving implementation; claims same YuE2 weights and 32 flow steps. Single 5090 test
- Published speed and output conditions
- RTX 5090 32 GB, warm: single-request RTF 0.290→0.173 (1.68×). Four-concurrent system RTF 0.317→0.096 (3.31× throughput). PyTorch 2.10/CUDA 12.8/vLLM 0.19/BF16. These are different metrics
- Conditions not reported
- Project README measurement: single request, 3 songs × 3 repeats; concurrent, 4 requests × 3 waves. Different serving implementation from original YuE2; not an RTX 4090 result
HeartMuLa-oss-3B
- Device and runtime
- Official example defaults to CUDA; model/codec device placement and lazy loading available
- Published speed and output conditions
- Only ‘RTF ≈ 1.0’ is stated; device and duration are missing
- Conditions not reported
- Definition, exact model revision, duration, samples, cold/warm conditions and Apple path not stated
Stable Audio Open 1.0
- Device and runtime
- Model-card example: CUDA or CPU PyTorch. No MPS/MLX speed table
- Published speed and output conditions
- Up to 47 s, 44.1 kHz stereo. tools example 100 steps/30 s; diffusers example 200 steps/10 s. No per-device speed
- Conditions not reported
- Usage examples are not performance measurements; GPU, runtime, warmup and end-to-end scope not stated
MusicGen / AudioCraft
- Device and runtime
- Official guidance is GPU-oriented; about 16 GB GPU memory recommended for medium. No official Apple MLX path
- Published speed and output conditions
- 300M/1.5B/3.3B model variants documented; no per-device generation-time table
- Conditions not reported
- GPU, output duration, steps/tokens, decode inclusion and cold/warm split not stated
- ACE-Step older official README
- ACE-Step 1.5 README speed claims
- ACE-Step 1.5 official benchmark guide
- YuE official generation guide
- YuE2-3B official model card speed and memory measurements
- YuE2-Turbo implementation benchmark
- HeartMuLa official repository
- Stable Audio Open official model card
- MusicGen official documentation
Each timing component answers a different question
A music workflow may include a text or lyric planner, audio-token6 generation or diffusion, a vocoder or VAE7 decoder, and saving or conversion. End-to-end time is the total user wait; per-stage times help locate bottlenecks. ACE-Step 1.5's official profiler can separate LLM8 planning, DiT9 diffusion, VAE decoding, audio saving and total wall time.

Read YuE2's RTX 4090 timings by generation mode
The official YuE2 model card compares three generation modes on an RTX 4090. RTX 4090 values are averages over 32 warm requests; GPU memory is the full-run peak reported by NVML.
Audio seconds are each output's duration and generation seconds are synchronized pipeline10-call time. RTF in the table is calculated as generation seconds ÷ audio seconds for reference.
The card excludes initial path resolution and saving, so these are not app-start-to-saved-file wait times.
| Device and mode | Audio duration | Generation time | Calculated RTF | Peak GPU memory |
|---|---|---|---|---|
| RTX 4090 · full | 214.85 s | 71.04 s | 0.331 | 11.18 GiB |
| RTX 4090 · melody | 214.67 s | 68.68 s | 0.320 | 11.02 GiB |
| RTX 4090 · off | 196.88 s | 57.91 s | 0.294 | 11.09 GiB |
| H800 · full (one run) | 224.96 s | 54.74 s | 0.243 | 10.34 GiB |
Time and memory measurements from the official YuE2-3B model card
RTX 4090 · full
- Audio duration
- 214.85 s
- Generation time
- 71.04 s
- Calculated RTF
- 0.331
- Peak GPU memory
- 11.18 GiB
RTX 4090 · melody
- Audio duration
- 214.67 s
- Generation time
- 68.68 s
- Calculated RTF
- 0.320
- Peak GPU memory
- 11.02 GiB
RTX 4090 · off
- Audio duration
- 196.88 s
- Generation time
- 57.91 s
- Calculated RTF
- 0.294
- Peak GPU memory
- 11.09 GiB
H800 · full (one run)
- Audio duration
- 224.96 s
- Generation time
- 54.74 s
- Calculated RTF
- 0.243
- Peak GPU memory
- 10.34 GiB
Record the setup for a fair comparison
Use the same prompt and lyrics, output duration, sample rate11, channels and quality-related settings. Record checkpoint, code version, backend, precision and step count.
Along with the device name, note the operating system and driver/framework versions. Separate the first run from repeated runs after warmup, measure several times, and report the median and range.
Keep failures, out-of-memory events and truncated outputs in the record.
A small log table is enough to begin. Use columns such as model/revision, device, backend, precision, duration, steps, first-run seconds, seconds for warm runs12 1–5, actual output duration, peak memory and status. Copy the same prompt and settings into each model request, and give each output file and log the same experiment ID. Put changed settings on a new row.
Suppose a first run takes 42 seconds, the median of the next five takes 18 seconds, and the output is 30 seconds long. Warm-run conventional RTF is 18÷30=0.60, or about 1.67× real time. Describe the 42-second first-run wait separately. If a source reports 1.67×, show what was divided instead of copying only the label ‘RTF’; readers will not reverse which direction is faster.
After measuring, do not pick a winner from one number; interpret it against the use case. If you launch the app for one song at a time, cold-start wait matters.
For an always-on server, warm-run median and throughput may matter more. Stage timings can show whether long tracks are dominated by DiT or audio-token generation, while planning and loading overhead can loom larger for short outputs.
Mark speed gained by reducing quality settings or duration as a separate comparison.
Do not infer music speed from LLM tokens per second
In a music model, only the planning stage may use an LLM; the audio itself can come from diffusion iterations, autoregressive13 audio tokens and decoding. A device with high text-token throughput can still be slow in those stages. For audio generation, look at audio frames14 or tokens per second, diffusion steps, output duration and end-to-end seconds together.

Choose hardware for the supported path and workload
NVIDIA CUDA15, Apple MPS and MLX16 are not interchangeable labels; each project must implement and support the path. ACE-Step 1.5 documents CUDA/MPS and vLLM, PyTorch17 or MLX paths for its language model, but performance still depends on the exact configuration.
YuE2 documents Linux and a 24GB BF1618 NVIDIA GPU as its baseline. HeartMuLa's official example defaults to CUDA.
Unified memory19 in a Mac or the specifications of an RTX 5090 cannot establish support or predict throughput by themselves.
Listen first, then check the usage terms
Lyric clarity, prompt adherence, song structure and timbre do not collapse into one universal score. Listen to short samples and judge them for your use case.
Model weights and code can have different licenses, so check the terms for the exact release and its training-data notes before distribution or commercial use. Avoid supplying or reproducing lyrics, recordings or recognizable voices without the relevant rights.

Terminology notes
Decode — For an LLM, this is the stage that generates output tokens after input processing. For a VAE or audio codec, decoding can mean reconstructing the original form from a compressed representation or encoded data.
Back to the textReal-Time Factor — Generation time divided by the duration of the output. Under comparable conditions, a lower value indicates faster generation.
Back to the textGPU — A processor designed to handle many calculations in parallel. It performs model computations during AI inference.
Back to the textThroughput — The amount of work processed or generated over time. Comparisons need the unit, such as tokens per second or requests per second.
Back to the textCheckpoint — A file containing saved model weights and related state. Versions or tasks in one model family may use different checkpoints.
Back to the textToken — A unit into which a model divides input or output for processing. One token does not equal one character or a fixed duration.
Back to the textVAE — Short for Variational Autoencoder. It can encode input into a compact latent representation or decode that representation into an output.
Back to the textLarge language model — A language model trained on large text datasets to process and generate text. Capabilities and supported inputs vary by model.
Back to the textDiT — Short for Diffusion Transformer: a model architecture that uses a transformer to refine noisy representations across diffusion steps.
Back to the textPipeline — A sequence of processing stages from input to output. Different models or tools may be used at each stage.
Back to the textSampling rate — The number of times per second an audio signal is measured when digitized. It is distinct from bit depth.
Back to the textWarm run — A measurement made after model loading and initialization. It may exclude the loading wait from the first run.
Back to the textAR / NAR — AR (autoregressive) generation proceeds in order, conditioned on prior outputs. NAR (non-autoregressive) generation is less sequential.
Back to the textFrame — A single image that makes up part of a video. Frame rate and frame resolution are separate properties.
Back to the textCUDA — A software platform for general-purpose computing on NVIDIA GPUs. Programs built for CUDA are not guaranteed to run unchanged on other GPUs.
Back to the textMLX — A machine-learning framework for Apple silicon. It uses Apple silicon’s unified-memory architecture; supported models and features vary by MLX tool.
Back to the textPyTorch — A software framework for building and running AI models. Check the compatible PyTorch version and hardware support along with the model.
Back to the textBF16 — A 16-bit floating-point format for storing and computing model values. Support depends on the hardware and runtime.
Back to the textUnified memory — An architecture where the CPU and GPU share one physical memory pool. It does not increase total memory capacity; available capacity depends on the system.
Back to the text