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.

Requirements and key details
  • RTF = generation seconds ÷ audio seconds. An RTF of 0.5 is twice real time; an RTF of 2 takes twice the audio duration.
  • A comparison is meaningful only when you know whether model loading, planning, vocoder/VAE decoding and file saving are included.
  • The YuE2 model card reports mode-specific RTX 4090 timings and an H800 check. ACE-Step 1.5 headline claims, the older ACE-Step table, and YuE2-Turbo's RTX 5090 serving results use different conditions or implementations; do not read them as one GPU ranking.

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.

Officially documented hardware speed evidence and missing conditions
Model and official sourceDevice and runtimePublished speed and output conditionsConditions not reported
ACE-Step (legacy version)RTX 4090; MacBook M2 Max. Repository inference script; runtime details not stated27 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 publishedCheckpoint/commit, sample count, batch, prompt, warmup/loading inclusion and repetitions/spread not stated
ACE-Step 1.5README 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 documentedOfficial profiler measures duration/batch/thinking/steps and planning/DiT/VAE/save/end-to-end timings, but no reproducible per-device timing table is publishedFull-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 quantizationRTX 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 reportedGPU 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-TurboOpen inference/serving implementation; claims same YuE2 weights and 32 flow steps. Single 5090 testRTX 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 metricsProject 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-3BOfficial example defaults to CUDA; model/codec device placement and lazy loading availableOnly ‘RTF ≈ 1.0’ is stated; device and duration are missingDefinition, exact model revision, duration, samples, cold/warm conditions and Apple path not stated
Stable Audio Open 1.0Model-card example: CUDA or CPU PyTorch. No MPS/MLX speed tableUp to 47 s, 44.1 kHz stereo. tools example 100 steps/30 s; diffusers example 200 steps/10 s. No per-device speedUsage examples are not performance measurements; GPU, runtime, warmup and end-to-end scope not stated
MusicGen / AudioCraftOfficial guidance is GPU-oriented; about 16 GB GPU memory recommended for medium. No official Apple MLX path300M/1.5B/3.3B model variants documented; no per-device generation-time tableGPU, 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

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.

Timeline separating music generation into planning, audio synthesis, decoding and saving
Total wait time may include model setup and audio saving.

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.

Time and memory measurements from the official YuE2-3B model card
Device and modeAudio durationGeneration timeCalculated RTFPeak GPU memory
RTX 4090 · full214.85 s71.04 s0.33111.18 GiB
RTX 4090 · melody214.67 s68.68 s0.32011.02 GiB
RTX 4090 · off196.88 s57.91 s0.29411.09 GiB
H800 · full (one run)224.96 s54.74 s0.24310.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.

Cards for CUDA, MPS and MLX runtime paths beside a laptop and graphics card
Check the model's supported backend before comparing device specifications.

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.

A desk with two audio waveforms on a laptop, headphones and a listening notebook
Listen to confirm the result fits your needs, separately from its speed.

Terminology notes

  1. DecodeFor 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 text
  2. Real-Time FactorGeneration time divided by the duration of the output. Under comparable conditions, a lower value indicates faster generation.

    Back to the text
  3. GPUA processor designed to handle many calculations in parallel. It performs model computations during AI inference.

    Back to the text
  4. ThroughputThe amount of work processed or generated over time. Comparisons need the unit, such as tokens per second or requests per second.

    Back to the text
  5. CheckpointA file containing saved model weights and related state. Versions or tasks in one model family may use different checkpoints.

    Back to the text
  6. TokenA 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 text
  7. VAEShort for Variational Autoencoder. It can encode input into a compact latent representation or decode that representation into an output.

    Back to the text
  8. Large language modelA language model trained on large text datasets to process and generate text. Capabilities and supported inputs vary by model.

    Back to the text
  9. DiTShort for Diffusion Transformer: a model architecture that uses a transformer to refine noisy representations across diffusion steps.

    Back to the text
  10. PipelineA sequence of processing stages from input to output. Different models or tools may be used at each stage.

    Back to the text
  11. Sampling rateThe number of times per second an audio signal is measured when digitized. It is distinct from bit depth.

    Back to the text
  12. Warm runA measurement made after model loading and initialization. It may exclude the loading wait from the first run.

    Back to the text
  13. AR / NARAR (autoregressive) generation proceeds in order, conditioned on prior outputs. NAR (non-autoregressive) generation is less sequential.

    Back to the text
  14. FrameA single image that makes up part of a video. Frame rate and frame resolution are separate properties.

    Back to the text
  15. CUDAA 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 text
  16. MLXA 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 text
  17. PyTorchA software framework for building and running AI models. Check the compatible PyTorch version and hardware support along with the model.

    Back to the text
  18. BF16A 16-bit floating-point format for storing and computing model values. Support depends on the hardware and runtime.

    Back to the text
  19. Unified memoryAn 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