政安晨的个人主页:************政安晨****************
欢迎 👍点赞✍评论⭐收藏
希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!
目录
[一、HeartMuLa 项目简介](#一、HeartMuLa 项目简介)
[1.1 项目背景](#1.1 项目背景)
[1.2 模型版本对比](#1.2 模型版本对比)
[1.3 技术亮点](#1.3 技术亮点)
[2.1 硬件环境](#2.1 硬件环境)
[2.2 ComfyUI 安装](#2.2 ComfyUI 安装)
[2.3 HeartMuLa 插件安装](#2.3 HeartMuLa 插件安装)
[2.4 模型下载](#2.4 模型下载)
[2.5 最终目录结构](#2.5 最终目录结构)
[2.6 关键环境变量配置](#2.6 关键环境变量配置)
[3.1 歌词文件格式](#3.1 歌词文件格式)
[3.2 标签配置](#3.2 标签配置)
[四、问题一:RoPE Cache 初始化错误](#四、问题一:RoPE Cache 初始化错误)
[4.1 错误现象](#4.1 错误现象)
[4.2 什么是 RoPE?](#4.2 什么是 RoPE?)
[4.3 问题根因分析](#4.3 问题根因分析)
[4.4 解决方案](#4.4 解决方案)
[4.5 验证修复](#4.5 验证修复)
[五、问题二:CUDA Out of Memory](#五、问题二:CUDA Out of Memory)
[5.1 错误现象](#5.1 错误现象)
[5.2 完整的显存占用分析](#5.2 完整的显存占用分析)
[5.3 尝试的优化方案](#5.3 尝试的优化方案)
[方案一:启用 4-bit 量化](#方案一:启用 4-bit 量化)
[方案二:使用 NF4 量化](#方案二:使用 NF4 量化)
[5.4 根本原因分析](#5.4 根本原因分析)
[5.5 替代方案对比](#5.5 替代方案对比)
[六、400M 轻量版测试指南](#六、400M 轻量版测试指南)
[6.1 为什么选择 400M 版本](#6.1 为什么选择 400M 版本)
[6.2 测试脚本](#6.2 测试脚本)
[6.3 预期效果](#6.3 预期效果)
[7.1 使用 accelerate 库进行推理优化](#7.1 使用 accelerate 库进行推理优化)
[7.2 启用梯度检查点(用于微调场景)](#7.2 启用梯度检查点(用于微调场景))
[7.3 推理时清理缓存](#7.3 推理时清理缓存)
[7.4 使用 CPU 卸载](#7.4 使用 CPU 卸载)
[八、常见问题 FAQ](#八、常见问题 FAQ)
[Q1:HeartMuLa 和其他音乐生成模型相比如何?](#Q1:HeartMuLa 和其他音乐生成模型相比如何?)
[9.1 本次测试总结](#9.1 本次测试总结)
[9.2 经验教训](#9.2 经验教训)
[9.3 下一步计划](#9.3 下一步计划)
前言
最近一直在关注 AI 音乐生成领域的开源项目,从 Google 的 MusicLM 到 Stability AI 的 Stable Audio,再到字节跳动的 HeartMuLa,这个领域的发展速度令人惊叹。
HeartMuLa 是字节跳动开源的一个音乐生成模型家族,包含 400M 和 3B 两个版本。其中 3B 版本在音乐质量和风格多样性上表现尤为出色,但硬件门槛也相对较高。
本文记录了在本地 ComfyUI 环境中部署 HeartMuLa 3B 版本的完整过程,包括遇到的两个核心技术问题及其解决方案。虽然最终因为显存限制未能成功生成音乐,但这些问题排查和解决过程具有很强的参考价值。
一、HeartMuLa 项目简介
1.1 项目背景
HeartMuLa 是字节跳动豆包团队开源的音乐生成模型,在 Hugging Face 上已经获得了超过 2.5 万颗星标。项目特点包括:
- 开源友好:提供完整的训练代码和推理脚本
- 多尺度支持:400M 轻量版适合快速测试,3B 高质量版适合生产环境
- 中英双语:原生支持中文歌词生成
- 高质量输出:在音乐性、节奏感和情感表达上表现优异
1.2 模型版本对比
| 版本 | 参数量 | 模型大小 | 推荐显存 | 适用场景 |
|---|---|---|---|---|
| 400M | 4 亿 | ~2GB | 6-8 GB | 快速测试、实时生成 |
| 3B | 30 亿 | ~15GB | 18-24 GB | 高质量音乐创作 |
注意 :3B 版本的
model.safetensors文件约 15GB,加上运行时显存,总共需要约 18-20GB 才能稳定运行。
1.3 技术亮点
HeartMuLa 采用了多项先进技术:
- Transformer-XL 架构:支持长序列建模
- 改进版 RoPE:旋转位置编码优化,支持超长上下文
- 无分类器引导:提升生成质量的可控性
二、环境准备与配置
2.1 硬件环境
| 组件 | 配置 |
|---|---|
| GPU | NVIDIA RTX 4070 Ti SUPER |
| 显存 | 16GB GDDR6X |
| CPU | AMD Ryzen 9 7900X |
| 内存 | 64GB DDR5 |
| 系统 | Ubuntu 22.04 LTS |
2.2 ComfyUI 安装
如果你还没有安装 ComfyUI,可以通过以下方式快速部署:
# 克隆仓库
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# 创建 Conda 环境
conda create -n comfyui python=3.10
conda activate comfyui
# 安装依赖
pip install -r requirements.txt
# 启动测试
python main.py
2.3 HeartMuLa 插件安装
通过 ComfyUI Manager 安装或手动克隆:
cd /home/tongyuzhou/aigc2/ComfyUI/custom_nodes
git clone https://github.com/StarCloud-AI/HeartMuLa_ComfyUI.git
cd HeartMuLa_ComfyUI
pip install -r requirements.txt
2.4 模型下载
HeartMuLa 模型文件约 15GB,建议使用 aria2c 或 wget 下载:
# 创建模型目录
mkdir -p /home/tongyuzhou/aigc2/ComfyUI/models/HeartMuLa
# 下载 3B 版本(以 oss 版本为例)
cd /home/tongyuzhou/aigc2/ComfyUI/models/HeartMuLa
# 使用 Hugging Face CLI
huggingface-cli download HeartFM/HeartMuLa-oss-3B --local-dir ./HeartMuLa-oss-3B
# 或使用 git lfs
git lfs install
git clone https://huggingface.co/HeartFM/HeartMuLa-oss-3B
2.5 最终目录结构
/home/tongyuzhou/aigc2/ComfyUI/
├── models/
│ └── HeartMuLa/
│ ├── HeartMuLa-oss-3B/
│ │ ├── config.json
│ │ ├── model.safetensors (约15GB)
│ │ ├── tokenizer.json
│ │ ├── vocab.txt
│ │ └── special_tokens_map.json
│ └── HeartMuLa-oss-400M/
│ └── ...
├── custom_nodes/
│ └── HeartMuLa_ComfyUI/
│ ├── __init__.py
│ ├── util/
│ │ └── heartlib/
│ │ ├── pipelines/
│ │ │ └── music_generation.py ← 修改的文件
│ │ └── ...
│ └── run_generation_v2.py ← 测试脚本
2.6 关键环境变量配置
为了确保模型加载和推理顺利进行,建议在 run_comfyui.sh 或系统环境变量中添加:
#!/bin/bash
# run_comfyui.sh
# 激活环境
source /home/tongyuzhou/miniconda3/etc/profile.d/conda.sh
conda activate comfyui
# 关键环境变量
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
export PYTHONNOUSERSITE=1
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
export CUDA_MODULE_LOADING=LAZY
# 启动 ComfyUI
cd /home/tongyuzhou/aigc2/ComfyUI
python main.py --listen 0.0.0.0 --port 8189 --auto-launch
环境变量说明:
| 变量 | 作用 |
|---|---|
LD_LIBRARY_PATH |
指定 CUDA 库路径,确保 GPU 加速正常 |
PYTHONNOUSERSITE=1 |
忽略用户目录的 Python 包,避免版本冲突 |
PYTORCH_CUDA_ALLOC_CONF |
优化 CUDA 内存分配策略 |
CUDA_MODULE_LOADING=LAZY |
延迟加载 CUDA 模块,加快启动速度 |
三、歌词与标签准备
3.1 歌词文件格式
创建一个 lyrics.txt 文件,每行代表一个句子或段落:
在这漫长的夜里,我独自前行
星光点点,照亮我心中的路
不怕黑暗,不惧风雨
因为我知道,你一直在我身旁
注意:
- HeartMuLa 使用特殊标记来控制歌词的唱诵方式
- 可以使用
<|lyric|>标签标注需要演唱的部分 - 支持中英文混合歌词
3.2 标签配置
标签用于控制音乐的风格、情绪和乐器:
piano, gentle, warm, acoustic, emotional, ballad, Chinese, melodic
常用标签分类:
| 类别 | 可用标签 |
|---|---|
| 乐器 | piano, guitar, violin, drums, bass, synthesizer |
| 风格 | ballad, rock, jazz, classical, electronic, folk |
| 情绪 | emotional, happy, sad, peaceful, energetic |
| 氛围 | acoustic, ambient, cinematic, dreamy |
| 语言 | Chinese, English, Japanese |
四、问题一:RoPE Cache 初始化错误
4.1 错误现象
首次运行生成脚本时,程序在模型加载阶段崩溃:
RuntimeError: RoPE cache is not built. Please call `forward_with_cache` or `build_rope_cache` first before inference.
错误堆栈(部分):
File "/home/tongyuzhou/aigc2/ComfyUI/custom_nodes/HeartMuLa_ComfyUI/util/heartlib/pipelines/music_generation.py", line 287, in forward
k = k.unsqueeze(2).expand(expand_shape).flatten(1, 2)
RuntimeError: RoPE cache is not built. Please call `forward_with_cache` or `build_rope_cache` first before inference.
4.2 什么是 RoPE?
RoPE(Rotary Position Embedding) 是一种位置编码技术,由苏剑林团队在 2021 年提出。相比传统的绝对位置编码和相对位置编码,RoPE 具有以下优势:
- 外推能力强:可以处理比训练时更长的序列
- 数学性质好:保持注意力机制的数学对称性
- 计算效率高:无需额外的位置参数
HeartMuLa 采用了改进版的 RoPE,支持更长的上下文窗口。
4.3 问题根因分析
通过调试发现,问题出在 load_heartmula() 方法中:
- 模型权重加载到 GPU 后,
pos_embeddings的一部分(theta)留在了 CPU 上 - 没有显式调用
rope_init()来构建缓存 - 导致后续推理时检测到 RoPE cache 未初始化
4.4 解决方案
修改文件:/home/tongyuzhou/aigc2/ComfyUI/custom_nodes/HeartMuLa_ComfyUI/util/heartlib/pipelines/music_generation.py
找到 load_heartmula() 方法,在模型加载完成后添加以下代码:
def load_heartmula(self, model_path: str, is_local: bool = True):
"""
加载 HeartMuLa 模型
"""
# ... 原有的模型加载代码 ...
# ========== 新增:RoPE 缓存初始化 ==========
print("[HeartMuLa] 正在初始化 RoPE 缓存...")
with torch.device(self.device):
for i, layer in enumerate(self.model.backbone.layers):
# 检查是否存在 pos_embeddings
if hasattr(layer.attn, 'pos_embeddings') and hasattr(layer.attn.pos_embeddings, 'rope_init'):
# 检查并修复设备不匹配问题
if hasattr(layer.attn.pos_embeddings, 'theta'):
if layer.attn.pos_embeddings.theta.device != self.device:
print(f" [Layer {i}] 将 theta 从 {layer.attn.pos_embeddings.theta.device} 移动到 {self.device}")
layer.attn.pos_embeddings = layer.attn.pos_embeddings.to(self.device)
# 执行 RoPE 初始化
layer.attn.pos_embeddings.rope_init()
print(f" [Layer {i}] RoPE 缓存初始化完成")
print("[HeartMuLa] RoPE 缓存初始化完成,共初始化 {} 层".format(
len([l for l in self.model.backbone.layers
if hasattr(l.attn, 'pos_embeddings') and hasattr(l.attn.pos_embeddings, 'rope_init')])
))
# ========== 新增代码结束 ==========
4.5 验证修复
修复后运行测试脚本,观察日志输出:
[HeartMuLa] 正在加载模型: /home/tongyuzhou/aigc2/ComfyUI/models/HeartMuLa/HeartMuLa-oss-3B
[HeartMuLa] 正在初始化 RoPE 缓存...
[Layer 0] RoPE 缓存初始化完成
[Layer 1] RoPE 缓存初始化完成
...
[Layer 31] RoPE 缓存初始化完成
[HeartMuLa] RoPE 缓存初始化完成,共初始化 32 层
如果看到类似输出,说明 RoPE 问题已解决。
五、问题二:CUDA Out of Memory
5.1 错误现象
解决 RoPE 问题后,满怀信心地运行测试脚本,结果遇到了更棘手的问题:
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 96.00 MiB.
GPU 0 has a total capacity of 15.59 GiB of which 35.69 MiB is free.
显存详细状态:
| 指标 | 数值 |
|---|---|
| 总显存 | 15.59 GB |
| 已用显存 | 15.23 GB |
| 剩余可用 | 35.69 MB |
| 请求分配 | 96.00 MB |
5.2 完整的显存占用分析
通过 nvidia-smi 监控显存变化:
# 在另一个终端运行
watch -n 1 nvidia-smi
| 阶段 | 显存占用 |
|---|---|
| 空闲状态 | ~200 MB |
| 加载模型权重 | ~14.2 GB |
| 初始化 RoPE | ~14.5 GB |
| 开始推理 | OOM |
5.3 尝试的优化方案
方案一:启用 4-bit 量化
HeartMuLa 支持多种量化方式:
# 加载管道 - 使用 3B 版本 + 4bit 量化
pipe = manager.get_gen_pipeline(
version="3B",
codec_version="oss",
quantize_4bit=True, # 启用 4-bit 量化
quantize_type="fp4" # FP4 量化类型(默认)
)
量化参数说明:
| 参数 | 可选值 | 说明 |
|---|---|---|
quantize_4bit |
True/False |
是否启用 4-bit 量化 |
quantize_type |
"fp4" 或 "nf4" |
量化数据类型 |
compute_type |
"auto" |
计算数据类型 |
结果:仍会 OOM
分析:FP4 量化可以将模型从 15GB 压缩到约 8GB,但推理过程中仍需要额外的 activation 显存,总需求超过 16GB。
方案二:使用 NF4 量化
NF4(Normal Float 4)是一种更激进的量化方式:
pipe = manager.get_gen_pipeline(
version="3B",
codec_version="oss",
quantize_4bit=True,
quantize_type="nf4" # 更激进的量化
)
结果:依然 OOM
方案三:减少音频长度
# 从默认的 60 秒减少到 30 秒
max_audio_length_ms = 30000
结果:无效
分析:音频长度主要影响生成的 token 数量,对模型参数的显存占用影响很小。
方案四:启用梯度检查点
虽然不适用纯推理场景,但如果你想在 3B 模型上进行微调:
# 启用梯度检查点
torch.utils.checkpoint.checkpoint_sequential
5.4 根本原因分析
HeartMuLa 3B 模型的显存占用构成:
| 占用项 | 大小估算 |
|---|---|
| 模型权重(FP16) | 6 GB |
| 模型权重(FP4 量化后) | 3 GB |
| KV Cache | 4-6 GB |
| Activation | 4-6 GB |
| 其他开销 | 1-2 GB |
| 总计 | 12-17 GB |
结论:RTX 4070 Ti SUPER 的 16GB 显存在理想情况下勉强够用,但:
- 16GB 显存有部分被系统和其他进程占用
- CUDA 内存分配有额外开销
- 峰值显存会超过 16GB
5.5 替代方案对比
| 方案 | 成本 | 可行性 | 效果 |
|---|---|---|---|
| 升级到 RTX 4090 (24GB) | ~15000元 | ✅ 高 | 最佳 |
| 使用 Google Colab Pro | ~100元/月 | ✅ 高 | 良好 |
| 使用 Kaggle Notebooks | 免费 | ✅ 中 | 良好 |
| 等待社区优化版本 | 0 | ❌ 不确定 | 待定 |
| 使用 400M 轻量版 | 0 | ✅ 最高 | 可接受 |
六、400M 轻量版测试指南
6.1 为什么选择 400M 版本
HeartMuLa-oss-400M 是一个经过知识蒸馏的轻量版本:
- 模型大小:约 2GB
- 显存需求:6-8GB
- 生成速度:快 3-5 倍
- 音质损失:相对较小
6.2 测试脚本
#!/usr/bin/env python3
"""HeartMuLa 400M 轻量版测试脚本"""
import sys
import os
import torch
import gc
# 路径配置
comfy_root = '/home/tongyuzhou/aigc2/ComfyUI'
custom_nodes_root = '/home/tongyuzhou/aigc2/ComfyUI/custom_nodes/HeartMuLa_ComfyUI'
sys.path.insert(0, comfy_root)
sys.path.insert(0, custom_nodes_root)
# 环境变量
os.environ['PYTHONNOUSERSITE'] = '1'
# 歌词和标签
lyrics = """在这漫长的夜里,我独自前行
星光点点,照亮我心中的路"""
tags = "piano, gentle, warm, acoustic, emotional, Chinese"
def main():
print("=" * 50)
print("HeartMuLa 音乐生成测试 (400M 轻量版)")
print("=" * 50)
# 检查 GPU
print(f"\nGPU: {torch.cuda.get_device_name(0)}")
print(f"显存: {torch.cuda.get_device_properties(0).total_memory / (1024**3):.1f} GB")
print(f"空闲显存: {torch.cuda.get_device_properties(0).total_memory / (1024**3) - torch.cuda.memory_allocated() / (1024**3):.1f} GB")
# 清理显存
gc.collect()
torch.cuda.empty_cache()
# 导入模块
from HeartMuLa_ComfyUI import HeartMuLaModelManager
manager = HeartMuLaModelManager()
# 加载模型 - 使用 400M 版本
print("\n[1/3] 加载模型 (400M 版本)...")
pipe = manager.get_gen_pipeline(
version="400M",
codec_version="oss",
quantize_4bit=False # 400M 不需要量化
)
print("模型加载完成!")
# 生成配置
lyrics_content = lyrics
tags_content = tags
print(f"\n[2/3] 生成配置:")
print(f" 歌词: {lyrics_content[:50]}...")
print(f" 标签: {tags_content}")
# 生成音乐
print("\n[3/3] 开始生成...")
output_path = '/home/tongyuzhou/aigc2/output/heartmula_400m.wav'
try:
pipe(
inputs={"lyrics": lyrics_content, "tags": tags_content},
max_audio_length_ms=30000, # 30 秒
save_path=output_path,
topk=50,
temperature=1.0,
cfg_scale=1.5,
keep_model_loaded=True
)
print(f"\n✅ 生成成功! 文件保存在: {output_path}")
except Exception as e:
print(f"\n❌ 生成失败: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()
6.3 预期效果
运行 400M 版本时,你应该能看到以下输出:
==================================================
HeartMuLa 音乐生成测试 (400M 轻量版)
==================================================
GPU: NVIDIA GeForce RTX 4070 Ti SUPER
显存: 15.6 GB
空闲显存: 14.2 GB
[1/3] 加载模型 (400M 版本)...
[HeartMuLa] 正在加载模型: /home/tongyuzhou/aigc2/ComfyUI/models/HeartMuLa/HeartMuLa-oss-400M
[HeartMuLa] 模型类型: music_gen
[HeartMuLa] 设备: cuda
[HeartMuLa] RoPE 缓存初始化完成,共初始化 24 层
模型加载完成!
[2/3] 生成配置:
歌词: 在这漫长的夜里,我独自前行...
标签: piano, gentle, warm, acoustic, emotional, Chinese
[3/3] 开始生成...
[HeartMuLa] 生成进度: 10% | ████░░░░░░░░░░░░░░░░░░░░░░░░░░░ | 1/10
[HeartMuLa] 生成进度: 20% | ████████░░░░░░░░░░░░░░░░░░░░░░░░ | 2/10
[HeartMuLa] 生成进度: 100% | ██████████████████████████████ | 10/10
[HeartMuLa] 生成完成!
✅ 生成成功! 文件保存在: /home/tongyuzhou/aigc2/output/heartmula_400m.wav
七、显存优化进阶技巧
7.1 使用 accelerate 库进行推理优化
from accelerate import Accelerator
from accelerate.utils import find_executable_batch_size
# 使用 accelerator 自动优化显存
accelerator = Accelerator(
device_placement=True,
mixed_precision="fp16"
)
# 自动批处理
@find_executable_batch_size(starting_batch_size=1)
def generate_batch(batch_size):
...
7.2 启用梯度检查点(用于微调场景)
# 启用梯度检查点以节省显存
torch.utils.checkpoint.set_checkpoint_options(
use_reentrant=False
)
# 在模型中使用
from torch.utils.checkpoint import checkpoint
class HeartMuLaWithCheckpointed(nn.Module):
...
def forward(self, x):
for layer in self.layers:
x = checkpoint(layer, x)
return x
7.3 推理时清理缓存
import torch
import gc
def safe_generate(pipe, inputs, max_attempts=3):
"""安全生成,尝试多次以避免显存峰值"""
for attempt in range(max_attempts):
try:
# 清理显存
gc.collect()
torch.cuda.empty_cache()
# 打印显存状态
memory_allocated = torch.cuda.memory_allocated() / (1024**3)
max_memory = torch.cuda.max_memory_allocated() / (1024**3)
print(f"显存使用: {memory_allocated:.2f} GB (峰值: {max_memory:.2f} GB)")
return pipe(inputs)
except torch.OutOfMemoryError as e:
print(f"尝试 {attempt + 1}/{max_attempts} 失败: OOM")
if attempt == max_attempts - 1:
raise e
# 强制清理
torch.cuda.empty_cache()
torch.cuda.synchronize()
7.4 使用 CPU 卸载
# 启用 CPU 卸载(速度慢但显存占用低)
pipe = manager.get_gen_pipeline(
version="3B",
codec_version="oss",
quantize_4bit=True,
device_map="auto", # 自动分配到多个设备
max_memory={0: "12GB", "cpu": "32GB"}
)
八、常见问题 FAQ
Q1:HeartMuLa 和其他音乐生成模型相比如何?
| 模型 | 参数量 | 特点 | 适用场景 |
|---|---|---|---|
| HeartMuLa 3B | 30 亿 | 音乐质量高、中文支持好 | 高质量创作 |
| HeartMuLa 400M | 4 亿 | 速度快、资源占用低 | 快速原型 |
| MusicGen Small | 3.3 亿 | Meta 开源、生态完善 | 通用音乐 |
| Stable Audio | 15 亿 | 音效强、商业友好 | 商业项目 |
Q2:生成的音乐版权归属?
HeartMuLa 采用 CC-BY-NC-SA 4.0 许可证:
- ✅ 可以用于个人和商业目的
- ✅ 可以修改和衍生
- ❌ 不能用于训练其他模型
- ❌ 需要署名
Q3:生成的音频有电流声怎么办?
- 检查 CUDA 版本兼容性
- 更新 NVIDIA 驱动到最新版本
- 使用
PYTORCH_CUDA_ALLOC_CONF优化内存分配
Q4:如何提高生成质量?
pipe(
inputs={"lyrics": lyrics, "tags": tags},
max_audio_length_ms=60000, # 更长的音频
cfg_scale=2.0, # 提高引导强度 (1.0-3.0)
temperature=0.9, # 降低温度提高稳定性
topk=30, # 减少随机性
seed=42 # 使用固定种子
)
九、总结与反思
9.1 本次测试总结
| 维度 | 结果 | 说明 |
|---|---|---|
| RoPE 初始化 | ✅ 成功修复 | 添加显式初始化代码 |
| 4-bit 量化 | ✅ 成功配置 | FP4 和 NF4 均可用 |
| 3B 模型推理 | ❌ 显存不足 | 16GB < 18GB 最低需求 |
| 400M 模型 | ⏳ 未测试 | 理论可行 |
9.2 经验教训
- 模型选择要匹配硬件:3B 模型需要 24GB 显存,16GB 显卡应选择 400M 版本
- 量化不是万能的:4-bit 量化能压缩模型,但无法解决推理时的 activation 显存需求
- 环境配置很关键 :
PYTHONNOUSERSITE=1可以避免很多奇怪的包冲突问题 - 详细日志很重要:通过打印日志可以快速定位问题位置
9.3 下一步计划
- 测试 400M 轻量版本
- 在云端(Colab/Kaggle)测试 3B 版本
- 尝试模型微调
- 探索与其他工具(如 GPT-SoVITS)的联动
