ACE-Step: A step towards music generation foundation model
ACE-Step:迈向音乐生成 Foundation Model 的一步
ACE-Step: A Step Towards Music Generation Foundation Model
License
ace-step/ACE-Step
main
项目主页 | Checkpoints | Space Demo | Discord
目录
📢 最新动态
- 🚀 2025.05.06: 开源 demo 代码和模型
TODO 📋
- 发布训练代码 🔥
- 发布 LoRA 训练代码 🔥
- 发布 RapMachine lora 🎤
- 发布 ControlNet 训练代码 🔥
- 发布 Singing2Accompaniment controlnet 🎮
- 发布评估性能和技术报告 📄
🏗️ 架构
📝 摘要
我们推出了 ACE-Step,这是一种新型的开源音乐生成 Foundation Model,它通过整体架构设计克服了现有方法的关键局限性,并实现了最先进的性能。当前的方法在生成速度、音乐连贯性和可控性之间面临着固有的权衡。例如,基于 LLM 的模型(例如,Yue, SongGen)在歌词对齐方面表现出色,但存在推理速度慢和结构伪影的问题。另一方面,扩散模型(例如,DiffRhythm)可以实现更快的合成,但通常缺乏长期的结构连贯性。
ACE-Step 通过将基于扩散的生成与 Sana 的 Deep Compression AutoEncoder (DCAE) 和轻量级线性 transformer 相结合来弥合这一差距。它还利用 MERT 和 m-hubert 在训练期间对齐语义表示 (REPA),从而实现快速收敛。因此,我们的模型可以在 A100 GPU 上仅用 20 秒合成长达 4 分钟的音乐,比基于 LLM 的基线快 15 倍,同时在旋律、和声和节奏指标方面实现卓越的音乐连贯性和歌词对齐。此外,ACE-Step 保留了精细的声学细节,从而实现了先进的控制机制,例如语音克隆、歌词编辑、混音和音轨生成(例如,lyric2vocal、singing2accompaniment)。
我们的愿景不是构建另一个端到端的 text-to-music 管道,而是为音乐 AI 建立一个 Foundation Model:一种快速、通用、高效且灵活的架构,可以轻松地在其之上训练子任务。这为开发能够无缝集成到音乐艺术家、制作人和内容创作者的创作工作流程中的强大工具铺平了道路。简而言之,我们的目标是为音乐打造 Stable Diffusion 时刻。
✨ 特性
🎯 基线质量
🌈 多样化的风格和流派
- 🎸 支持所有主流音乐风格,并支持各种描述格式,包括简短标签、描述性文本或用例场景
- 🎷 能够生成具有适当乐器和风格的不同流派的音乐
🌍 多种语言
- 🗣️ 支持 19 种语言,其中表现最好的前 10 种语言包括:
- 🇺🇸 英语、🇨🇳 中文、🇷🇺 俄语、🇪🇸 西班牙语、🇯🇵 日语、🇩🇪 德语、🇫🇷 法语、🇵🇹 葡萄牙语、🇮🇹 意大利语、🇰🇷 韩语
- ⚠️ 由于数据不平衡,不太常见的语言可能表现不佳
🎻 乐器风格
- 🎹 支持跨不同流派和风格的各种乐器音乐生成
- 🎺 能够制作逼真的乐器音轨,并为每种乐器提供适当的音色和表现力
- 🎼 可以生成包含多种乐器的复杂编排,同时保持音乐的连贯性
🎤 歌唱技巧
- 🎙️ 能够以良好的质量渲染各种歌唱风格和技巧
- 🗣️ 支持不同的歌唱表达方式,包括各种歌唱技巧和风格
🎛️ 可控性
🔄 变体生成
- ⚙️ 使用免训练的推理时优化技术实现
- 🌊 Flow-matching 模型生成初始噪声,然后使用 trigFlow 的噪声公式添加额外的 Gaussian 噪声
- 🎚️ 可调节原始初始噪声和新 Gaussian 噪声之间的混合比例以控制变化程度
🎨 重新绘制 (Repainting)
- 🖌️ 通过向目标音频输入添加噪声并在 ODE 过程中应用掩码约束来实现
- 🔍 当输入条件与原始生成发生变化时,只能修改特定方面,同时保留其余部分
- 🔀 可以与变体生成技术相结合,以在风格、歌词或人声中创建局部变化
✏️ 歌词编辑
- 💡 创新性地应用 flow-edit 技术,以实现局部歌词修改,同时保留旋律、人声和伴奏
- 🔄 适用于生成的内容和上传的音频,极大地增强了创作可能性
- ℹ️ 当前限制:一次只能修改小段歌词以避免失真,但可以依次应用多次编辑
🚀 应用
🎤 Lyric2Vocal (LoRA)
- 🔊 基于在纯人声数据上进行 LoRA 微调,允许从歌词直接生成人声样本
- 🛠️ 提供众多实际应用,例如人声演示、指导音轨、歌曲创作辅助和人声编排实验
- ⏱️ 提供了一种快速测试歌词在演唱时的声音效果的方法,帮助歌曲作者更快地迭代
📝 Text2Samples (LoRA)
- 🎛️ 类似于 Lyric2Vocal,但在纯乐器和样本数据上进行了微调
- 🎵 能够从文本描述中生成概念性音乐制作样本
- 🧰 可用于快速创建乐器循环、音效和音乐元素以进行制作
🔮 即将推出
🎤 RapMachine
- 🔥 在纯 rap 数据上进行微调,以创建一个专门用于 rap 生成的 AI 系统
- 🏆 预计功能包括 AI rap battle 和通过 rap 进行叙事表达
- 📚 Rap 具有出色的故事讲述和表达能力,具有非凡的应用潜力
🎛️ StemGen
- 🎚️ 在多轨数据上训练的 controlnet-lora,用于生成单独的乐器 stems
- 🎯 以参考音轨和指定的乐器(或乐器参考音频)作为输入
- 🎹 输出与参考音轨互补的乐器 stem,例如为长笛旋律创建钢琴伴奏或为主音吉他添加爵士鼓
🎤 Singing2Accompaniment
- 🔄 StemGen 的逆过程,从单个音轨生成混合的 master 音轨
- 🎵 以人声音轨和指定的风格作为输入,以生成完整的人声伴奏
- 🎸 创建与输入人声互补的完整乐器背景,从而可以轻松地为任何人声录音添加专业的声音伴奏
🖥️ 硬件性能
我们评估了 ACE-Step 在不同硬件设置上的性能,得出了以下吞吐量结果:
| 设备 | RTF (27 steps) | 渲染 1 分钟音频的时间 (27 steps) | RTF (60 steps) | 渲染 1 分钟音频的时间 (60 steps) | | ----------------- | -------------- | ------------------------------- | -------------- | ------------------------------- | | NVIDIA RTX 4090 | 34.48 × | 1.74 s | 15.63 × | 3.84 s | | NVIDIA A100 | 27.27 × | 2.20 s | 12.27 × | 4.89 s | | NVIDIA RTX 3090 | 12.76 × | 4.70 s | 6.48 × | 9.26 s | | MacBook M2 Max | 2.27 × | 26.43 s | 1.03 × | 58.25 s |
我们使用 RTF(Real-Time Factor)来衡量 ACE-Step 的性能。值越高表示生成速度越快。27.27x 表示生成 1 分钟的音乐需要 2.2 秒 (60/27.27)。性能是在单个 GPU 上以 batch size 1 和 27 步测量的。
💻 安装
先决条件
- 确保已安装 Python。您可以从 python.org 下载。
- 您还需要
Conda
(推荐)或venv
。
环境设置
强烈建议使用虚拟环境来管理项目依赖项并避免冲突。选择以下一种方法(Conda 或 venv):
选项 1:使用 Conda
-
使用 Python 3.10 创建名为
ace_step
的环境:conda create -n ace_step python=3.10 -y
-
激活环境:
conda activate ace_step
选项 2:使用 venv
-
确保您使用的是正确的 Python 版本。
-
创建虚拟环境(通常命名为
venv
):python -m venv venv
-
激活环境:
-
在 Windows (cmd.exe) 上:
venv\Scripts\activate.bat
-
在 Windows (PowerShell) 上:
.\venv\Scripts\Activate.ps1
(如果遇到执行策略错误,您可能需要首先运行
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
) -
在 Linux / macOS (bash/zsh) 上:
source venv/bin/activate
-
-
从
requirements.txt
文件安装依赖项:对于 macOS/Linux 用户:
pip install -r requirements.txt
对于 Windows 用户:
# 安装 PyTorch, TorchAudio, 和 TorchVision for Windows # 将 cu126 替换为您的 CUDA 版本 # 使用你的版本替换 torchvision 和 torchaudio pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 # 然后安装其他依赖项 pip install -r requirements.txt
🚀 使用
🔍 基本用法
python app.py
⚙️ 高级用法
python app.py --checkpoint_path /path/to/checkpoint --port 7865 --device_id 0 --share true --bf16 true
如果您使用的是 MacOS,请使用 --bf16 false
以避免错误。
🛠️ 命令行参数
--checkpoint_path
: 模型 checkpoint 的路径(默认:自动下载)--server_name
: Gradio 服务器要绑定到的 IP 地址或主机名(默认:'127.0.0.1')。使用 '0.0.0.0' 使其可以从网络上的其他设备访问。--port
: 运行 Gradio 服务器的端口(默认:7865)--device_id
: 要使用的 GPU 设备 ID(默认:0)--share
: 启用 Gradio 共享链接(默认:False)--bf16
: 使用 bfloat16 精度以实现更快的推理(默认:True)--torch_compile
: 使用torch.compile()
优化模型,加快推理速度(默认:False)。Windows 上不支持
📱 用户界面指南
ACE-Step 界面提供多个选项卡,用于不同的音乐生成和编辑任务:
📝 Text2Music 选项卡
- 📋 输入字段:
- 🏷️ 标签:输入以逗号分隔的描述性标签、流派或场景描述
- 📜 歌词:输入带有结构标签(如 [verse]、[chorus] 和 [bridge])的歌词
- ⏱️ 音频时长:设置生成的音频的期望时长(-1 表示随机)
- ⚙️ 设置:
- 🔧 基本设置:调整推理步数、引导比例和种子
- 🔬 高级设置:微调 scheduler 类型、CFG 类型、ERG 设置等
- 🚀 生成:单击“生成”以根据您的输入创建音乐
🔄 Retake 选项卡
- 🎲 使用不同的种子重新生成具有细微变化的音乐
- 🎚️ 调整方差以控制 retake 与原始版本之间的差异程度
🎨 Repainting 选项卡
- 🖌️ 有选择地重新生成音乐的特定部分
- ⏱️ 指定要重新绘制的部分的开始和结束时间
- 🔍 选择源音频(text2music 输出、上次 repaint 或上传)
✏️ Edit 选项卡
- 🔄 通过更改标签或歌词来修改现有音乐
- 🎛️ 在“only_lyrics”模式(保留旋律)或“remix”模式(更改旋律)之间进行选择
- 🎚️ 调整编辑参数以控制保留多少原始内容
📏 Extend 选项卡
- ➕ 将音乐添加到现有作品的开头或结尾
- 📐 指定左侧和右侧的扩展长度
- 🔍 选择要扩展的源音频
示例
examples/input_params
目录包含可用于生成音乐的示例输入参数。
训练
先决条件
-
按照安装部分中的描述准备环境。
-
如果您计划训练 LoRA 模型,请安装 PEFT 库:
pip install peft
-
以 Huggingface 格式准备您的数据集 (Huggingface Datasets 文档)。数据集应包含以下字段:
keys
: 每个音频样本的唯一标识符tags
: 描述性标签列表(例如,["pop", "rock"]
)norm_lyrics
: 归一化的歌词文本- 可选字段:
speaker_emb_path
: speaker embedding 文件的路径(如果不可用,则使用空字符串)recaption
: 各种格式的附加标签描述
示例数据集条目:
{
"keys": "1ce52937-cd1d-456f-967d-0f1072fcbb58",
"tags": ["pop", "acoustic", "ballad", "romantic", "emotional"],
"speaker_emb_path": "",
"norm_lyrics": "I love you, I love you, I love you",
"recaption": {
"simplified": "pop",
"expanded": "pop, acoustic, ballad, romantic, emotional",
"descriptive": "The sound is soft and gentle, like a tender breeze on a quiet evening. It's soothing and full of longing.",
"use_cases": "Suitable for background music in romantic films or during intimate moments.",
"analysis": "pop, ballad, piano, guitar, slow tempo, romantic, emotional"
}
}
训练参数
常用参数
--dataset_path
: 您的 Huggingface 数据集的路径(必需)--checkpoint_dir
: 包含基本模型 checkpoint 的目录--learning_rate
: 训练的学习率(默认:1e-4)--max_steps
: 最大训练步数(默认:2000000)--precision
: 训练精度,例如“bf16-mixed”(默认)或“fp32”--devices
: 要使用的 GPU 数量(默认:1)--num_nodes
: 要使用的计算节点数(默认:1)--accumulate_grad_batches
: 梯度累积步数(默认:1)--num_workers
: 数据加载 workers 的数量(默认:8)--every_n_train_steps
: checkpoint 保存频率(默认:2000)--every_plot_step
: 生成评估样本的频率(默认:2000)--exp_name
: 用于记录的实验名称(默认:“text2music_train_test”)--logger_dir
: 用于保存日志的目录(默认:“./exps/logs/”)
基础模型训练
使用以下命令训练基础模型:
python trainer.py --dataset_path "path/to/your/dataset" --checkpoint_dir "path/to/base/checkpoint" --exp_name "your_experiment_name"
LoRA 训练
对于 LoRA 训练,您需要提供 LoRA 配置文件:
python trainer.py --dataset_path "path/to/your/dataset" --checkpoint_dir "path/to/base/checkpoint" --lora_config_path "path/to/lora_config.json" --exp_name "your_lora_experiment"
示例 LoRA 配置文件 (lora_config.json):
{
"r": 16,
"lora_alpha": 32,
"target_modules": [
"speaker_embedder",
"linear_q",
"linear_k",
"linear_v",
"to_q",
"to_k",
"to_v",
"to_out.0"
]
}
高级训练选项
--shift
: Flow matching shift 参数(默认:3.0)--gradient_clip_val
: 梯度裁剪值(默认:0.5)--gradient_clip_algorithm
: 梯度裁剪算法(默认:“norm”)--reload_dataloaders_every_n_epochs
: 重新加载 dataloaders 的频率(默认:1)--val_check_interval
: 验证检查间隔(默认:None)
📜 许可 & 免责声明
本项目根据 Apache License 2.0 获得许可
ACE-Step 能够生成各种流派的原创音乐,并在创意制作、教育和娱乐领域得到应用。虽然旨在支持积极和艺术的用例,但我们承认潜在的风险,例如由于风格相似而造成的无意侵犯版权、不恰当地混合文化元素以及滥用生成有害内容。为了确保负责任的使用,我们鼓励用户验证生成作品的原创性,明确披露 AI 的参与,并在调整受保护的风格或材料时获得适当的许可。通过使用 ACE-Step,您同意遵守这些原则并尊重艺术完整性、文化多样性和法律合规性。作者不对模型的任何滥用行为负责,包括但不限于侵犯版权、文化不敏感或生成有害内容。
🙏 致谢
该项目由 ACE Studio 和 StepFun 共同领导。
📖 引用
如果您发现此项目对您的研究有用,请考虑引用:
@misc{gong2025acestep,
title={ACE-Step: A Step Towards Music Generation Foundation Model},
author={Junmin Gong, Wenxiao Zhao, Sen Wang, Shengyuan Xu, Jing Guo},
howpublished={\url{https://github.com/ace-step/ACE-Step}},
year={2025},
note={GitHub repository}
}
关于
ACE-Step: A Step Towards Music Generation Foundation Model
资源
许可
Stars
353 stars
Watchers
12 watching
Forks
18 forks