Kaldi 学习笔记之swithbaord运行环境脚本解析
前言:
kaldi最新版本引入了nnet2,对集群多GPU提供了支持。对于入门者而言,kaldi中复杂的脚本语句理解起来有点难度,博主亦是刚入门,在此提供部分脚本注释和个人理解,希望能和从事语音识别工作的同行一起探讨学习,毕竟本人知识水平有限,难免会出现纰漏,欢迎大家在讨论区指正。:)
摘要:
本文主要介绍kaldi任务运行环境的配置。
正文:
博主目前采用的是曙光Amax GPU集群,该集群由三台服务器组成,其中管理节点主要负责集群任务的分发、调度和管理,以及NFS文件系统的维护。另外两个计算节点(compute-0-1,compute-0-3)负责集群任务的执行。
集群根据kaldi中集群环境配置的步骤,安装了Sun公司的GridEngine,然后,配置两个队列,其中:
队列 | 资源 | 适用任务类型 | 例子 |
---|---|---|---|
CPU_QUEUE | 管理节点8个CPU,64GB RAM; 两个计算节点分别提供32个CPU,125GB RAM;不提供GPU支持 |
CPU密集型任务 | HMM-GMM模型的训练。 |
GPU_QUEUE | 两个计算节点分别提供16个CPU,125GB RAM,24块K10 GPU板卡。 | GPU密集型任务 | HMM-DNN模型的训练。 |
egs/swbd/s5b/cmd.sh 代码(修改):
# "queue.pl" uses qsub. The options to it are
# options to qsub. If you have GridEngine installed,
# change this to a queue you have access to.
# Otherwise, use "run.pl", which will run jobs locally
# (make sure your --num-jobs options are no more than
# the number of cpus on your machine.
#a) JHU cluster options
export train_cmd="queue.pl -q CPU_QUEUE -l arch=*64*"
export decode_cmd="queue.pl -q GPU_QUEUE -l arch=*64* --mem 12G"
export cuda_cmd="queue.pl -q GPU_QUEUE -l gpu=1"
export mkgraph_cmd="queue.pl -q CPU_QUEUE -l arch=*64* --mem 12G"
#b) BUT cluster options
#export train_cmd="queue.pl -q all.q@@blade -l ram_free=1200M,mem_free=1200M"
#export decode_cmd="queue.pl -q all.q@@blade -l ram_free=1700M,mem_free=1700M"
#export decodebig_cmd="queue.pl -q all.q@@blade -l ram_free=4G,mem_free=4G"
#export cuda_cmd="queue.pl -q long.q@@pco203 -l gpu=1"
#export cuda_cmd="queue.pl -q long.q@pcspeech-gpu"
#export mkgraph_cmd="queue.pl -q all.q@@servers -l ram_free=4G,mem_free=4G"
#c) run it locally...
#export train_cmd=run.pl
#export decode_cmd=run.pl
#export cuda_cmd=run.pl
#export mkgraph_cmd=run.pl
脚本可以配置kaldi的集群运行环境,根据上述运行环境介绍,我对原始kaldi脚本做了一些修正。其中:
命令 | 任务 |
---|---|
train_cmd | 该命令负责提交CPU密集型的训练任务,例如:HMM-GMM模型训练等。 |
decode_cmd | 该命令负责提交模型的解码工作,例如:force-alignment,decode 等。 |
cuda_cmd | 该命令负责GPU密集型的训练任务,例如:HMM-DNN 模型训练等。 |
mkgraph_cmd | 该命令负责提交CPU密集型的语音模型解码图的生成工作(H*C*L*G),主要是WFST三大算法:composition,deteminization和minimazation。 |
此外,脚本提供了对单机环境以及集群环境的需求:
运行环境 | 配置方法 | 结果 |
---|---|---|
单机环境 | 全部运行命令配置为run.pl | 仅在当前计算机上以CPU任务方式运行 |
集群环境 | 根据实际任务需要,对不同的任务类型指定不同的队列 | 任务将通过管理节点分发到满足运行条件的计算节点运行,从而充分发挥集群的优势。 |