尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PaddleSpeech 并行波GAN声码器训练基准实测:pwgan Benchmark 脚本流程、参数与性能指标全解析

发布时间:2026/9/25 16:19:17

资讯中心
01
ARTICLE

PaddleSpeech 并行波GAN声码器训练基准实测:pwgan Benchmark 脚本流程、参数与性能指标全解析

PaddleSpeech 并行波GAN声码器训练基准实测:pwgan Benchmark 脚本流程、参数与性能指标全解析
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载本文以仓库中tests/benchmark/pwgan/目录下的基准测试文档与配套脚本为主体完整拆解 PaddleSpeech 中 Parallel WaveGANpwgan声码器训练基准的执行方式从./run_all.sh的一键入口到依赖安装、数据集下载预处理、单卡/多卡批量压测以及训练日志中avg_ips性能指标的产生与解析机制帮助读者理解如何在标准环境下复现并解读 pwgan 的训练性能数据。基准测试的定位与整体执行方式tests/benchmark/pwgan/是 PaddleSpeech 针对 Parallel WaveGAN 声码器训练性能提供的标准基准目录原始文档见 pwgan 基准说明。按该文档描述执行方式非常简单./run_all.sh即可运行。文档给出的执行逻辑分为五步cd到../../../即项目工作根目录安装paddlespeech/t2s所需依赖从 BOS 下载数据集并解压缩预处理数据集为训练 pwg 所需格式保存到dump文件夹底下按照不同的参数执行run_benchmark.sh脚本。这五步恰好对应 run_all.sh 中stage0到stop_stage100控制的四个阶段块。脚本顶部有两处关键注释值得注意LOG_PATH_INDEX_DIR环境变量可由 benchmark 系统指定不需要跑 profile 时它指向存放 speed 结果的目录脚本默认回退到$(pwd)脚本提供了一个“可稳定复现性能”的执行路径默认在标准 docker 环境内运行Python 3.7 paddle 2.1.2对应镜像paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7。因此在自行复现前需要先明确 GPU 数量、CUDA/cuDNN 版本与 paddle 版本是否与上述基线一致否则测得的吞吐数据不可直接比较。run_all.sh 分阶段流程详解阶段 0依赖安装stage0 stop_stage100 sed -i /set\ -xe/d run_benchmark.sh cd ../../../ if [ ${stage} -le 0 ] [ ${stop_stage} -ge 0 ]; then sudo apt-get install libsndfile1 pip install -e . pushd examples/csmsc/voc1 source path.sh popd fi这一阶段做三件事安装音频底层依赖libsndfile1以可编辑模式安装当前仓库pip install -e .进入 examples/csmsc/voc1 并source path.sh加载该 TTS 声码器示例所需的 Python 包环境。另外注意sed -i /set\ -xe/d run_benchmark.sh这一行它会在正式执行前把run_benchmark.sh中的set -xe调试行删除避免批量压测时任何一条命令的非零返回导致整个基准中断。这是一个面向自动化批量执行的工程化处理。阶段 1数据集下载wget https://weixinxcxdb.oss-cn-beijing.aliyuncs.com/gwYinPinKu/BZNSYP.rar mkdir BZNSYP unrar x BZNSYP.rar BZNSYP wget https://paddlespeech.cdn.bcebos.com/Parakeet/benchmark/durations.txt基准使用 BZNSYP 中文语音数据集注意脚本中的下载 URL 与解压缩目录均为仓库脚本中的原始配置实际执行时依赖对应镜像源可用。同时下载durations.txt作为切分时长参考文件供后续预处理阶段使用。阶段 2数据预处理为 pwgan 训练格式python paddlespeech/t2s/exps/gan_vocoder/preprocess.py --rootdirBZNSYP/ --dumpdirdump --num-cpu20 --cut-silTrue --dur-filedurations.txt --configexamples/csmsc/voc1/conf/default.yaml python utils/compute_statistics.py --metadatadump/train/raw/metadata.jsonl --field-namefeats python paddlespeech/t2s/exps/gan_vocoder/normalize.py --metadatadump/train/raw/metadata.jsonl --dumpdirdump/train/norm --statsdump/train/feats_stats.npy python paddlespeech/t2s/exps/gan_vocoder/normalize.py --metadatadump/dev/raw/metadata.jsonl --dumpdirdump/dev/norm --statsdump/train/feats_stats.npy python paddlespeech/t2s/exps/gan_vocoder/normalize.py --metadatadump/test/raw/metadata.jsonl --dumpdirdump/test/norm --statsdump/train/feats_stats.npy这一步正是文档中“预处理数据集为训练 pwg 所需格式保存到 dump 文件夹”的具体落地处理链路为preprocess.py以 examples/csmsc/voc1/conf/default.yaml 中的特征提取参数为准从BZNSYP/抽取 mel 特征与波形片段--cut-silTrue启用静音切除--dur-file指定切分时长表20 个 CPU 并行输出dump/{train,dev,test}/raw/metadata.jsonlcompute_statistics.py对训练集feats字段计算统计量落盘为dump/train/feats_stats.npynormalize.pytrain/dev/test 三个子集统一使用训练集统计量做归一化输出到dump/*/norm/。这里使用训练集统计量归一化验证/测试集的做法与常规 ML 工程实践一致可以避免数据泄漏导致的统计偏置。阶段 3批量执行 run_benchmark.shmodel_mode_list(pwgan) fp_item_list(fp32) # 满 bs 是 26 bs_item_list(6) for model_mode in ${model_mode_list[]}; do for fp_item in ${fp_item_list[]}; do for bs_item in ${bs_item_list[]}; do log_namespeech_${model_mode}_bs${bs_item}_${fp_item} echo index is speed, 1gpus, begin, ${log_name} run_modesp CUDA_VISIBLE_DEVICES0 bash tests/benchmark/pwgan/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 100 ${model_mode} | tee ${log_path}/${log_name}_speed_1gpus 21 sleep 60 echo index is speed, 8gpus, run_mode is multi_process, begin, ${log_name} run_modemp CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 bash tests/benchmark/pwgan/run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 100 ${model_mode} | tee ${log_path}/${log_name}_speed_8gpus8p 21 sleep 60 done done done该阶段用三层循环遍历“模型 × 精度 × batch size”组合对每个组合跑两种形态单卡形态spCUDA_VISIBLE_DEVICES0训练 100 个迭代日志写入${LOG_PATH_INDEX_DIR}/speech_pwgan_bs6_fp32_speed_1gpus8 卡多进程形态mpCUDA_VISIBLE_DEVICES0,1,...,78 个进程并行日志写入..._speed_8gpus8p。注释“满 bs 是 26”说明 batch_size6 是保守选取单条样本下显存上限约可容纳 26两次压测之间sleep 60用于冷却与 GPU 状态恢复。run_benchmark.sh单轮基准的参数与日志解析契约run_benchmark.sh 是真正发起训练并产出可解析日志的脚本运行示例为CUDA_VISIBLE_DEVICES0 bash run_benchmark.sh ${run_mode} ${bs_item} ${fp_item} 500 ${model_mode}命令行参数说明脚本在_set_params函数中解析五个位置参数参数位置默认值含义run_mode1sp单卡sp/ 多卡mpbatch_size28每卡 batch size会覆盖配置文件中的值fp_item3fp32fp32/fp16用于日志命名max_iter4500训练最大迭代数可选用于提前中断训练model_item5model_item模型名用于拼接日志名run_mode取值非法时脚本会打印choose run_mode(sp or mp)并以退出码 1 结束。日志解析契约参数_set_params中还有一组专为下游 benchmark 系统解析日志而设置的变量可视为该基准对日志格式的“契约”base_batch_size${batch_size} mission_name语音合成 direction_id1 ips_unitsequences/sec skip_steps10 # 解析日志有些模型前几个step耗时长需要跳过 (必填) keywordavg_ips: # 解析日志筛选出数据所在行的关键字 (必填) index1 model_name${model_item}_bs${batch_size}_${fp_item} device${CUDA_VISIBLE_DEVICES//,/ } arr(${device}) num_gpu_devices${#arr[*]} log_file${run_log_path}/${model_item}_${run_mode}_bs${batch_size}_${fp_item}_${num_gpu_devices}要点有三性能单位是sequences/sec即每秒处理的序列数而不是 samples/sec 或 samples/sskip_steps10用于跳过前若干 step——前几步通常因初始化、显存分配等耗时异常不参与吞吐统计keywordavg_ips:是解析器在日志行中筛选数据的锚点这个字符串正是训练器每轮迭代打印的指标名下文展开。多卡时脚本会将CUDA_VISIBLE_DEVICES中的逗号替换为空格并统计出num_gpu_devices日志文件名为${model_item}_${run_mode}_bs${batch_size}_${fp_item}_${num_gpu_devices}日志目录由环境变量TRAIN_LOG_DIR控制默认当前目录。_train 函数训练命令的拼装train_cmd--batch-size${batch_size}\ --max-iter${max_iter} --train-metadatadump/train/norm/metadata.jsonl \ --dev-metadatadump/dev/norm/metadata.jsonl \ --configexamples/csmsc/voc1/conf/default.yaml \ --output-direxp/default \ --run-benchmarktrue case ${run_mode} in sp) train_cmdpython paddlespeech/t2s/exps/gan_vocoder/parallelwave_gan/train.py --ngpu1 ${train_cmd} ;; mp) rm -rf ./mylog train_cmdpython paddlespeech/t2s/exps/gan_vocoder/parallelwave_gan/train.py --ngpu8 ${train_cmd} log_parse_filemylog/workerlog.0 ;; esac bash tests/test_tipc/barrier.sh timeout 15m ${train_cmd} ${log_file} 21从源码结构看这条命令的每个参数都能在训练入口 train.py 中找到对应解析--config、--train-metadata、--dev-metadata、--output-dir、--ngpu是通用训练参数--batch-size默认 8、--max-iter默认 400000、--run-benchmark默认 False、--profiler_options属于benchmark参数组。关键在于--run-benchmarktrue的作用。train.py 中有一段明确的覆盖逻辑# 增加 --batch_size --max_iter 用于 benchmark 调用 if args.run_benchmark: config.batch_size args.batch_size config.train_max_steps args.max_iter也就是说benchmark 模式下命令行参数会强制覆盖default.yaml 中的batch_size原值 8与train_max_steps原值 400000。这解释了为什么基准可以只训练 100 步Trainer的停止条件正是stop_trigger(config.train_max_steps, iteration)被--max-iter改写后即变为 100 步配合timeout 15m兜底防止异常挂死。训练入口对--ngpu的分发逻辑也印证了两种形态的实现差异if args.ngpu 1: dist.spawn(train_sp, (args, config), nprocsargs.ngpu) else: train_sp(args, config)即 sp 形态直接单进程执行train_spmp 形态由paddle.distributed.spawn拉起 8 个进程world_size 1时会init_parallel_env()并对生成器/判别器包一层DataParallel采样器也切换为DistributedBatchSampler。多卡日志取自mylog/workerlog.0rank 0 worker 日志脚本末尾会把它复制回标准log_file路径。训练前还会执行 tests/test_tipc/barrier.sh 做同步保证多进程压测的起始点对齐。avg_ips 指标从哪来训练器日志格式keywordavg_ips:之所以能作为解析锚点是因为 PaddleSpeech 的通用训练器 trainer.py 在主循环中每轮迭代都会向日志写入一行包含该字段的性能记录msg avg_samples: {}, .format( self.updater.batch_size) avg_ips: {:.5f} sequences/sec,.format( self.updater.batch_size / avg_batch_cost)其中avg_batch_cost batch_read_time batch_time即“数据读取耗时 单 batch 训练耗时”之和吞吐 batch 内样本数 / 单批耗时。GPU 环境下该行还会附加max_mem_reserved/max_mem_allocated两个显存峰值指标便于在压测中观察显存占用是否稳定。因此日志中每一行形如iter: 50/100, ..., avg_samples: 6, avg_ips: 12.34567 sequences/sec, max_mem_reserved: xxx MB, max_mem_allocated: xxx MBbenchmark 解析脚本即按skip_steps10跳过头部、按avg_ips:关键字取列得到该配置下的 sequences/sec 数据。被压测的训练任务default.yaml 关键配置基准实际压测的是 Parallel WaveGAN 的完整训练生成器 判别器 多分辨率 STFT 损失超参由 examples/csmsc/voc1/conf/default.yaml 定义。文件头部注释说明该配置面向 CSMSC 数据集约需 12 GB 显存、在 RTX TITAN 上训练完整 40 万步约需 3 天。与基准相关的主要配置段如下配置段关键项值说明特征提取fs/n_fft/n_shift/n_mels24000 / 2048 / 300 / 8024 kHz 采样率12.5 ms hop80 维 mel生成器layers/stacks/upsample_scales30 / 3 / [4,5,3,5]残差块数与上采样率乘积 300 hop size判别器layers/conv_channels10 / 64多层卷积判别器STFT 损失fft_sizes/hop_sizes/win_lengths[1024,2048,512] 等三组多分辨率 STFT 损失数据加载batch_size/batch_max_steps/num_workers8 / 25500 / 2batch_max_steps必须能被n_shift整除优化器学习率G/D1e-4 / 5e-5均配StepDecaystep_size200000, gamma0.5与梯度裁剪10 / 1训练节奏discriminator_train_start_steps/train_max_steps/save_interval_steps/eval_interval_steps100000 / 400000 / 5000 / 1000判别器延后启动定期存快照与评估需要强调基准运行时batch_size与train_max_steps会被命令行覆盖见前文但特征维度、网络结构、损失与优化器设置仍然生效——这保证了压测负载与真实 pwgan 训练完全同构测出的吞吐具有代表性。结果产出与注意事项一次完整基准运行后LOG_PATH_INDEX_DIR或当前目录下会产出形如speech_pwgan_bs6_fp32_speed_1gpus与speech_pwgan_bs6_fp32_speed_8gpus8p的训练日志其中avg_ips: X sequences/sec行即最终性能数据来源。结合脚本内容实际操作时还有几个值得注意的点环境前提run_all.sh注释标明基线为 Python 3.7 paddle 2.1.2 CUDA 10.1/cuDNN7 的 docker 镜像mp 形态需要 8 张可见 GPUCUDA_VISIBLE_DEVICES需给出 8 个卡号外部依赖脚本末尾source ${BENCHMARK_ROOT}/scripts/run_model.sh会对符合 benchmark 规范的日志调用analysis.py做性能解析脚本注释说明如果不联调、只想产出训练 log可注释掉该行及_run调用直接放开_train时长控制max_iter100timeout 15m双重限制单轮时长skip_steps10保证统计的稳定性若修改配置导致单步变慢需相应评估超时是否足够可复现性preprocess.py、normalize.py等预处理产物均落在dump/目录benchmark 各阶段由stage/stop_stage控制重跑时可以从任意 stage 开始避免重复下载与预处理该基准目录与 conformer 基准 同属tests/benchmark/体系conformer 面向 ASR 训练吞吐pwgan 面向 TTS 声码器训练吞吐两者共用“训练 log 关键字解析”的取数方式。小结tests/benchmark/pwgan/提供了一套结构清晰的 pwgan 声码器训练性能基准run_all.sh以 stage 方式串起依赖安装、BZNSYP 数据集下载、mel 特征预处理与归一化再到单卡/8 卡两种形态的批量压测run_benchmark.sh通过--run-benchmarktrue触发 train.py 中的参数覆盖逻辑使 batch size 与迭代数完全由命令行决定最终吞吐指标来自 trainer.py 打印的avg_ipssequences/sec并经由skip_stepskeyword契约被 benchmark 系统解析。掌握这条“脚本参数 → 训练入口覆盖 → 训练器日志指标”的完整链路就能在 PaddleSpeech 中稳定复现并解读 Parallel WaveGAN 的训练性能数据。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech Conformer 训练性能基准测试实践AISHELL-1 Benchmark 脚本、运行流程与日志解析PaddleSpeech Conformer 训练性能基准测试实践AISHELL 1 Benchmark 脚本、运行流程与日志解析 本文围绕 PaddleSp人工智能语音音频PaddleSpeech Parallel WaveGAN 声码器模块解析训练脚本、配置参数与波形合成实战PaddleSpeech Parallel WaveGAN 声码器模块解析训练脚本、配置参数与波形合成实战 导读 本文以 PaddleSpeech 仓库中 p人工智能语音音频PaddleSpeech Parallel WaveGAN 训练更新器PWGUpdater源码解析GAN 声码器的训练与评估全流程PaddleSpeech Parallel WaveGAN 训练更新器PWGUpdater源码解析GAN 声码器的训练与评估全流程 本篇技术指南以 Pad人工智能语音音频NLP媒体生成上一篇别再让手指空转免费开源鼠标连点器 MouseClick 的五分钟上手指南下一篇Joy-Con Toolkit免费给 Switch 手柄调色、查电量、测震动创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。