先把最容易混淆的一件事说清楚:AudioGen 不是 MusicGen。同一个 audiocraft 仓库、同一套 EnCodec 分词器、几乎同一套 Transformer 代码,但训练数据完全不同——AudioGen 吃的是 AudioSet、BBC 音效库、AudioCaps、Clotho v2、VGG-Sound、FSD50K 这类环境声与音效语料,产出的是脚步声、玻璃碎裂、鸟鸣、机械嗡鸣。你拿它写旋律只会得到一段噪声。想做音乐请走 MusicGen,想做音效、游戏环境音、视频后期拟音,AudioGen 才是这条线上的开源起点。
现在公开的这版是 2023 年 7—8 月重做的 AudioGen v2:Meta 把它整个搬到了 MusicGen 的架构上,生成窗口从论文版的 5 秒延长到 10 秒,EnCodec 用环境音数据重训过,并去掉了论文里那个「混音增强」技巧。模型卡在 AudioCaps 上报的是 FAD 1.77、KL 1.58。Meta 自己也标明了一句很重要的话:公开的这批权重并不是论文里报数的那批原始模型。整条链路是 EnCodec 4 个码本、每码本 2048 词表、50Hz 帧率,输出 16kHz 单声道。
落地时真正卡人的不是显存,是依赖。audiocraft 的 requirements.txt 把 torch 钉死在 2.1.0,torchaudio 限在 2.1.2 以下,还带着 torchvision==0.16.0、torchtext==0.16.0、xformers<0.0.23、numpy<2.0.0、av==11.0.0、spacy==3.7.6 这一串。PyPI 上最后一个版本 1.3.0 停在 2024 年 6 月,仓库最后一次提交是 2025 年 3 月,Hugging Face 上的权重最后更新是 2024 年 3 月——这是一个已经冻结的技术栈。它带来的直接后果是:新卡反而不友好,老卡刚刚好。这页把该踩的坑和该选的卡一次讲完。
01 —
AudioGen 有哪些版本,实际能下到哪个
官方只公开了一个检查点,其余是同栈的替代路线,别被模型名骗了
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| facebook/audiogen-medium | 1.5B | 官方要求 ≥16GB;state_dict.bin 3.68GB + EnCodec 236MB + T5 文本编码器约 0.9GB | 10 秒原生窗口,超长靠滑窗续写(extend_stride 默认 2 秒) | 唯一公开的官方权重,也是全部。没有 small、没有 large,Hugging Face 上其余同名仓库都是社区镜像或第三方微调。代码 MIT,权重 CC-BY-NC-4.0。 |
| AudioGen v1(ICLR 2023 论文版) | 未公开 | 不适用 | 5 秒 | Kreuk 等人 2022 年 9 月那篇 arXiv:2209.15352 里的原始模型,权重从未发布。你在网上看到的任何「AudioGen 论文复现指标」都对不上你能下到的这版。 |
| facebook/audio-magnet-medium | 1.5B | 与 audiogen-medium 同级,官方同样按 ≥16GB 计 | 10 秒 | 同一个 audiocraft 装一次就能用。非自回归掩码解码,MAGNeT 论文称比自回归基线快 7 倍。你如果嫌 AudioGen 逐 token 解码太慢,这是最省事的换法。 |
| facebook/audio-magnet-small | 300M | 参数量只有 medium 的五分之一,fp16 权重约 0.6GB 量级 | 10 秒 | 音效生成里最便宜的一档,适合做实时试听、批量粗筛,选中的 prompt 再交给 medium 精出。 |
| Stable Audio Open 1.0(对照,非 Meta 系) | 约 1B | 扩散架构,显存曲线与自回归的 AudioGen 完全不同 | 最长 47 秒 | 44.1kHz 立体声,训练数据全部来自 Freesound 与 FMA 的 CC 授权素材,走 Stability AI Community License。保真度和授权都比 AudioGen 友好,代价是它更偏音乐、生态更新。 |
02 —
AudioGen 用什么显卡跑最划算
依赖锁在 torch 2.1.0,所以选卡逻辑跟新模型完全反过来:别追最新架构
试音、调 prompt、单条 10 秒出片
RTX 3090 24GB$0.193/卡·时
24GB 把官方 16GB 底线甩开一大截,Ampere 的 sm_86 被 torch 2.1.0 的 cu118/cu121 轮子原生覆盖,装完就能跑,是这套冻结依赖栈里最便宜的稳妥选择。
批量出素材库,一次并行 8~16 条 prompt
RTX 4090 24GB$0.540/卡·时
AudioGen 是 50Hz × 4 码本的逐 token 自回归解码,解码吞吐直接换算成每小时出片量;Ada 的 fp16 性能在这里花得值,24GB 也吃得下更大的 batch。
在自己的音效库上微调 audiogen-medium
RTX A6000 48GB$0.817/卡·时
fp32 权重加上梯度和优化器状态,占用是纯推理的三倍以上。48GB 让你在单卡上把微调跑通,不用先跟 FSDP 分片配置搏斗。
用 AudioGenSolver 从头训练或多卡全量微调
A100 SXM4 80GB$1.088/卡·时
audiocraft 的训练配方默认走 FSDP 多卡,需要 NVLink 级互联和大显存。NexGPU 单节点最多 14 张卡、节点显存上限 2,152GB,够摆开一整轮训练。
03 —
AudioGen 部署四步,从空机器到第一条音效
关键在第二步:先把 torch 钉回 2.1.0,再装 audiocraft,顺序反了必然失败
- 01
开一台 CUDA 12.1 的实例,确认驱动
在 console.nexgpu.net 上选 PyTorch 预置镜像开机,SSH 进去先看卡。这一步就要做决定:audiocraft 依赖的 torch 2.1.0 只有 cu118 和 cu121 两种轮子,覆盖到 Hopper(sm_90)为止。Blackwell 架构的 RTX 5090 是 sm_120,torch 2.1 里根本没有对应的 kernel,跑起来会直接抛 “no kernel image is available for execution on the device”。3090、4090、A10、A6000、A100、V100 都在覆盖范围内。
nvidia-smi && python -c "import torch; print(torch.__version__, torch.cuda.get_device_capability())" - 02
按顺序装依赖:torch 2.1.0 在前,audiocraft 在后
audiocraft 的 requirements.txt 里是 torch==2.1.0、torchaudio>=2.0.0,<2.1.2、torchvision==0.16.0、torchtext==0.16.0、xformers<0.0.23、numpy<2.0.0。torchtext 已经被 PyTorch 官方停止维护,所以必须让 pip 拿到 0.16.0 这个正好匹配 torch 2.1 的版本。ffmpeg 是硬依赖,torchaudio 存盘读盘全靠它,官方建议装 5 以下的版本。Python 用 3.9 最省事。
pip install "torch==2.1.0" "torchaudio==2.1.0" --index-url https://download.pytorch.org/whl/cu121 && pip install "numpy<2.0.0" setuptools wheel && pip install -U audiocraft && apt-get update && apt-get install -y ffmpeg - 03
拉权重,生成第一批音效
第一次调用会从 Hugging Face 拉三份东西:state_dict.bin(3.68GB,语言模型本体)、compression_state_dict.bin(236MB,重训过的 EnCodec)、以及 transformers 那边的 T5 文本编码器(约 0.9GB)。注意 AudioGen 不在 Hugging Face transformers 里——没有 AudioGenForConditionalGeneration 这种东西,只能用 audiocraft 的接口加载。生成参数默认是 top_k=250、temperature=1.0、cfg_coef=3.0、duration=10.0,音效类 prompt 想更贴文字就把 cfg_coef 往上调。
python -c "from audiocraft.models import AudioGen; from audiocraft.data.audio import audio_write; m=AudioGen.get_pretrained('facebook/audiogen-medium'); m.set_generation_params(duration=10, top_k=250, cfg_coef=3.0); w=m.generate(['heavy rain on a metal roof with distant thunder','footsteps on gravel then a door creaking open']); [audio_write(f'out_{i}', x.cpu(), m.sample_rate, strategy='loudness', loudness_compressor=True) for i,x in enumerate(w)]" - 04
开 Web 界面或转批量脚本
仓库自带 Gradio demo,适合让不写代码的音效师直接调 prompt。要产量就别用界面:把 prompt 列成 list 一次性喂给 model.generate(),自回归解码在 batch 维度上是并行的,单条跑和八条跑的墙钟时间差得远没有八倍。超过 10 秒的需求靠 extend_stride 滑窗续写,stride 调小连贯性更好但更慢,默认 2 秒是折中值。
python -m demos.audiogen_app --share
在 NexGPU 上跑 AudioGen 到底花多少钱
把整条链路按真实费率算一遍。开一台 RTX 3090 24GB,$0.193/卡·时。拉权重:3.68GB 的语言模型 + 236MB 的 EnCodec + 约 0.9GB 的 T5 编码器,合计不到 5GB,入站不计费。装依赖、跑通第一条、把 prompt 调顺手,按 40 分钟算:0.193 × 40/60 = $0.129。接着开批量出素材,占 3 小时:0.193 × 3 = $0.579。到这里总共 $0.708。 换 RTX 4090 24GB($0.540/卡·时)跑同样 3 小时是 $1.62。多出来的钱买的是 Ada 架构的 fp16 解码速度——AudioGen 逐 token 解码,每秒音频要解 50 帧 × 4 个码本,解码快多少,你一小时出的条数就多多少。 导出几乎不花钱:16kHz、16-bit、单声道,一条 10 秒片段 = 10 × 16000 × 2 = 320KB;1,000 条 = 320MB = 0.32GB,按出站中位价 $0.0081/GB 算约 $0.0026。 唯一持续计费的是存储:把这 4.8GB 权重留在盘上,按 $0.414/GB·月 中位价约 $1.99/月。算力在实例停止的那一秒就停止计费,存储要销毁实例才归零。按秒计量、按小时定价,没有起步时长、没有开通费、没有配额申请——跑 22 分钟就是 0.540 × 22/60 = $0.198。
04 —
