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任務方式運行 |
集羣環境 | 根據實際任務需要,對不同的任務類型指定不同的隊列 | 任務將通過管理節點分發到滿足運行條件的計算節點運行,從而充分發揮集羣的優勢。 |