约2分钟
常见用法
ESPnet1
请先查看ESPnet1教程
ESPnet2
请先查看ESPnet2教程
多GPU使用技巧
- 请注意,如果您想使用多个GPU,在安装前需要先安装nccl。
- 目前,espnet1仅支持单节点内的多GPU训练。跨多节点的分布式设置仅在espnet2中支持。
- 我们暂不支持多GPU并行推理。建议将识别任务拆分为多个子任务,并将这些拆分后的任务分配到不同的GPU上执行。
- 如果使用多块GPU仍无法获得足够的速度提升,首先应通过
nvidia-smi检查GPU使用率。若GPU-Util百分比偏低,瓶颈可能来自磁盘访问。您可以在run.sh中添加--n-iter-processes 2参数启用数据预取来缓解此问题。请注意数据预取会消耗大量CPU内存,因此增加进程数时需谨慎。 - 在ESPnet2中,多GPU训练时的批次大小行为与ESPnet1不同。在ESPnet2中,无论使用多少GPU,总批次大小都不会改变。因此,如果增加GPU数量,您需要手动增加批次大小。更多信息请参阅此文档。
从中间阶段开始或在指定阶段停止
run.sh 包含多个阶段,包括数据准备、训练等,因此如果某些阶段因某些原因失败,您可能希望从指定阶段重新开始。
你可以从指定阶段开始如下操作,并在指定阶段停止流程:
# Start from 3rd stage and stop at 5th stage
$ ./run.sh --stage 3 --stop-stage 5CTC、注意力机制及混合CTC/注意力模型
ESPnet可以轻松切换模型的训练/解码模式,包括CTC、注意力机制以及CTC/注意力混合模式。
每种模式都可以通过指定mtlalpha (espnet1) ctc_weight (espnet2)来进行训练:
- espnet1
# hybrid CTC/attention (default)
mtlalpha: 0.3
# CTC
mtlalpha: 1.0
# attention
mtlalpha: 0.0- espnet2
# hybrid CTC/attention (default)
model_conf:
ctc_weight: 0.3
# CTC
model_conf:
ctc_weight: 1.0
# attention
model_conf:
ctc_weight: 0.0每种模式的解码可以使用以下解码配置进行:
espnet1
# 混合CTC/注意力机制(默认) ctc-weight: 0.3 beam-size: 10 # CTC ctc-weight: 1.0 ## 用于最佳路径解码 api: v1 # 默认设置(可省略) ## 用于带波束搜索的前缀搜索解码 api: v2 beam-size: 10 # 注意力机制 ctc-weight: 0.0 beam-size: 10 maxlenratio: 0.8 minlenratio: 0.3espnet2
# 混合CTC/注意力机制(默认) ctc_weight: 0.3 beam_size: 10 # CTC ctc_weight: 1.0 beam_size: 10 # 注意力机制 ctc_weight: 0.0 beam_size: 10 maxlenratio: 0.8 minlenratio: 0.3CTC模式不计算验证准确率,而是根据损失值选择最优模型,例如:
- espnet1
最佳模型标准: - - 验证集 - cer_ctc - 最小值 - espnet2
./run.sh --recog_model model.loss.best
- espnet1
纯注意力模式需要适当设置最大和最小假设长度(
--maxlenratio和--minlenratio)。一般来说,如果插入错误较多,可以降低maxlenratio值;而如果删除错误较多,则可以增加minlenratio值。请注意,最佳值取决于输入帧和输出标签长度的比例,这个比例会因语言和BPE单元的不同而变化。负值的
maxlenratio可用于设置与输入帧数无关的固定最大假设长度。若将maxlenratio设为-1,解码将在首次输出后立即停止,此模式可用于模拟话语分类任务,适用于某些口语理解及说话人识别任务。关于混合CTC/注意力机制在训练和识别中的有效性,请参阅[2]和[3]。例如,混合CTC/注意力机制对上述最大和最小假设启发式方法不敏感。
