Ubuntu16.04配置有GPU的kaldi環境,並運行thchs-30模型


  由於本人新手不熟練,導致玩kaldi時出了很多問題后不得不重裝kaldi環境甚至系統,因此記錄一下,下次要是再用到,配置的快一點。

安裝Ubuntu系統就略過了,做好系統盤后,一勞永逸。(參考鏈接:https://blog.csdn.net/weixin_42858575/article/details/89817219)

一、安裝NVIDIA驅動

1、下載驅動(http://www.nvidia.cn/page/home.html),並將驅動復制到主機上,此處是放到/home下

2、禁用nouveau
若未安裝vim則sudo apt-get install vim安裝或使用vi
sudo vim /etc/modprobe.d/blacklist.conf
在文件最后部分插入以下兩行內容
blacklist nouveau
options nouveau modeset=0

更新系統
sudo update-initramfs -u

重啟系統(一定要重啟)
reboot

驗證nouveau是否已禁用,沒有信息顯示,說明nouveau已被禁用
lsmod | grep nouveau

3、ctrl+alt+f1進入命令行界面
sudo service lightdm stop //這個是關閉圖形界面,不執行會出錯。
然后卸載掉原有驅動:
sudo apt-get remove nvidia-* (若安裝過其他版本或其他方式安裝過驅動執行此項)

4、給驅動run文件賦予執行權限:
sudo chmod a+x NVIDIA-Linux-x86_64-396.18.run

安裝:
sudo ./NVIDIA-Linux-x86_64-396.18.run -no-x-check -no-nouveau-check -no-opengl-files //只有禁用opengl這樣安裝才不會出現循環登陸的問題
-no-x-check:安裝驅動時關閉X服務
-no-nouveau-check:安裝驅動時禁用nouveau
-no-opengl-files:只安裝驅動文件,不安裝OpenGL文件

安裝過程:
The distribution-provided pre-install script failed! Are you sure you want to continue? 選擇 continue 繼續
WARNING: Unable to find a suitable destination to install 32-bit compatibility libraries. Your system may not be set up for 32-bit compatibility. 32-bit compatibility files will not be installed; if you wish to install them, re-run the installation and set a valid directory with the --compat32-libdir option. 選擇ok繼續
Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up. 選擇Yes繼續
Your X configuration file has been successfully updated. Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: 430.09) is now complete. 選擇ok繼續

5、掛載Nvidia驅動:
modprobe nvidia

檢查驅動是否安裝成功:
nvidia-smi

sudo reboot //重啟

參考鏈接:https://blog.csdn.net/xunan003/article/details/81665835


二、安裝CUDA

1、根據驅動來下載CUDA安裝包(NVIDIA官網下載),選擇 runfile文件。我這里放到\home下。下載完后,用MD5 檢驗,如果序號不和,得重新下載
md5sum cuda_10.0.130_410.48_linux.run

2、禁用 nouveau驅動(在安裝Nvidia驅動時已禁用)
lsmod | grep nouveau //無輸出表示已禁用,沒禁用參考上面 一、2

3、重啟電腦,進入登錄界面的時候,不要登錄進入桌面(否則可能會失敗,若不小心進入,請重啟電腦),直接按Ctrl+Alt+F1進入文本模式(命令行界面),登錄賬戶。
sudo service lightdm stop 關閉圖形化界面

4、切換到cuda安裝文件的路徑:cd home/
sudo sh cuda.run
accept
Driver選項去掉(已經裝了驅動,這里選擇不再裝驅動),然后選Install

5、重新啟動圖形化界面。
sudo service lightdm start

Alt + ctrl +F7,返回到圖形化登錄界面,如果能夠成功登錄,則表示不會遇到循環登錄的問題,基本說明CUDA的安裝成功了。

6、重啟電腦,檢查Device Node Verification
ls /dev/nvidia*
若結果顯示/dev/nvidia0 /dev/nvidiactl /dev/nvidia-modeset 或顯示出類似的信息,應該有三個,則安裝成功。不是的話參考鏈接

7、設置環境變量
sudo vim /etc/profile
在打開的文件末尾,添加以下兩行(根據自己的改一下)。64位系統:
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

source /etc/profile //刷新生效

8、重啟電腦,檢查上述的環境變量是否設置成功
驗證驅動版本
cat /proc/driver/nvidia/version
驗證CUDA Toolkit
nvcc -V

9、嘗試編譯cuda提供的例子
cd /home/xxx/NVIDIA_CUDA-9.0_Samples //其中xxx是你自己的用戶名
make
如果編譯成功,最后會顯示Finished building CUDA samples

運行編譯生成的二進制文件
cd /home/xxx/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release
./deviceQuery
出現Result = PASS代表成功,若失敗 Result = FAIL
./bandwidthTest
出現Result = PASS代表成功,若失敗 Result = FAIL

參考鏈接:https://blog.csdn.net/lihe4151021/article/details/90237681

 

三、cudnn的安裝

1、下載安裝文件,按需求下載cudnn的安裝文件:https://developer.nvidia.com/rdp/cudnn-archive

2、安裝cudnn,官網下載下來的cudnn for linux的文件格式是.solitairetheme8,想要解壓的話需要先轉成tgz格式再解壓
sudo cp cudnn-10.0-linux-x64-v7.3.1.20.solitairetheme8 cudnn-10.0-linux-x64-v7.3.1.20.tgz
sudo tar -xvf cudnn-10.0-linux-x64-v7.3.1.20.tgz

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

3、查看cudnn版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

參考鏈接:https://blog.csdn.net/lihe4151021/article/details/90237681

 


四、安裝kaldi

1、配置環境變量
sudo apt-get install autoconf automake libtool subversion libatlas-dev libatlas-base-dev zlib1g-dev gawk git gfortran gcc g++

2、下載kaldi
sudo git clone https://github.com/kaldi-asr/kaldi

3、編譯kaldi
進入tools目錄,編譯tools
cd tools/
extras/check_dependencies.sh

根據提示安裝必要工具,知道出現:extras/check_dependencies.sh: all OK.

sudo make //sudo make -j 4

4、編譯src
./configure --shared
sudo make depend
sudo make //sudo make -j 4

5、運行測試
cd egs/yesno/s5
sudo ./run.sh
如果編譯成功,會看到最后一行測試結果顯示:
%WER 0.00 [ 0 / 232, 0 ins, 0 del, 0 sub ] exp/mono0a/decode_test_yesno/wer_10

參考鏈接:https://blog.csdn.net/qq_36035264/article/details/75579003


五、訓練THCHS-30模型

1、下載數據集放到主機上,這里放到 thchs30-openslr 下

2、修改s5目錄下的cmd.sh,改為本地執行
export train_cmd=run.pl
export decode_cmd=run.pl
export mkgraph_cmd=run.pl
export cuda_cmd=run.pl

3、修改s5下的run.sh
n=4 //#parallel jobs 修改並行任務的數量,可以根據cpu的個數來定,這里改成4
thchs=/home/jackie/data/thchs30-openslr //修改文件路徑,改成你的文件路徑

執行腳本
sudo ./run.sh

參考鏈接:https://blog.csdn.net/qq_36035264/article/details/75579003


(可選)4、解決字符轉碼問題,之前運行run.sh一直報錯:'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
打開s5/local/wer_output_filter,加入以下字段
# -*- coding: utf-8 -*-
import sys #要重新載入sys。因為 Python 初始化后會刪除 sys.setdefaultencoding 這個方 法
reload(sys)
sys.setdefaultencoding('utf-8')

參考鏈接:https://www.jianshu.com/p/5017d8342dd2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM