工欲善其事,必先利其器,机器、数据、算法对深度学习都非常重要。
我先后尝试两台机器以及虚拟机,处理速度差距还是很大的。当前配置:i7 6700+gtx1060+16G+240G SSD。至少现在的实验流程可以在一天之内完成,用旧机器可能3天都不一定能完成。cpu对于大部分的计算都是至关重要的,尤其是解码步骤,最为耗时,如果能用上可以超频的cpu,速度会快不少吧。gpu主要可以加速dnn训练,据说与cpu相比速度能快10倍。内存建议至少16G,内存太小则不得不减少线程或者使用交换分区,这些都会降低效率。
不建议使用虚拟机,据说在虚拟机中无法真正使用gpu的计算功能,安装双系统还是有必要的,建议使用easyBCD安装ubuntu16.04。
cd /etc/apt
cp sources.list sources.list.bak #备份旧源
sudo gedit sources.list
粘贴阿里源
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
然后运行sudo apt-get update
。
将具体步骤略。安装好以后运行nvidia-smi
我有两个gpu,得到的结果如下:
Fri May 5 10:57:27 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39 Driver Version: 375.39 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 650 Off | 0000:01:00.0 N/A | N/A |
| 30% 34C P8 N/A / N/A | 341MiB / 1997MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 106... Off | 0000:07:00.0 Off | N/A |
| 43% 31C P8 6W / 130W | 1MiB / 6072MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
注意processes项的not supported,出现这个是因为gpu太老或者太弱,不支持显示它正在运行的进程。上例中gpu0是gtx650,gpu1是gtx1060,在进行dnn训练任务时,processes项会显示gpu1运行的进程名,以及占用的显存。
顺便一提,在kaldi的运行日志中,可以见到这样一个警告
Suggestion: use 'nvidia-smi -c 3' to set compute exclusive mode
查阅smi的文档可知,-c 3是把gpu设置为进程独占,如果你只有一块显卡,又接上了显示器,请不要设置这个,否则会导致无可用gpu。其他的模式如下:-c 0是默认模式,每个设备都可以被多个任务使用;-c 1是将每个设备都设置为线程独占,但是这个已经过时了,会自动改成进程独占;-c 2是将所有设备都设置为禁止计算。且这个设置会在重启后恢复为默认。
如果有多个gpu可以指定设置计算模式的gpu:
sudo nvidia-smi -i 1 -c 3
一、安装依赖
sudo apt-get install autoconf libtool wget perl subversion build-essential gfortran libatlas-dev libatlas-base-dev zlib1g-dev gawk
二、其它步骤略。
三、可能遇到的问题。
(1)如果在make
时遇到类似recipe for target 'lattice-prune' failed
的错误,重新编译OpenBLAS可以解决。步骤如下:
1)删除tools目录下的OpenBLAS文件夹
2)在tools路径下运行make -j 8 openblas,修改src目录下的configure文件,
找到:
## Default locations for FST and linear algebra libraries.
MATHLIB='ATLAS'
ATLASROOT=`rel2abs ../tools/ATLAS/`
FSTROOT=`rel2abs ../tools/openfst`
修改为:
MATHLIB='OPENBLAS'
OPENBLASROOT=`rel2abs ../tools/OpenBLAS/install`
FSTROOT=`rel2abs ../tools/openfst`
再次运行
./configure
make depend
make -j 8
(2)如果在steps/nnet/make_denlats.sh
这一步出错:awk: line 3: function gensub never defined
,是因为没有安装gawk。
htop是一个非常好用的cpu监测工具,可以实时看到cpu状态、内存状态和进程状态。运行sudo apt-get install htop
,即可安装。使用也很简单,直接运行htop
。
本文采用的数据集都来自王东老师开源的thchs30,这个数据集包含的内容如下:
数据集 | 音频时长 | 句子数 | 词数 |
---|---|---|---|
train(训练) | 25 | 10000 | 198252 |
dev(开发) | 2:14 | 893 | 17743 |
test(测试) | 6:15 | 2495 | 49085 |
还有训练好的语言模型word.3gram.lm和phone.3gram.lm以及相应的词典lexicon.txt。
thchs30的使用示例在kaldi-trunk/egs/thchs30/s5/run.sh
中,需要注意的是将下载的data_thchs30.tgz、resource.tgz和test-noise.tgz分别解压到kaldi-trunk/egs/thchs30/thchs30-openslr
下各自文件夹中,修改run.sh中thchs=/home/lx/kaldi-trunk/egs/thchs30/thchs30-openslr
即可。
kaldi准备工作完成,下一篇介绍thchs30的run.sh。