1. 程式人生 > >在伺服器上執行kaldi說話人識別模型訓練程式遇到的小問題

在伺服器上執行kaldi說話人識別模型訓練程式遇到的小問題

伺服器上已開啟安裝了kaldi工具的docker容器,開啟方法見上一篇部落格。
說話人識別的例程用的是aishell提供的資料集,這裡我的資料集已經下載到伺服器了,所以後面我會再執行腳本里去掉下載資料集的命令。

1、容器開啟的方法:
在上一篇部落格的基礎上用以下命令開啟

docker run --runtime=nvidia --name [指定一個用於與其它容器區分的name] -it -v /home/ctyun:/home/ctyun [image名稱kaldi]

2、去掉下載資料集命令
在……kaldi/egs/aishell/v1路徑下
編輯run.sh指令碼,註釋下載資料集部分,並把data路徑改成伺服器上已有資料集的路徑。
然後執行程式執行./run.sh
3、報錯

queue.pl: error submitting jobs to queue (return status was 32512)
解決辦法:
編輯cmd.sh

將命令:export train_cmd="queue.pl --mem 4G"
  改為->export train_cmd="run.pl --mem 4G"

4、執行失敗後需要重新執行報錯說什麼id不匹配的問題
刪掉上一次執行生成的檔案:
……kaldi/egs/aishell/v1路徑下的data exp mfcc檔案
5、查詢檔案或資料夾的命令
在當前資料夾下查詢:
find . -name “檔案或資料夾名稱”
根目錄下查詢:
find / -name “檔案或資料夾名稱”
6、執行程式時加上nohup以儲存執行log
  執行命令:
  nohup ./run.sh &
  (& 指定後臺執行)
  實時重新整理檢視執行時儲存的log:
  tailf nohup.out
7、訓練一段時間後報錯:

run.pl: job failed, log is in exp/extractor_1024/log/acc.0.10.log
run.pl: job failed, log is in exp/extractor_1024/log/acc.0.1.log
run.pl: job failed, log is in exp/extractor_1024/log/acc.0.4.log
…………
原因:記憶體不夠
解決辦法:修改run.sh裡指定同時開啟的程序數
train ivector部分

將sid/train_ivector_extractor.sh --cmd "$train_cmd --mem 10G" \
改為->sid/train_ivector_extractor.sh --nj 5 --num-threads 10 --cmd "$train_cmd" \

8、新終端下可以用top命令實時查詢記憶體佔用