# Kaldi 有效率實行多GPU方法 程式碼 --- ``` CUDA_VISIBLE_DEVICES=0,1,2,3 <your_script>.sh <your_arguments> --num_jobs_initial x --num_jobs_final y eg: CUDA_VISIBLE_DEVICES=0,1,2,3 local/chain/run_tdnn_tranferWeights_indep.sh --stage 9 --fold 0 --num_jobs 15 --affix _DAAIKIDAug_Deceipt_ADOSfold0_AddADOSNoise --train_stage 40 --num_jobs_initial 3 --num_jobs_initial 3 ``` 解釋: 首先在所有程式之前加上CUDA_VISIBLE_DEVICES=?就等於是那個程式會使用你加上的環境變數來執行,在這邊CUDA_VISIBLE_DEVICES指得是你的程式可以看得到的GPU,通常可以依照你可以用的GPU來設定。 接著,num_jobs_initial 和 num_jobs_initial 會控制你跑在GPU上面的process數量, 這兩個數值通常都要小於等於你能看得到的GPU數(除非你的GPU能夠裝兩個以上的job)。 額外補充 --- 1. 通常官方文件裡面會建議你先設定nvidia-smi -c 3, 這行指令意思是當某個GPU上跑了一個process之後,其他process就不能跑在那個GPU上,然而根據[1](https://www.zhihu.com/question/55485355)敘述我們有辦法可以在nvidia-smi -c 0(default mode)之下還能多gpu不error, 按照[1](https://www.zhihu.com/question/55485355)的作法,會需要動到kaldi script當中執行train_new_model()的地方。然而這邊我有一個小地方要補充,[1](https://www.zhihu.com/question/55485355)用的是steps/nnet3/train_raw_dnn.py,如果我們要用的是steps/nnet3/chain/train.py的話就變成要更改steps/libs/nnet3/train/chain_objf/acoustic_model.py 2. [1](https://www.zhihu.com/question/55485355)裡面有提到kaldi原生的queue.pl可以拿來控制CPU,GPU等運算資源,但queue.pl設定上似乎比較複雜,雖然可以拿來控多GPU,但我們採用上面的方法比較省時省力。 ###### tags: `kaldi`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up