ACE-Step是开源音乐生成基础模型,通过整体架构设计克服了现有方法的局限性。基于LLM的模型(如Yue、SongGen)在歌词对齐方面表现出色,但推理速度慢且存在结构性瑕疵。扩散模型(如DiffRhythm)虽然能够快速合成,但常常缺乏长期结构连贯性。ACE-Step通过结合基于扩散的生成、Sana的深度压缩自编码器(DCAE)和轻量级线性Transformer来解决这些已存在的问题,进一步利用MERT和m-hubert在训练期间对齐语义表示(REPA),实现快速收敛。
ACE-Step在A100 GPU上仅需20秒就能合成长达4分钟的音乐,比基于LLM的基线快15倍,同时在旋律、和声和节奏指标上实现更优越的音乐连贯性和歌词对齐。ACE-Step保留了细粒度的声学细节,支持高级控制机制,如声音克隆、歌词编辑、混音和曲目生成(例如,歌词转人声、歌唱转伴奏)。ACE-Step不仅仅构建另一个端到端的文本到音乐管道,而是希望建立一个音乐AI的基础模型:一个快速、通用、高效且灵活的架构,便于在其上训练子任务,为开发强大的工具铺平了道路,可以无缝集成到音乐艺术家、制作人和内容创作者的创意工作流程中。
基线质量
支持所有主流音乐风格,包括多种描述格式,如短标签、描述性文本或使用场景。
多种语言支持
支持19种语言,前10种表现良好的语言包括:英语、中文、俄语、西班牙语、日语、德语、法语、葡萄牙语、意大利语、韩语。
乐器风格
支持不同流派和风格的器乐生成,能够产生逼真的器乐曲目,每种乐器都有适当的音色和表现力,能生成复杂的多乐器编排,同时保持音乐连贯性。
人声技术
能够渲染各种人声风格和技术,支持不同的发声表达,包括各种演唱技巧和风格。
变体生成
通过训练免费的推理时优化技术实现,使用flow-matching模型生成初始噪声,然后使用trigFlow的噪声公式添加额外的高斯噪声,通过调整原始初始噪声和新高斯噪声之间的混合比例来控制变异程度。
重绘
通过在ODE过程中向目标音频输入添加噪声并应用掩码约束来实现,当输入条件与原始生成发生变化时,只能修改特定方面,同时保留其余部分,可以与变体生成技术结合使用,在风格、歌词或人声方面创建局部变化。
歌词编辑
创新性地应用流动编辑技术,实现局部歌词修改,同时保留旋律、人声和伴奏,可与生成内容和上传的音频一起使用,大大增强了创作可能性。目前限制:一次只能修改小段歌词以避免失真,但可以依次应用多次编辑。
歌词转人声(LoRA)
基于纯人声数据微调的LoRA,允许直接从歌词生成人声样本,提供多种实际应用,如人声演示、引导曲目、歌曲创作辅助和人声编排实验,提供快速测试歌词演唱效果的方法,帮助词曲作者更快迭代。
文本转样本(LoRA)
类似于歌词转人声,在纯乐器和样本数据上微调,能够从文本描述生成概念性音乐制作样本,用于快速创建乐器循环、音效和音乐元素。
RapMachine
在纯说唱数据上微调,创建专门用于说唱生成的AI系统,预期功能包括AI说唱对战和通过说唱进行叙事表达。
StemGen
在多轨数据上训练的controlnet-lora,用于生成单个乐器轨道,输入参考曲目和指定乐器(或乐器参考音频),输出补充参考曲目的乐器轨道。
歌唱转伴奏
StemGen的逆过程,从单个声乐轨道生成混合的主轨道,输入声乐轨道和指定风格,生成完整的声乐伴奏。
在不同硬件设置上评估了ACE-Step,得出以下数据:
设备 | 27步 | 60步 |
---|---|---|
NVIDIA A100 | 27.27倍 | 12.27倍 |
NVIDIA RTX 4090 | 34.48倍 | 15.63倍 |
NVIDIA RTX 3090 | 12.76倍 | 6.48倍 |
MacBook M2 Max | 2.27倍 | 1.03倍 |
使用RTF(实时因子)来衡量ACE-Step的性能,较高的值表示更快的生成速度。27.27倍意味着生成1分钟的音乐需要2.2秒(60/27.27),性能是在单个GPU上以批量大小1和27步测量的。
先安装Python,可以从python.org下载,还需要Conda(推荐)或venv。
强烈建议使用虚拟环境管理项目依赖项,避免冲突。选择以下方法之一(Conda或venv):
选项1:使用Conda
创建名为ace_step的环境,Python版本为3.10:
conda create -n ace_step python=3.10 -y
激活环境:
conda activate ace_step
选项2:使用venv 创建虚拟环境(通常命名为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用户:
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
: 模型检查点路径(默认:自动下载)
• --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界面提供多个选项卡,用于不同的音乐生成和编辑任务:
文本转音乐选项卡 输入字段:
• 标签:输入描述性标签、流派或场景描述,用逗号分隔
• 歌词:输入带有结构标签(如[verse]、[chorus]和[bridge])的歌词
• 音频时长:设置生成音频的期望时长(-1表示随机)
设置:
• 基本设置:调整推理步骤、引导比例和种子
• 高级设置:微调度器类型、CFG类型、ERG设置等
• 生成:点击“生成”根据输入创建音乐
重做选项卡:
• 使用不同种子重新生成略有变化的音乐
• 调整方差以控制重做与原始音乐的不同程度
重绘选项卡:
• 选择性地重新生成音乐的特定部分
• 指定要重绘部分的开始和结束时间
• 选择源音频(text2music输出、上次重绘或上传)
编辑选项卡:
• 通过更改标签或歌词修改现有音乐
• 选择“仅歌词”模式(保留旋律)或“混音”模式(改变旋律)
• 调整编辑参数以控制保留原始内容的多少
扩展选项卡:
• 在现有作品的开头或结尾添加音乐
• 指定左右扩展长度
• 选择要扩展的源音频
按照安装部分准备环境,如果计划训练LoRA模型,安装PEFT库:
pip install peft
数据集示例
{
"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
: 包含基础模型检查点的目录
• --learning_rate
: 训练学习率(默认:1e-4)
• --max_steps
: 最大训练步骤数(默认:2000000)
• --precision
: 训练精度,例如"bf16-mixed"(默认)或"fp32"
• --devices
: 使用的GPU数量(默认:1)
• --num_nodes
: 使用的计算节点数量(默认:1)
• --accumulate_grad_batches
: 梯度累积步骤(默认:1)
• --num_workers
: 数据加载工作线程数(默认:8)
• --every_n_train_steps
: 检查点保存频率(默认: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
: 流匹配移位参数(默认:3.0)
• --gradient_clip_val
: 梯度裁剪值(默认:0.5)
• --gradient_clip_algorithm
: 梯度裁剪算法(默认:"norm")
• --reload_dataloaders_every_n_epochs
: 重新加载数据加载器的频率(默认:1)
• --val_check_interval
: 验证检查间隔(默认:None)