我先后尝试两台机器以及虚拟机,处理速度差距还是很大的。当前配置:i7 6700+gtx1060+16G+240G SSD。至少现在的实验流程可以在一天之内完成,用旧机器可能3天都不一定能完成。cpu对于大部分的计算都是至关重要的,尤其是解码步骤,最为耗时,如果能用上可以超频的cpu,速度会快不少吧。gpu主要可以加速dnn训练,据说与cpu相比速度能快10倍。内存建议至少16G,内存太小则不得不减少线程或者使用交换分区,这些都会降低效率。
不建议使用虚拟机,据说在虚拟机中无法真正使用gpu的计算功能,安装双系统还是有必要的,建议使用easyBCD安装ubuntu16.04。
粘贴阿里源
# 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(训练)2510000198252dev(开发)2:1489317743test(测试)6:15249549085还有训练好的语言模型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。