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