
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载Bagpiper-TTS 是 ESPnet 中由自然语言指令natural-language instructions控制的语音合成TTS模型。本指南以egs2/bagpiper_tts/speechlm1这一仅训练training-only配方为核心完整讲解其基于对话dialogue数据的监督微调Supervised Fine-tuningSFT流程从输入数据格式、训练配置逐项解读、DCP 权重初始化与断点续训到多卡/多机启动与 WB 日志接入。读完本文你将能够基于已准备好的 SpeechLM 数据清单JSON manifest与长度统计length statistics用torchrun直接启动一次可复现的 Bagpiper-TTS 微调实验。配方概览一个仅训练的 SpeechLM 配方与传统的 ESPnet recipe包含local/data.sh、db.sh、--stage分阶段流水线、cmd.sh/run.pl集群调度不同bagpiper_tts/speechlm1属于 SpeechLM 模板 中定义的training-only recipes。模板文档明确说明这类配方只包含run.sh、conf/、README 以及指向共享train.sh和utils的符号链接输入数据数据集清单与长度统计需提前准备好因此不再需要数据准备脚本与集群调度文件。从目录结构可以印证这一点egs2/bagpiper_tts/speechlm1/run.sh薄封装脚本固定默认--train-config conf/train.yaml、--output-dir exp/sft、--wandb-project bagpiper-tts其余参数原样透传给train.shegs2/bagpiper_tts/speechlm1/train.sh真正的启动器内部直接调用python -m torch.distributed.run运行espnet2.speechlm.bin.trainegs2/bagpiper_tts/speechlm1/conf/train.yamlSFT 默认训练配置。train.sh与模板中另一驱动speechlm.sh入口为espnet2.bin.speechlm_train面向不同的训练接口前者面向基于 TorchTitan 的新训练器需要已准备的清单 长度统计后者用于 LibriTTS、mini_an4 等传统流水线配方。本配方使用前者。环境准备与输入数据环境安装配方文档要求使用 SpeechLM 安装指南 描述的环境。核心安装步骤在仓库根目录执行安装 PyTorch用 PyTorch 官方 installer 安装torch、torchaudio、torchvision例如 CUDA 12.8 wheelspip install torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu128安装 SpeechLM 依赖pip install -e .[speechlm]安装 CUDA 扩展causal-conv1dpip install --no-build-isolation causal-conv1d1.6.2与 FlashAttention。本配方默认在 Hopper GPUH100/H800上使用FlashAttention-3pip install --no-build-isolation githttps://github.com/Dao-AILab/flash-attention.git#subdirectoryhopper注意本配方是 training-only没有path.sh来激活tools/venv。你需要先自行激活环境或通过--python /path/to/env/bin/python指定解释器。train.sh会自动把仓库根目录加入PYTHONPATH并使用激活的 Python 环境。输入数据SpeechLM 清单与长度统计Bagpiper-TTS 的 SFT 数据是对话dialogue格式的训练样本每个样本包含一条文本请求用户指令例如以高兴的语气朗读这句话一条助手计划/回复assistant plan丰富的音频描述rich caption例如音色、情感、语速等自然语言描述目标音频。训练器直接消费两种准备好的输入不直接读取 Hugging Face Hub 的 Parquet 发布版SpeechLM 数据集 JSON manifest包含data_entry与samples字段指向对应的 text / audio / dialogue 文件路径长度统计文件stats_task_name.jsonl每行一条{example_id: length}记录用于 packed batching 时的长度预算。数据准备不属于本配方职责。训练时通过空格分隔的task:name:dataset.json[:factor]说明符传入数据集。对于对话任务task为dialogue其他支持的任务类型还有text_to_audio、audio_to_text、text_only更多细节见 Bagpiper 配方。若数据集已在ESPNET_DATASET_REGISTRY注册也可改用--train-registered-specifier/--valid-registered-specifier格式为task:name[:factor]。从 dialogue 数据加载器实现 可以看到其对话消息格式每条消息为三元组(role, modality, content)其中role必须是{user, assistant, system}之一modality支持text、audio、image、video、toolcallaudio 模态的 content 为(audio_array, sample_rate)且音频数组形状为[num_channels, num_samples]。这从源码层面印证了对话清单中各 turn 的结构化要求。训练配置逐项解读默认 conf/train.yaml 训练解码器与多模态嵌入/适配器adapter用于指令驱动的语音合成。配方文档明确指出音频编码器Qwen3-Omni audio encoder与编解码器Xcodec全程冻结只有 decoder、扩展后的多模态嵌入、输出头output head、流嵌入stream embeddings、音频适配器和最终 norm 可训练。配置由几个区块构成1.multimodal_io多模态输入/输出键值说明text.tokenizer_nameQwen/Qwen3-8B-Base文本 tokenizer与解码器同源discrete_audio.codec_choiceXcodec离散音频编解码器discrete_audio.codec_hf_model_taghf-audio/xcodec-hubert-generalXcodec 的 Hugging Face 模型标签discrete_audio.ssl_choice/ssl_hf_model_tagnull未使用 SSL 前端discrete_audio.delay_interleavetrue延迟交错离散音频流discrete_audio.stream_weights8 个0.1258 个离散流的等权重混合continuous_audio.encoder_choicehuggingface连续音频编码器continuous_audio.encoder_hf_model_tagQwen/Qwen3-Omni-30B-A3B-InstructQwen3-Omni 音频编码器continuous_audio.attn_implementationflash_attention_3Hopper GPU 上的注意力后端continuous_audio.dtypebfloat16连续音频编码精度stream_weights的 8 个0.125与 Xcodec 的 8 个码本流codebook stream一一对应等权重混合即均匀聚合各码本流的损失/表示。2.model解码器键值说明model_choiceparallel使用并行parallel模型结构model_hf_tagQwen/Qwen3-8B-Base解码器初始权重来自 Qwen3-8B-Basemodel_conf.attn_implementationflash_attention_3与音频编码器保持一致model_conf.dtypebfloat16模型精度3.preprocessor前处理键值说明audio_inputcontinuous_audio输入音频以连续表示进入模型audio_outputdiscrete_audio输出目标是离散音频 tokenXcodecloss_regionassistant只在 assistant turn 上计算损失audio_cfg0.1音频相关配置系数SFT 专用调参项对比 SFT 变体配置 中的0.054.data_loading数据加载键值说明batchfy_methodpack按 token 预算打包packing样本batch_size8192每个 GPU 每个 micro-batch 的 packed token 预算num_workers6数据加载进程数5.trainer训练器TorchTitan键值说明typetitan使用 TorchTitan 训练器FSDP2 数据并行freeze_parammultimodal_io_dict.discrete_audio、multimodal_io_dict.continuous_audio冻结编解码器与音频编码器max_step50000最大训练步数save_interval2500每 2500 步保存一个 checkpointlog_interval1每步打印日志gradient_accumulation_steps1梯度累积步数优化器AdamWlr: 1.0e-4峰值学习率、beta1: 0.9、beta2: 0.95、eps: 1.0e-8、weight_decay: 3.0e-7。学习率调度warmup_steps: 20002000 步线性预热、decay_end_step: 50000、min_lr_ratio: 0.0——预热后余弦衰减到零。titan_configTorchTitan/FSDP2 相关键值说明parallel_strategyqwen3预置的并行策略mixed_precision_parambfloat16参数混合精度mixed_precision_reducefloat32归约reduce使用 float32optimizer_storage_dtypefloat32优化器状态存储为 float32gradient_clipping1.0梯度裁剪范数activation_checkpoint1.0激活检查点比例compilefalse不做 torch.compilereshard_after_forwardtrue前向后重新分片dp_shard-1分片数据并行度跟随启动器选择的 GPU 数dp_replicate1复制数据并行度pp_degree1流水线并行度为 1Titan 训练器在 espnet2/speechlm/trainer/titan_trainer.py 中实现使用torch.distributed.checkpointDCP保存/加载状态并通过init_parallel_dims与parallel_strategies初始化并行维度——这正是后续--resume-path需要 DCP 目录的根本原因。重要提醒配方文档原话默认配置中的注意力后端、每 GPU token 预算与训练计划是为你的硬件和数据准备的起点设置starting settings并非原始实验的 step schedule。在不同 GPU 上必须同时调整model.model_conf.attn_implementation与multimodal_io.continuous_audio.attn_implementation两个注意力后端例如改用 FlashAttention-2 等受支持的实现。启动 SFT 训练命令行实操在egs2/bagpiper_tts/speechlm1目录下运行使用已准备好的dialogue数据集./run.sh --ngpu 8 \ --train-config conf/train.yaml --output-dir exp/sft \ --resume-path ../../bagpiper/speechlm1/exp/pretrain/checkpoints/step_600000 \ --stats-dir /path/to/tts_stats \ --train-unregistered-specifier dialogue:tts_train:/path/to/tts_train.json \ --valid-unregistered-specifier dialogue:tts_valid:/path/to/tts_valid.json各参数含义./run.sh --help会列出全部共享启动选项见 train.sh参数必填说明--train-config是训练 YAML必须存在--output-dir是checkpoint 与日志目录默认exp/trainrun.sh默认exp/sft--stats-dir是准备好的stats_task_name.jsonl目录--train-unregistered-specifier/--train-registered-specifier二选一训练数据说明符--valid-unregistered-specifier/--valid-registered-specifier二选一验证数据说明符--resume-path否权重初始化用的 DCP 目录见下节--ngpu否每节点 GPU 数默认 1必须是正整数--num-nodes/--node-rank/--master-addr/--master-port否多节点启动参数--save-loader-state否保存 batch 分配状态默认true--wandb-mode/--wandb-project/--wandb-name否WB 日志默认disabledproject 默认speechlmrun.sh默认 project 为bagpiper-tts--python否Python 解释器路径默认python启动器内部逻辑源码确认train.sh单节点时使用python -m torch.distributed.run --nproc_per_node ${ngpu} --standalone多节点时要求提供--master-addr并加上--nnodes、--node_rank、--master_addr、--master_port通过--module espnet2.speechlm.bin.train运行训练入口设置PYTHONHASHSEED0保证各 rank 上数据集重采样依赖 Python hash的一致性所有相对路径均相对于配方目录解析。从预训练 checkpoint 初始化--resume-path--resume-path必须指向Bagpiper 预训练的 DCPPyTorch Distributed Checkpoint目录。它的语义是只加载模型权重然后在新的输出目录中重新初始化优化器、调度器和步计数器step_600000是默认 Bagpiper 预训练计划的最终 checkpoint即egs2/bagpiper/speechlm1/README.md中exp/pretrain/checkpoints/step_600000如果你修改了预训练计划请改用你选择的 checkpoint。train.sh对--resume-path有前置校验必须是包含.metadata文件的 DCP 目录否则直接报错退出对应 train.sh 中[[ -d ${resume_path} -f ${resume_path}/.metadata ]]的检查。当前限制配方文档原话现有的 Titan 训练器无法直接加载 Hub 上发布的base.pt或model.pt文件用于训练初始化。因此 SFT 必须从一个 DCP 格式的预训练 checkpoint 开始。断点续训省略 --resume-path要续训一个被打断的 SFT 运行只需用相同的数据、配置和输出目录重跑上述命令但省略--resume-path。此时训练器会从output_dir/checkpoints/step_*中最新 checkpoint 恢复模型、优化器、调度器和步数。train.sh默认开启--save-loader-state true会一并保存 batch 分配状态保证续训时数据加载的连续性。多节点训练多节点时在每个已分配节点上运行相同的命令并加上--num-nodes N --node-rank R --master-addr HOST --master-port PORT注意--ngpu是每节点的 GPU 数所有节点使用相同数据与共享输出目录--node-rank必须小于--num-nodestrain.sh 中也有此校验。节点需先用你的调度器scheduler分配好再启动训练。阶段衔接为什么是 step_600000Bagpiper-TTS 的 SFT 属于 Bagpiper 配方 定义的三阶段训练流水线的最后一环阶段配置用途初始化来源Warmupconf/train.yamlBagpiper 侧默认对齐扩展嵌入与音频适配器冻结解码器Qwen3-8B-BasePretrainingconf/tuning/train_pretrain.yaml学习联合音频/文本模型Warmup DCP checkpointstep_10000SFTconf/tuning/train_sft.yaml及本配方的conf/train.yaml面向指令对话特化模型Pretraining DCP checkpointstep_600000三个阶段对比如下来自 Bagpiper 配方 的表格conf/train.yaml对应 Bagpiper 的 SFT 阶段本配方默认配置在 Bagpiper SFT 配置基础上做了微调阶段max_step峰值 LRLR warmup 步数梯度累积min_lr_ratioWarmup10,0005e-410041.0Pretraining600,0001e-45,00040.3SFT50,0001e-51,00010.1可以对照 Bagpiper 的 SFT 配置 与本配方的默认 conf/train.yaml两者同为max_step: 50000、累积 1、packed 预算 8192但 Bagpiper 侧 SFT 的峰值 LR 为 1e-5warmup 1000 步、min_lr_ratio: 0.1、audio_cfg: 0.05而本配方默认使用 1e-4warmup 2000 步、衰减到 0、audio_cfg: 0.1——如配方文档所述这些是起始设置请按硬件与数据自行调整。关于有效批次预算所有阶段每个 GPU 每个 micro-batch 的 packed token 预算均为 8192。在相同 GPU 数下SFT 的梯度累积为 1其有效批次预算只有 warmup/pretraining累积 4的四分之一。用 8 GPU 估算预训练预算8192 × 4 × 8 262,144tokens/优化器步600,000 步约为 1573 亿 token slots实际 packed 长度会有波动。该配方目前没有实测运行时间测量出time/iter秒后可按max_step × seconds_per_step × GPU_count / 86400估算 GPU 天数另加验证与 checkpoint 开销。常见问题与注意事项--resume-path校验失败train.sh要求该路径必须是含.metadata的 DCP 目录。请检查路径是否指向exp/pretrain/checkpoints/step_600000这类 DCP 目录而非 Hub 的.pt文件。base.pt/model.pt无法用于训练初始化当前 Titan 训练器只支持 DCP 格式如需推理才使用 Bagpiper 配方 中描述的 vLLM 转换流程将发布的.pt文件转换为 vLLM 模型目录后通过 OpenAI 兼容 API 提供服务。注意力后端不匹配若在非 Hopper GPU 上运行务必同时修改model.model_conf.attn_implementation与multimodal_io.continuous_audio.attn_implementation为你的 GPU 支持的实现否则可能无法运行或性能不佳。环境激活本配方没有path.sh先激活 SpeechLM 环境或使用--python指定解释器所有相对路径从配方目录解析PYTHONPATH由train.sh自动注入仓库根目录。数据一致性训练与验证需使用不同的名称区分数据集说明符支持[:factor]后缀做重采样因子PYTHONHASHSEED0保证各 rank 数据重采样一致。延伸阅读Bagpiper 配方预训练与推理三阶段流水线的 warmup/pretraining 细节、推理与 vLLM 服务流程SpeechLM 训练模板speechlm.sh与train.sh两种驱动的差异SpeechLM 安装指南环境与 CUDA 扩展安装Titan 训练器实现FSDP2 数据并行与 DCP 保存/加载对话数据加载器dialogue 清单消息格式role/modality/content 三元组校验逻辑赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐wav2vec 无监督语音预训练实战指南基于 fairseq 的模型训练、加载与特征提取wav2vec 无监督语音预训练实战指南基于 fairseq 的模型训练、加载与特征提取 导读 本文基于 infoxlm 仓库内置的 fairseq 框架人工智能大模型预训练深度学习NLP计算机视觉多模态语音音频微调ART 框架 SFT 监督微调实战基于 JSONL 数据集训练与教师模型蒸馏完整指南ART 框架 SFT 监督微调实战基于 JSONL 数据集训练与教师模型蒸馏完整指南 导读 本指南完整讲解 ARTAgent Reinforcement TAI Agent强化学习大模型模型微调LLMOpsOpenAssistant 监督数据集实践指南指令遵循数据与对话数据的选型、加工与训练接入OpenAssistant 监督数据集实践指南指令遵循数据与对话数据的选型、加工与训练接入 监督数据Supervised Data是 OpenAssist人工智能大模型强化学习微调数据标注后端前端上一篇Windows虚拟光驱终极指南用WinCDEmu轻松挂载ISO文件下一篇AWS Solutions Constructs 实战5个企业级云架构模式案例详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考