资讯动态

vLLM-Omni 单卡部署 Stable Audio Open:文本生成音乐的离线推理与 OpenAI 兼容在线服务实战

发布时间:2026/9/18 15:55:07 来源:尧图企业网站定制
vLLM-Omni 单卡部署 Stable Audio Open文本生成音乐的离线推理与 OpenAI 兼容在线服务实战【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni导读本文基于 vLLM-Omni 仓库中的官方配方reciperecipes/StabilityAI/Stable-Audio-Open.md完整讲解如何在单张 GPU已实测 NVIDIA RTX 4090 24GB 与 AMD MI300X 192GB上部署 Stability AI 的stabilityai/stable-audio-open-1.0开源文本到音频Text-to-Audio扩散模型既包含text_to_audio.py离线推理脚本的完整参数用法含 TeaCache 加速也覆盖通过vllm serve --omni启动的 OpenAI 兼容POST /v1/audio/generate在线服务。读完本文你将掌握从模型授权下载、离线生成 10 秒 WAV、在线服务化到输出采样率/时长校验与显存观测的一整套可复现实战方案并理解其底层管线与 DiT 实现原理。配方概览与适用场景本配方的核心信息如下项目内容模型厂商Stability AI模型stabilityai/stable-audio-open-1.0任务类型文本到音频生成音乐、音效、环境声运行模式离线推理 在线服务维护方社区Community适用场景在单张 RTX 4090 24GB 显存上运行 Stable Audio Open用于音乐或音效生成。配方给出了一个 10 秒的离线验证样例开启 TeaCache 缓存加速以及通过/v1/audio/generate端点对外提供服务的完整在线流程。该模型本身支持生成最长约 47 秒的 44.1 kHz 立体声音频本配方验证的是 10 秒 WAV 输出。前置准备gated 模型授权与下载stable-audio-open-1.0是 Hugging Face 上的门控gated模型必须先在模型主页接受许可协议才能下载权重。配方给出的下载流程如下hf auth login hf download stabilityai/stable-audio-open-1.0 \ --local-dir /path/to/stable-audio-open-1.0使用说明hf auth login会在本地写入 Hugging Face 访问令牌等效于 README 中提到的huggingface-cli login见 examples/offline_inference/text_to_audio/README.mdhf download将权重保存到本地目录后续所有命令统一使用本地路径/path/to/stable-audio-open-1.0也可直接使用仓库名stabilityai/stable-audio-open-1.0由代码自动判断本地/远端来源见 pipeline_stable_audio.py 中local_files_only os.path.exists(model)的逻辑在 CI/测试环境里门控模型还需要提供HF_TOKEN环境变量见 tests/e2e/offline_inference/test_stable_audio_expansion.py 中的注释。离线推理text_to_audio.py 全参数实战离线示例脚本位于 examples/offline_inference/text_to_audio/text_to_audio.py是一个针对文本到音频扩散模型的统一生成入口。配方中 RTX 4090 上的 10 秒验证命令在仓库根目录执行python examples/offline_inference/text_to_audio/text_to_audio.py \ --model /path/to/stable-audio-open-1.0 \ --prompt A gentle piano melody with soft room ambience \ --negative-prompt Low quality, distorted, noisy \ --seed 42 \ --guidance-scale 7.0 \ --audio-length 10.0 \ --num-inference-steps 50 \ --cache-backend tea_cache \ --output examples/offline_inference/text_to_audio/stable_audio_10s.wav参数速查表脚本通过argparse定义了大量参数下面按类别整理默认值以源码为准见 text_to_audio.py核心生成参数参数类型默认值说明--modelstrstabilityai/stable-audio-open-1.0模型名或本地路径--promptstrThe sound of a hammer hitting a wooden surface.文本提示词--negative-promptstrNone默认关闭CFG 负向提示词推荐为 Stable Audio 显式指定--seedint42随机种子保证可复现--guidance-scalefloat7.0无分类器引导CFG强度--audio-startfloat0.0音频起始偏移秒映射为audio_start_in_s--audio-lengthfloat10.0音频时长秒映射为结束时间stable-audio-open-1.0上限约 47 秒--num-inference-stepsint100扩散采样步数步数越多质量越高、速度越慢--num-waveformsint1每个提示词生成的波形数量--sample-rateint44100输出采样率Stable Audio 固定 44100 Hz--extra-bodyJSONNone以 JSON 对象传入模型专属参数合并进sampling_params.extra_args优先级高于同名 flag--outputstrstable_audio_output.wav输出 WAV 路径缓存加速参数参数类型默认值说明--cache-backendstrNone当前仅支持tea_cacheTeaCache 缓存加速不传则无加速--tea-cache-rel-l1-threshfloat0.2TeaCache 累积相对 L1 距离阈值并行与显存优化参数参数类型默认值说明--use-hsdpflag关闭启用 HSDP 权重分片跨多卡降低单卡显存--hsdp-shard-sizeint1HSDP 分片使用的 GPU 数--hsdp-replicate-sizeint1HSDP 副本组数默认 1 表示纯分片--tensor-parallel-sizeint1DiT 内部张量并行 GPU 数--ulysses-degree/--ring-degreeint1Ulysses / Ring 序列并行 GPU 数--ulysses-modestrstrictstrict要求整除或advanced_uaa--cfg-parallel-sizeint1可选 1/2CFG 并行 GPU 数--vae-patch-parallel-sizeint1VAE patch/tile 并行解码GPU 数--enable-cpu-offloadflag关闭模型级 CPU offload节省显存--enable-layerwise-offloadflag关闭逐层 CPU offload进一步省显存--enable-diffusion-pipeline-profilerflag关闭开启扩散管线剖析器输出各阶段耗时TeaCache 加速的底层原理--cache-backend tea_cache是本配方验证过的关键加速手段。在源码层面Stable Audio 的缓存支持由 vllm_omni/diffusion/cache/teacache/extractors.py 中的extract_stable_audio_context实现。其要点从第一个 transformer block 提取modulated_input作为缓存判据Stable Audio 使用标准 LayerNorm且将全局时间嵌入拼接到序列头部因此首 token 携带时间步信号当相邻两步的累积相对 L1 距离低于rel_l1_thresh脚本默认 0.2时跳过本轮 transformer blocks 前向直接复用上一步的输出从而减少 DiT 计算量提取器将预处理、transformer 执行与后处理封装为CacheContext使 TeaCache hook 保持通用。MI300X 实测条目确认 TeaCache 以rel_l1_thresh0.2运行。提示脚本内部将--cache-backend tea_cache与--tea-cache-rel-l1-thresh组装为cache_config {rel_l1_thresh: ...}传给Omni见 text_to_audio.py 第 237-240 行。离线推理的底层调用链text_to_audio.py的调用链为Omni.generate(prompt, OmniDiffusionSamplingParams)→ 扩散引擎调度 →StableAudioPipeline.forward。管线实现在 vllm_omni/diffusion/models/stable_audio/pipeline_stable_audio.py核心流程如下文本编码T5TokenizerFast分词 →T5EncoderModel编码 →projection_model投影时长编码encode_duration将audio_start_in_s/audio_end_in_s编码为seconds_start_hidden_states/seconds_end_hidden_states与文本嵌入拼接成text_audio_duration_embeds与audio_duration_embeds潜在噪声初始化prepare_latents按sample_size默认 1024生成随机 latent 并乘以调度器init_noise_sigma去噪循环CosineDPMSolverMultistepScheduler迭代DiT 预测噪声后执行 CFG 组合noise_pred_uncond guidance_scale * (noise_pred_text - noise_pred_uncond)StableAudioSchedulerWrapper专门处理最后一步零噪声采样VAE 解码latent 经AutoencoderOobleck解码为波形再按waveform_start:waveform_end裁剪到请求时长。其中 DiT 本体为 vllm_omni/diffusion/models/stable_audio/stable_audio_transformer.py 中的StableAudioDiTModel24 层StableAudioDiTBlock自注意力 交叉注意力 SwiGLU FFN隐藏维 153624 头 × 64 头维输入/输出通道 64交叉注意力采用 GQA12 KV 头线性层复用 vLLM 的ReplicatedLinear注意力复用 vLLMAttention后端。管线类声明support_audio_output True、audio_sample_rate 44100使默认 stage 元数据上报final_output_typeaudiomultimodal_output携带采样率信息。多卡与显存优化用法除单卡命令外README 与脚本还提供了降低单卡显存的用法。HSDP 分片示例python text_to_audio.py \ --model stabilityai/stable-audio-open-1.0 \ --prompt The sound of a hammer hitting a wooden surface \ --negative-prompt Low quality \ --seed 42 \ --guidance-scale 7.0 \ --audio-length 10.0 \ --num-inference-steps 100 \ --use-hsdp \ --hsdp-shard-size 2 \ --output stable_audio_output.wav显存紧张时还可组合--enable-cpu-offload模型级或--enable-layerwise-offload逐层来换取显存。仓库测试 tests/e2e/offline_inference/test_stable_audio_expansion.py 中亦验证了FP8 量化 TeaCache与FP8 CPU offload两种组合quantizationfp8、cache_backendtea_cache、enable_cpu_offloadTrue说明该模型在 vLLM-Omni 中可叠加量化、缓存与 offload 能力。在线服务/v1/audio/generate 端点启动服务端配方给出的启动命令与 docs/serving/audio_generate_api.md 快速开始一致vllm serve /path/to/stable-audio-open-1.0 \ --host 0.0.0.0 \ --port 8091 \ --gpu-memory-utilization 0.9 \ --trust-remote-code \ --enforce-eager \ --omni说明--omni标志启用 vLLM-Omni 的多模态扩散服务模式每个服务实例对应单一模型启动时通过vllm serve model --omni指定。--enforce-eager关闭 CUDA Graph 以降低启动显存开销--gpu-memory-utilization 0.9允许模型使用 90% 显存。生成请求curl在另一个终端从仓库根目录发起请求curl http://localhost:8091/health curl -X POST http://localhost:8091/v1/audio/generate \ -H Content-Type: application/json \ -d { input: A gentle piano melody with soft room ambience, audio_length: 10.0, num_inference_steps: 50, guidance_scale: 7.0, negative_prompt: Low quality, distorted, noisy, seed: 42, response_format: wav } \ --output piano_10s.wav请求参数参考参数类型默认值说明inputstring必填描述待生成音频的文本提示词modelstring服务端模型可选若指定需与服务器模型一致response_formatstringwav音频格式wav、mp3、flac、pcm、opusspeedfloat1.0播放速度0.25 - 4.0audio_lengthfloatnull音频时长秒不传则用模型默认stable-audio-open-1.0最大约 47 秒audio_startfloat0.0音频起始时间秒negative_promptstringnull负向提示词guidance_scalefloat模型默认CFG 强度越高越贴合提示词num_inference_stepsint模型默认去噪步数越高质量越好但更慢seedintnull复现用随机种子响应为二进制音频数据按response_format返回对应 Content-Typewav→audio/wav、mp3→audio/mpeg、flac→audio/flac、pcm→audio/pcm、opus→audio/opus。服务端实现位于 vllm_omni/entrypoints/openai/serving_audio_generate.py其中将audio_start audio_length计算为audio_end_in_s后透传给管线。在线端到端测试见 tests/e2e/online_serving/test_stable_audio_online_expansion.py使用 2 秒时长、4 步去噪的轻量用例校验/v1/audio/generate返回非空 WAV。Python 客户端示例import httpx response httpx.post( http://localhost:8091/v1/audio/generate, json{ input: The sound of a cat purring, audio_length: 10.0, }, timeout300.0, ) with open(cat.wav, wb) as f: f.write(response.content)参数调优指南guidance_scale3-5 更富创意/多样7默认均衡10 严格贴合提示词。num_inference_steps50 步质量良好、速度快适合快速预览100 步质量很好适合常规用途150 质量最佳、速度最慢适合最终成品。audio_lengthstable-audio-open-1.0上限约 47 秒省略时使用模型默认时长。negative_prompt常用写法如Low quality, distorted, noisy、Silence, static、纯音效场景可用Music避免混入音乐。常见错误响应400 Bad Request模型运行结束但未产生音频输出报Audio generation model did not produce audio output.404 Not Found请求中model与服务端不一致报The model xxx does not exist.422 Unprocessable EntityPydantic 校验失败如非法的response_format或speed越界detail中会列出Input should be wav, pcm, flac, mp3 or opus等提示。输出验证采样率、时长与 WAV 合法性配方对离线与在线两种输出都给出了soundfile校验脚本。离线输出验证ls -lh examples/offline_inference/text_to_audio/stable_audio_10s.wav python - PY import soundfile as sf path examples/offline_inference/text_to_audio/stable_audio_10s.wav audio, sample_rate sf.read(path) print(sample_rate:, sample_rate) print(shape:, audio.shape) print(duration:, len(audio) / sample_rate) PY在线输出验证将路径换为piano_10s.wav即可。验收标准离线命令写出合法 WAV 文件服务端在http://localhost:8091/health正常响应在线请求写出合法 WAV 文件生成音频采样率为44.1 kHz生成时长约为10 秒峰值采样显存控制在 RTX 4090 24GB 预算内——验证运行中离线与在线生成各自峰值约12.6 GiB。硬件实测条目1x NVIDIA RTX 4090 24GB社区验证环境项版本OSUbuntu 22.04.5Python3.12GPUNVIDIA GeForce RTX 409024564 MiB VRAM驱动 / 运行时NVIDIA driver 595.80与仓库构建匹配的 CUDA 运行时vLLM0.22.0vLLM-Omni源码检出source checkoutPyTorch2.11.0cu130命令即上文给出的离线与在线两条。验证结论离线命令写出合法 WAV服务健康检查与在线请求均正常输出 44.1 kHz、约 10 秒离线与在线生成峰值显存约 12.6 GiB。1x AMD MI300X 192GB社区验证环境项版本OSLinux 6.8.0-134-generic, x86_64容器由docker/Dockerfile.rocm构建的官方 ROCm 镜像Python3.12.13PyTorch2.11.0gitd0c8b1f驱动 / 运行时AMD 6.19.14.31400000 / ROCm 7.2.53211GPUAMD Instinct MI300Xgfx942:sramecc:xnack-191.69 GiB 可见 HBMvLLM0.27.0rocm723vLLM-Omni commit73e1368c7bb940efe1a025859c9d6c8eeeb2e3f0命令额外开启了--enable-diffusion-pipeline-profilerpython3 examples/offline_inference/text_to_audio/text_to_audio.py \ --model stabilityai/stable-audio-open-1.0 \ --prompt A gentle piano melody with soft room ambience \ --negative-prompt Low quality, distorted, noisy \ --seed 42 \ --guidance-scale 7.0 \ --audio-length 10.0 \ --num-inference-steps 50 \ --cache-backend tea_cache \ --enable-diffusion-pipeline-profiler \ --output stable_audio_10s.wav验证结论与关键指标命令完成并写出合法的44.1 kHz 立体声 WAV时长 10.00 秒TeaCache 以rel_l1_thresh0.2运行模型加载占用 2.7891 GiB、耗时 3.706 秒生成耗时 4.750 秒对 10.00 秒输出而言实时因子RTF为 0.475即生成比播放更快内部剖析器记录请求期间保留 15.65 GB、分配 9.68 GB全设备最高单秒内存采样为 19.61 GiB输出 RMS 为 0.0887峰值绝对幅度为 0.5761整个进程含启动与编译耗时 384 秒。注意事项与故障排查配方明确记录的注意事项torchaudio 版本匹配在线服务若在导入torchaudio时失败需确保 torchaudio wheel 与已安装的 PyTorch/CUDA 构建匹配。验证环境使用torch2.11.0cu130与torchaudio2.11.0cu130无害警告验证中观察到的NIXL is not available、GLOO_SOCKET_IFNAME、torchsde边界警告不会阻止生成成功硬件边界RTX 4090 条目在单张 24GB GPU 上验证MI300X 条目覆盖单张 192GB GPU更长的生成时长、更高推理步数与非 WAV 响应格式未在本配方中基准测试门控模型必须先接受许可协议才能下载显存不足时可降低--gpu-memory-utilization如 0.8或缩短audio_length见 docs/serving/audio_generate_api.md 的 Troubleshooting 部分生成超时减少num_inference_steps、缩短audio_length并用nvidia-smi检查显存。延伸阅读离线示例目录examples/offline_inference/text_to_audio离线脚本完整参数与用法text_to_audio.py、README.md在线 API 完整文档docs/serving/audio_generate_api.md管线实现vllm_omni/diffusion/models/stable_audio/pipeline_stable_audio.pyDiT 实现vllm_omni/diffusion/models/stable_audio/stable_audio_transformer.pyTeaCache 提取器vllm_omni/diffusion/cache/teacache/extractors.py端到端测试tests/e2e/offline_inference/test_stable_audio_expansion.py、tests/e2e/online_serving/test_stable_audio_online_expansion.py【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价