跳到主要内容

Heartmula

设置并运行 HeartMuLa,这是一个开源音乐生成模型家族(类似 Suno)。支持从歌词和标签生成完整歌曲,并提供多语言支持。

技能元数据

来源捆绑(默认安装)
路径skills/media/heartmula
版本1.0.0
标签music, audio, generation, ai, heartmula, heartcodec, lyrics, songs
相关技能audiocraft

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理所看到的指令。

HeartMuLa - 开源音乐生成

概述

HeartMuLa 是一个开源音乐基础模型家族(Apache-2.0 许可证),可根据歌词和标签生成音乐。作为 Suno 的开源替代品,其性能相当。包括:

  • HeartMuLa - 音乐语言模型(3B/7B),用于从歌词 + 标签生成音乐
  • HeartCodec - 12.5Hz 音乐编解码器,用于高保真音频重建
  • HeartTranscriptor - 基于 Whisper 的歌词转录工具
  • HeartCLAP - 音频-文本对齐模型

何时使用

  • 用户希望从文本描述生成音乐/歌曲
  • 用户希望使用 Suno 的开源替代方案
  • 用户希望进行本地/离线音乐生成
  • 用户询问有关 HeartMuLa、heartlib 或 AI 音乐生成的问题

硬件要求

  • 最低配置:8GB 显存,配合 --lazy_load true(按顺序加载/卸载模型)
  • 推荐配置:16GB+ 显存,以实现舒适的单 GPU 使用体验
  • 多 GPU:使用 --mula_device cuda:0 --codec_device cuda:1 跨 GPU 分配负载
  • 启用 lazy_load 的 3B 模型峰值显存占用约为 ~6.2GB

安装步骤

1. 克隆仓库

cd ~/  # or desired directory
git clone https://github.com/HeartMuLa/heartlib.git
cd heartlib

2. 创建虚拟环境(需要 Python 3.10)

uv venv --python 3.10 .venv
. .venv/bin/activate
uv pip install -e .

3. 修复依赖兼容性问题

重要提示:截至 2026 年 2 月,锁定的依赖项与较新的包存在冲突。请应用以下修复:

# Upgrade datasets (old version incompatible with current pyarrow)
uv pip install --upgrade datasets

# Upgrade transformers (needed for huggingface-hub 1.x compatibility)
uv pip install --upgrade transformers

4. 修补源代码(transformers 5.x 必需)

补丁 1 - RoPE 缓存修复,位于 src/heartlib/heartmula/modeling_heartmula.py

HeartMuLa 类的 setup_caches 方法中,在 reset_caches 的 try/except 块之后以及 with device: 块之前,添加 RoPE 重新初始化代码:

# Re-initialize RoPE caches that were skipped during meta-device loading
from torchtune.models.llama3_1._position_embeddings import Llama3ScaledRoPE
for module in self.modules():
if isinstance(module, Llama3ScaledRoPE) and not module.is_cache_built:
module.rope_init()
module.to(device)

原因from_pretrained 首先在 meta 设备上创建模型;Llama3ScaledRoPE.rope_init() 会跳过在 meta 张量上构建缓存,且在权重加载到真实设备后不再重建缓存。

补丁 2 - HeartCodec 加载修复,位于 src/heartlib/pipelines/music_generation.py

向所有 HeartCodec.from_pretrained() 调用添加 ignore_mismatched_sizes=True(共有两处:__init__ 中的 eager load 和 codec 属性中的 lazy load)。

原因:VQ 码本 initted 缓冲区在检查点中的形状为 [1],而在模型中为 []。数据相同,只是标量与 0 维张量的区别。可以安全忽略。

5. 下载模型检查点

cd heartlib  # project root
hf download --local-dir './ckpt' 'HeartMuLa/HeartMuLaGen'
hf download --local-dir './ckpt/HeartMuLa-oss-3B' 'HeartMuLa/HeartMuLa-oss-3B-happy-new-year'
hf download --local-dir './ckpt/HeartCodec-oss' 'HeartMuLa/HeartCodec-oss-20260123'

所有 3 个模型可以并行下载。总大小为几 GB。

GPU / CUDA

HeartMuLa 默认使用 CUDA(--mula_device cuda --codec_device cuda)。如果用户拥有安装了 PyTorch CUDA 支持的 NVIDIA GPU,则无需额外设置。

  • 安装的 torch==2.4.1 开箱即支持 CUDA 12.1
  • torchtune 可能报告版本为 0.4.0+cpu — 这仅是包元数据,它仍然通过 PyTorch 使用 CUDA
  • 要验证是否正在使用 GPU,请在输出中查找 "CUDA memory" 行(例如 "CUDA memory before unloading: 6.20 GB")
  • 没有 GPU? 你可以使用 --mula_device cpu --codec_device cpu 在 CPU 上运行,但预计生成速度会极慢(单首歌曲可能需要 30-60 分钟以上,而 GPU 上约为 ~4 分钟)。CPU 模式还需要大量内存(空闲内存需 ~12GB+)。如果用户没有 NVIDIA GPU,建议改用云 GPU 服务(如 Google Colab 免费层级的 T4、Lambda Labs 等)或使用在线演示 https://heartmula.github.io/。

用法

基本生成

cd heartlib
. .venv/bin/activate
python ./examples/run_music_generation.py \
--model_path=./ckpt \
--version="3B" \
--lyrics="./assets/lyrics.txt" \
--tags="./assets/tags.txt" \
--save_path="./assets/output.mp3" \
--lazy_load true

输入格式化

标签(逗号分隔,无空格):

piano,happy,wedding,synthesizer,romantic

rock,energetic,guitar,drums,male-vocal

歌词(使用括号括起的结构标签):

[Intro]

[Verse]
Your lyrics here...

[Chorus]
Chorus lyrics...

[Bridge]
Bridge lyrics...

[Outro]

关键参数

参数默认值描述
--max_audio_length_ms240000最大长度(毫秒)(240s = 4 分钟)
--topk50Top-k 采样
--temperature1.0采样温度
--cfg_scale1.5分类器自由引导尺度
--lazy_loadfalse按需加载/卸载模型(节省显存)
--mula_dtypebfloat16HeartMuLa 的数据类型(推荐 bf16)
--codec_dtypefloat32HeartCodec 的数据类型(为保证质量推荐 fp32)

性能

  • RTF(实时因子)≈ 1.0 — 生成一首 4 分钟的歌曲大约需要 4 分钟
  • 输出:MP3,48kHz 立体声,128kbps

陷阱

  1. HeartCodec 切勿使用 bf16 — 会降低音频质量。请使用 fp32(默认)。
  2. 标签可能被忽略 — 已知问题 (#90)。歌词往往占主导地位;请尝试调整标签顺序。
  3. macOS 上不可用 Triton — GPU 加速仅支持 Linux/CUDA。
  4. 上游问题中报告了 RTX 5080 不兼容
  5. 依赖项版本锁定冲突需要上述的手动升级和补丁。