跳到主要内容

音频与音乐生成

AudioCraft 全家桶,一张 24GB 卡就能跑通

MusicGen、AudioGen、MAGNeT、JASCO、EnCodec、MultiBand Diffusion、AudioSeal 共七个模型装在同一个仓库里。装环境比跑模型难,显存反而不是瓶颈。

AudioCraft 是 Meta FAIR 开源的音频生成研究库,代码 MIT,模型权重 CC-BY-NC 4.0。仓库里不是一个模型,而是一整条链路:EnCodec 把 32kHz 波形压成 4 路 codebook、每秒 50 帧的离散 token;MusicGen 用一个单阶段自回归 Transformer 直接预测这些 token;MultiBand Diffusion 可以替换 EnCodec 解码器把 token 还原成更干净的波形;AudioSeal 给成品打上采样级别的水印。再加上非自回归的 MAGNeT、文生音效的 AudioGen、和弦与鼓点条件生成的 JASCO,一个仓库覆盖了从压缩、生成、解码到溯源的全流程。

先说结论性的显存数字,因为这是大多数人真正要问的。AudioCraft 的 loaders.py 里写死了一句:设备是 cpu 就用 float32,否则用 float16。也就是说只要挂在 GPU 上,语言模型部分一律 fp16 跑。musicgen-small 的 state_dict.bin 是 840MB,musicgen-medium 是 3.68GB,musicgen-large 是 6.51GB,另外所有档位共用同一份 236MB 的 compression_state_dict.bin(EnCodec 权重)。官方文档统一给的口径是「1.5B 量级的 medium 模型推理至少需要 16GB 显存」,这个说法偏保守,它假定你要跑满 30 秒立体声、还要留 batch 余量。实际做单条 30 秒 mono 生成,medium 在 12GB 卡上不会炸,large 在 24GB 卡上很宽裕。

真正会绊住你的是依赖。AudioCraft 的 requirements.txt 钉死了 torch==2.1.0、torchvision==0.16.0、torchtext==0.16.0、xformers<0.0.23、numpy<2.0.0、av==11.0.0、spacy==3.7.6。torch 2.1.0 的官方轮子最高到 CUDA 12.1,只编到 sm_90;而 torchtext 已在 2025 年 9 月被 PyTorch 官方归档,最后一个版本 0.18 只支持到 Python 3.11。这意味着:Python 必须是 3.9–3.11,卡必须是 Ampere/Ada/Hopper 及以前的架构,Blackwell 的 sm_120 在这套官方 pin 下根本没有内核。这不是代码写得差,是仓库最后一次提交停在 2025 年 3 月,之后依赖世界往前跑了,它没跟。下面每一条建议都围绕这个事实展开。

01 —

AudioCraft 里到底有哪些模型

主干版本 1.4.0a2,PyPI 稳定版停在 1.3.0;权重全部托管在 Hugging Face 的 facebook 账号下

版本参数量显存上下文说明
MusicGen small / medium / large(含 stereo 变体)300M / 1.5B / 3.3Bfp16 权重 0.84GB / 3.68GB / 6.51GB;实跑建议 8GB / 16GB / 24GB30 秒(1503 个 token,EnCodec 32kHz,4 路 codebook @ 50Hz)文生音乐主力。stereo 版本是从 mono 权重再微调 20 万步得到的,用 delay pattern 把左右两路 token 流交错编码,token 预算翻倍,同样时长更慢也更吃显存。官方推荐 medium 是质量与算力的平衡点。
MusicGen-melody / melody-large1.5B / 3.3Bfp16 权重 3.68GB / 6.51GB,另需给 Demucs 留 2–3GB30 秒,可用 extend_stride 滑窗续写更长接受一段参考旋律做 chroma 条件,走 generate_with_chroma()。注意它会调 Demucs 先做人声/伴奏分离再提色度,这一步是额外的显存和时间开销,很多人没算进预算。
MusicGen-Style1.5B(只有 medium 一档)fp16 权重约 3.7GB;按官方口径备 16GB30 秒输出,风格参考片段取 1.5–4.5 秒用一小段音频当「风格提示词」。关键参数是 eval_q(1–6,控制贴合参考音频的强度)和 double CFG 的 cfg_coef_beta(1–9,控制文本描述压过风格的程度)。想做「照着这首的味道写一段」就用它。
MAGNeT / audio-magnet300M / 1.5B,各有 10 秒与 30 秒两套权重与同参数量 MusicGen 相当;官方口径 1.5B 档 16GB定长 10 秒或 30 秒;audio-magnet 为 16kHz非自回归掩码生成,不是一个 token 一个 token 往外吐,所以延迟结构和 MusicGen 完全不同。要做交互式、低延迟出草稿的场景优先看它,但时长是权重写死的,不能像 MusicGen 那样滑窗续接。
AudioGen-medium1.5B(只发了 medium)fp16 约 3.5GB;官方口径 16GB16kHz EnCodec,4 路 codebook @ 50Hz,默认 5 秒可调文生音效而非音乐:狗叫、警笛、走廊脚步声。官方明说发布的这版结构与 AudioGen 论文里的不完全一致,是为了更快的生成速度做了取舍。做游戏/影视音效库的用这个。
JASCO chords-drums / chords-drums-melody400M / 1B按参数量折算 fp16 约 0.8GB / 2GB,12GB 卡够用固定 10 秒1.4.0a2 才加进来的时序条件模型,能同时吃文本 + 和弦进行 + 鼓点轨 +(可选)旋律。代价是要额外从源码编译 chord_extractor,旋律条件还要装 Deepsalience——这是整个仓库里安装最痛的一条路。

02 —

该租哪张卡

先看架构再看显存:torch 2.1.0 的 cu121 轮子只编到 sm_90,选卡要绕开这条线

  • 调提示词、批量出草稿,跑 musicgen-small 与 MAGNeT-small

    RTX 3090 24GB$0.193/卡·时

    sm_86 在 cu121 轮子里原生支持,24GB 显存跑 300M 模型完全用不满,是整个列表里每显存单价最低的卡,适合把提示词试错这种高频低强度的活儿放上去磨。

  • musicgen-large 3.3B 出成品,30 秒立体声、多条并行

    RTX 4090 24GB$0.540/卡·时

    6.51GB 的 fp16 权重加 stereo 翻倍的 KV cache,24GB 装得下且有余量;sm_89 是 cu121 支持的最后一代消费卡,单卡自回归解码速度也是这个价位里最快的。

  • 接 MultiBand Diffusion 解码器提音质,或微调 small/medium

    RTX A6000 48GB$0.817/卡·时

    MBD 要在 MusicGen 之外再常驻 4 个扩散模型并跑多步去噪,显存和时间都是额外一份;48GB 让你不用在「加 MBD」和「加 batch」之间二选一。

  • 全参微调 musicgen-medium,或用 Dora 起多卡训练网格

    A100 SXM4 80GB$1.088/卡·时

    1.5B 全参 AdamW 光优化器状态和 fp32 主权重就要 18GB 上下,再加激活和 EnCodec,单卡 48GB 会很紧;A100 的 sm_80 在 torch 2.1.0 上是官方一等公民,单节点最多可开 14 卡走 Dora 分布式。

03 —

从空实例到第一段音频

四步,最容易翻车的是第一步的版本钉死

  1. 01

    开实例,选一个 Python 3.9–3.11 的 PyTorch 镜像

    在 console.nexgpu.net 起一台 RTX 4090 24GB,从 2000+ 预置镜像里挑 PyTorch 基础镜像。关键动作是把 torch 降到官方 pin 的 2.1.0 + cu121:torchtext 0.16.0 只跟 torch 2.1.0 配对,而 torchtext 本身已在 2025 年 9 月被官方归档、最后一版 0.18 只到 Python 3.11。用 Python 3.12 装这套依赖必然失败,不是你的问题。

    pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
  2. 02

    装 AudioCraft 本体和 FFmpeg

    PyPI 上的 audiocraft 稳定版停在 1.3.0(2024 年 6 月),只有 MAGNeT 和 MusicGen-Style,没有 JASCO。要 JASCO 就必须装主干的 1.4.0a2。numpy 一定要先钉在 2.0 以下,否则 spacy 3.7.6 和 av 11.0.0 会连锁报错;FFmpeg 从 1.1.0 版本起取代了 torchaudio 做音频读写,缺了它连保存 wav 都会失败。

    apt-get install -y ffmpeg && pip install "numpy<2.0.0" && pip install -U git+https://github.com/facebookresearch/audiocraft#egg=audiocraft
  3. 03

    拉权重,跑通第一段 30 秒

    get_pretrained() 会从 Hugging Face 拉 state_dict.bin 和 compression_state_dict.bin,large 档合计约 6.75GB。想换缓存位置就设 AUDIOCRAFT_CACHE_DIR,把它指到数据盘而不是系统盘,实例重开时不用重下。audio_write 的 strategy='loudness' 会做响度归一化,直接出可用的成品电平。

    python -c "from audiocraft.models import MusicGen; from audiocraft.data.audio import audio_write; m=MusicGen.get_pretrained('facebook/musicgen-large'); m.set_generation_params(duration=30); w=m.generate(['lo-fi hip hop, warm rhodes, vinyl crackle, 82 bpm']); audio_write('out', w[0].cpu(), m.sample_rate, strategy='loudness')"
  4. 04

    新卡走 transformers 路线绕开版本地狱

    如果你租的是 RTX 5090 32GB 这类 Blackwell 卡,sm_120 在 torch 2.1.0 的 cu121 轮子里没有内核,官方 pin 这条路直接堵死。改用 Hugging Face transformers 里的 MusicgenForConditionalGeneration,它能跑在任意新版 torch 上,代价是拿不到 melody/style/MAGNeT/JASCO,只有基础 MusicGen 那几档,且同样受 1503 个 token(30 秒)的上限约束。

    pip install torch --index-url https://download.pytorch.org/whl/cu128 && pip install -U transformers scipy

跑一批 demo 到底要花多少

算一笔真账:用 musicgen-large 出 100 段 30 秒立体声。租 RTX 4090 24GB,$0.540/卡·时。第一小时用来装依赖、拉 6.51GB 的 state_dict.bin 加 236MB 的 compression_state_dict.bin、跑通第一段;之后连跑 4 小时批量生成,合计 5 小时 × $0.540 = $2.70。数据盘按 30GB 算(权重 + conda 环境 + 输出),存储中位价 $0.414/GB·月,只留 3 天就是 30 × 0.414 × 3 ÷ 30 = $1.24。100 段 32kHz、16-bit、立体声 WAV,每段 32000 × 2 × 2 × 30 ≈ 3.84MB,共约 384MB,出网中位价 $0.0081/GB,下载费 0.375 × 0.0081 ≈ $0.003。全程 $3.94。要省钱可以换 Tesla V100 32GB,$0.188/卡·时,同样 5 小时只要 $0.94——它是 sm_70,有 FP16 张量核心,在 torch 2.1.0 里属于原生支持档,32GB 显存装 6.51GB 权重绰绰有余,缺点是没有 bf16、也吃不到新一代注意力内核,纯解码速度慢于 4090。要全参微调 musicgen-medium,A100 SXM4 80GB $1.088/卡·时跑 10 小时是 $10.88。全部按秒计费、按小时定价,实例一停算力费就停,没有起租时长、没有开通费、不用提配额工单——存储只有在你销毁数据盘之后才停止计费,这一点记得手动清。

04 —

常见问题

MusicGen 本地部署到底需要多大显存?官方说 16GB 是真的吗?

官方文档对 medium(1.5B)和 large 的统一口径是「至少 16GB」,但那是留了 batch 和 30 秒立体声余量的保守值。按实际权重算:small 的 fp16 权重 0.84GB、medium 3.68GB、large 6.51GB,再加共用的 236MB EnCodec。单条 30 秒 mono 推理,medium 在 12GB 卡上不炸,large 在 24GB 卡上很宽裕;一旦上 stereo(token 流翻倍)或加 batch,16GB 的建议就变得实在了。在 NexGPU 上你可以先花 $0.193/时 开一台 RTX 3090 24GB 实测自己的 batch 配置,跑十分钟不到三分钱,比在本地猜要划算得多。

为什么 pip install audiocraft 一直报依赖冲突?

因为 requirements.txt 钉死了 torch==2.1.0、torchvision==0.16.0、torchtext==0.16.0、xformers<0.0.23、numpy<2.0.0、av==11.0.0、spacy==3.7.6,而仓库最后一次提交停在 2025 年 3 月的那个 JASCO checkpoint 路径修复。torchtext 已被 PyTorch 官方归档(2025 年 9 月),末版 0.18 只支持到 Python 3.11。所以正确姿势是:Python 3.10、先装 cu121 的 torch 2.1.0、先把 numpy 钉到 2.0 以下、再装 audiocraft。NexGPU 的 2000+ 预置镜像里挑一个干净的 PyTorch 底座,从零开一台重来只要几分钟,比在自己机器上反复污染 conda 环境省事。

MusicGen 生成的音乐能商用吗?

代码是 MIT,可以随便用;但模型权重是 CC-BY-NC 4.0,明确禁止商业用途,这条对 MusicGen、AudioGen、MAGNeT、MusicGen-Style、JASCO 的所有 facebook/* 权重都适用。训练数据是 Shutterstock、Pond5 和 Meta Music Initiative 的两万小时授权音乐,这也是它不敢放开商用授权的原因。同仓库里唯一例外是 AudioSeal 水印模型,代码和权重都是 MIT,2024 年 4 月起明确可商用。想做商业产品,正确路径是用 AudioCraft 的训练代码在你自有版权的曲库上从头训或微调——这正是租 A100 SXM4 80GB $1.088/卡·时 的用武之地。

为什么 MusicGen 只能生成 30 秒?能做长曲吗?

30 秒是 EnCodec token 预算的硬上限:32kHz、每秒 50 帧、4 路 codebook,30 秒正好 1503 个 token,音频续写模式下输入音频也要从这个额度里扣。要更长得用 extend_stride 做滑窗续写——把上一段的尾部当条件继续生成,能拼到任意长度,但和声与结构会随着窗口漂移,越长越容易跑偏。MAGNeT 更硬,10 秒和 30 秒是两套独立权重,压根没有续写机制。做长曲的实践是分段生成再人工拼接,这活儿本质上是「跑很多次短生成」,正好适合 NexGPU 按秒计费——试错的成本只按你真正占用的秒数算。

RTX 5090 能跑 AudioCraft 吗?

按官方 requirements 直接装,不能。torch 2.1.0 的官方轮子最高到 CUDA 12.1,编译目标止于 sm_90,而 5090 是 Blackwell 的 sm_120,没有对应内核,装完一跑就是 no kernel image is available。两条出路:一是放弃官方 pin,用 transformers 的 MusicgenForConditionalGeneration 配 torch 2.7+/cu128,能跑但只剩基础 MusicGen;二是老老实实用 sm_90 及以下的卡。NexGPU 上 RTX 4090 24GB $0.540/卡·时、RTX A6000 48GB $0.817/卡·时 都是 cu121 原生支持档,开箱即用。另外提醒一句:Tesla P40 24GB 虽然只要 $0.214,但 Pascal 架构的 FP16 吞吐只有 FP32 的 1/64,而 AudioCraft 在 GPU 上强制走 fp16,跑起来会慢到没有意义,别贪这个便宜。

AudioCraft 还在维护吗?现在还值得用吗?

主干版本号是 1.4.0a2,最后一次提交是 2025 年 3 月修 JASCO 的 checkpoint 加载路径,PyPI 稳定版还停在 2024 年 6 月的 1.3.0——按任何标准看,它已经是一个冻结的研究仓库,不要指望它跟进新版 torch 或新架构。但冻结不等于没用:它依然是唯一一个把可控文生音乐、文生音效、神经音频编解码、扩散解码器和音频水印装进同一套训练/推理代码的开源库,MusicGen 的 melody 和 style 条件能力至今没有等价的开源替代,训练代码也完整可跑。务实的做法是把它当成一个「用固定版本封起来」的工具箱:在 NexGPU 上把 Python 3.10 + torch 2.1.0 的环境做成快照,需要时几分钟拉起一台 4090,用完就停——环境腐烂的问题从此和你的本地机器无关。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。