--- title: Cuda加速Kaldi的小嘗試 disqus: hackmd --- ## Kaldi branch JackingChen    ## Table of Contents [TOC] ## Latest experiments    小結論: 在用Model5 訓練formosa 126小時的訓練資料測試在DAAI 1952個utterance的測資後發現最大的問題是背景雜訊,還有測資label本身就不對的問題。 因此從上表上可以看到在加入DAAI訓練資料(與測資不重疊)後可以將CER降低到39.20, 我認為這可能是極限了因為測資本身的label就不完全對,我挑了幾個音檔放在./Weird_wav_example/下, ./Weird_wav_example/Result_details 是用純粹formosa 訓練再測試在 DAAI的測資上看到的一些例子,可以從裡面的utterance編號對到./Weird_wav_example/ 下的音檔來確認看看 EX: ``` 殷瑗小聚_1578_630 ref *** *** *** 參 加 一 個 這 個 嘉 年 華 會 一 樣 殷瑗小聚_1578_630 hyp 是 一 個 參 加 一 個 這 個 嘉 年 華 *** *** *** 殷瑗小聚_1578_630 op I I I C C C C C C C C C D D D ``` ## Kaldi cuda 加速 發這個文的日期是在2019/08/02, 使用的kaldi版本是這個: [commit](https://github.com/kaldi-asr/kaldi/commit/7637de77e0a77bf280bef9bf484e4f37c4eb9475),當時已經寫成的kaldi程式只有batched-wav-nnet3-cuda 以及 compute-mfcc-feats-cuda、 apply-cmvn-online-cuda再加上訓練nnet3的時候已經包裝好的GPU加速,Nvidia就已經成功的將取特徵、訓練模型、解碼的三個模塊加入了GPU加速了。  Nvidia官方還為此開放了一個Docker container供大家在自己家裡覆現那個結果[Docker image 連結](https://ngc.nvidia.com/catalog/containers/nvidia:kaldi)。 但是其實如果要直接用cuda加速的話不需要硬是去用他們的container,我會教大家怎麼直接加入gpu運算進各位的recipe中。 如何加速 --- 我只試過compute-mfcc-feats-cuda 以及 batched-wav-nnet3-cuda。 就compute-mfcc-feats-cuda的例子來說,他會在大家的recipe中的的steps/make_mfcc_pitch.sh或是 steps/make_mfcc.sh出現,這時候先找出哪裡出現compute-mfcc-feats並把這些字樣換成compute-mfcc-feats-cuda就可以用gpu跑了。例如: ``` mfcc_feats="ark:compute-mfcc-feats $vtln_opts --verbose=2 --config=$mfcc_config scp,p:$logdir/wav_${name}.JOB.scp ark:- |" ``` 將之換成 ``` mfcc_feats="ark:compute-mfcc-feats-cuda $vtln_opts --verbose=2 --config=$mfcc_config scp,p:$logdir/wav_${name}.JOB.scp ark:- |" ``` 我的環境是ubuntu16.04,cuda-9.0,nvidia 版本384.130結果是不會有錯,由於後面的運算function都包得很好所以這種簡單替換就夠了。 另外就是cuda加速解碼過程的部份,這個功能更包進了steps/nnet3/decode.sh當中(大家可以發現這是專門用在解碼nnet3的模型的),只需要多下--use_gpu true的argument就夠了,甚至比算MFCC來的簡單。 結果呈現 --- ###### tags: `Templates` `Documentation` ## 背景 發這個文的日期是在2019/08/02, 使用的kaldi版本是這個: [commit](https://github.com/kaldi-asr/kaldi/commit/7637de77e0a77bf280bef9bf484e4f37c4eb9475),當時已經寫成的kaldi程式只有batched-wav-nnet3-cuda 以及 compute-mfcc-feats-cuda、 apply-cmvn-online-cuda再加上訓練nnet3的時候已經包裝好的GPU加速,Nvidia就已經成功的將取特徵、訓練模型、解碼的三個模塊加入了GPU加速了。  Nvidia官方還為此開放了一個Docker container供大家在自己家裡覆現那個結果[Docker image 連結](https://ngc.nvidia.com/catalog/containers/nvidia:kaldi)。 但是其實如果要直接用cuda加速的話不需要硬是去用他們的container,我會教大家怎麼直接加入gpu運算進各位的recipe中。 如何加速 --- 我只試過compute-mfcc-feats-cuda 以及 batched-wav-nnet3-cuda。 就compute-mfcc-feats-cuda的例子來說,他會在大家的recipe中的的steps/make_mfcc_pitch.sh或是 steps/make_mfcc.sh出現,這時候先找出哪裡出現compute-mfcc-feats並把這些字樣換成compute-mfcc-feats-cuda就可以用gpu跑了。例如: ``` mfcc_feats="ark:compute-mfcc-feats $vtln_opts --verbose=2 --config=$mfcc_config scp,p:$logdir/wav_${name}.JOB.scp ark:- |" ``` 將之換成 ``` mfcc_feats="ark:compute-mfcc-feats-cuda $vtln_opts --verbose=2 --config=$mfcc_config scp,p:$logdir/wav_${name}.JOB.scp ark:- |" ``` 我的環境是ubuntu16.04,cuda-9.0,nvidia 版本384.130結果是不會有錯,由於後面的運算function都包得很好所以這種簡單替換就夠了。 另外就是cuda加速解碼過程的部份,這個功能更包進了steps/nnet3/decode.sh當中(大家可以發現這是專門用在解碼nnet3的模型的),只需要多下--use_gpu true的argument就夠了,甚至比算MFCC來的簡單。 結果呈現 ---  結果有些奇怪的地方,Compute MFCC cuda 只比 Compute MFCC快 2min, decode cuda甚至比decode慢, 原因是我的測試環境本身沒辦法獨立跑一個程式(因為我同時都必須跑其他程式),但有一個結論就是當你有其他process跑在gpu上面的話,就不要用cuda版的比較好 ###### tags: `Templates` `Documentation`
×
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