目的:由於kaldi有些模塊的訓練必須要用到GPU,因此拿到NVIDIA GTX1650顯卡后開始配置GPU環境。
整體過程:在centos7系統上進行配置,出現了幾個問題,最后問題不能解決,借鑒其他小伙伴成功經驗,將系統換成了Ubuntu 16.04,順利解決。
在Ubuntu 16.04上成功安裝GPU環境參考鏈接:
https://blog.csdn.net/weixin_42858575/article/details/89817219
Win7系統下安裝Ubuntu16.04
Ubuntu16.04下安裝NVIDIA顯卡驅動
https://blog.csdn.net/yinwangde/article/details/89439648
Ubuntu 16.04 上 CUDA_10.0及cuDNN的安裝
https://blog.csdn.net/lihe4151021/article/details/90237681
在centos7上安裝失敗GPU環境的記錄:
——、顯卡部分:
https://www.jianshu.com/p/75e7053bdd43?from=timeline&isappinstalled=0
https://blog.csdn.net/weixin_41271279/article/details/83659711
安裝步驟主要參考的以上2個鏈接里的內容。以下是安裝時遇到的幾個問題:
1、NVIDIA官網上寫着cudnn-10.1-linux-x64-v8.0.3.33版本的cudnn與CUDA10.1匹配,但下載后里面的核心文件cudnn.h只有很多注釋,不能用。於是又去下載了cudnn-10.1-linux-x64-v7.6.5.32版本的cudnn;
2、由於我在安裝CUDA之前已經安裝了顯卡驅動,因此安裝CUDA時要將它默認安裝驅動的選項去掉,否則安裝失敗,如下,將Driver前面的×去掉;
另外,我在配上面環境時候,出現了切換到命令行不能用,顯示 [ 0.182403]pnp 00:01: can't evaluate _CRS: 12311 未能解決
二、編譯部分
1、在kaldi下的src進行make all編譯時,出現如下報錯:
In file included from /usr/include/++/4.8.2/cstdint:35:0,
from ../cudamatrix/cu-matrixdim.h:29
from ../cudamatrix/cu- kernels-ansi.h:29,
from cu- kernels.cu:31:
/usr/include/c++/4.8.2/bits/C++0x warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^
#--error 0x1
make[1]: **** Icu-kernels.o] Error 1
make[1: Leaving directory /home/kaldi - trunk/src/cudamatrix
make: *** [cudamatrix] Error 2
查了一圈資料,原因應該是有些C++文件需要編譯器支持C++11,我的gcc/g++編譯器版本是4.8.5,雖然是支持C++11的,但它默認支持是C++03。(驗證方法:https://blog.csdn.net/Betterc5/article/details/84503050),於是我選擇將編譯器直接升級到8.2.0版本(升級步驟參考:https://www.cnblogs.com/ToBeExpert/p/10297697.html)
2、繼續編譯:還是有報錯,如下:
make[1]: Leaving directory `/home/kaldi-trunk/src/cudadecoder'
make -C bin
make[1]: Entering directory `/home/kaldi-trunk/src/bin'
g++ -std=c++11 -I.. -isystem /home/kaldi-trunk/tools/openfst-1.6.7/include -O1 -Wno-sign-compare -Wall -Wno-sign-compare -Wno-unused-local-typedefs -Wno-deprecated-declarations -Winit-self -DKALDI_DOUBLEPRECISION=0 -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_MKL -I/opt/intel/mkl/include -m64 -msse -msse2 -pthread -g -DHAVE_CUDA -I/usr/local/cuda/include -fPIC -pthread -isystem /home/kaldi-trunk/tools/openfst-1.6.7/include -c -o align-equal.o align-equal.cc
g++ -Wl,-rpath=/home/kaldi-trunk/tools/openfst-1.6.7/lib -rdynamic align-equal.o ../decoder/kaldi-decoder.a ../lat/kaldi-lat.a ../lm/kaldi-lm.a ../fstext/kaldi-fstext.a ../hmm/kaldi-hmm.a ../transform/kaldi-transform.a ../gmm/kaldi-gmm.a ../tree/kaldi-tree.a ../util/kaldi-util.a ../matrix/kaldi-matrix.a ../base/kaldi-base.a /home/kaldi-trunk/tools/openfst-1.6.7/lib/libfst.so -L/opt/intel/mkl/lib/intel64 -Wl,-rpath=/opt/intel/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -ldl -lpthread -lm -lm -lpthread -ldl -o align-equal
align-equal.o: In function `fst::internal::FstImpl<fst::ArcTpl<fst::TropicalWeightTpl<float> > >::WriteFstHeader(fst::Fst<fst::ArcTpl<fst::TropicalWeightTpl<float> > > const&, std::ostream&, fst::FstWriteOptions const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, fst::FstHeader*)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/fst.h:746: undefined reference to `fst::FstHeader::Write(std::ostream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
../decoder/kaldi-decoder.a(training-graph-compiler.o): In function `fst::internal::FstImpl<fst::ArcTpl<fst::LogWeightTpl<float> > >::WriteFstHeader(fst::Fst<fst::ArcTpl<fst::LogWeightTpl<float> > > const&, std::ostream&, fst::FstWriteOptions const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, fst::FstHeader*)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/fst.h:746: undefined reference to `fst::FstHeader::Write(std::ostream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
../decoder/kaldi-decoder.a(training-graph-compiler.o): In function `fst::internal::FstImpl<fst::ReverseArc<fst::ArcTpl<fst::TropicalWeightTpl<float> > > >::WriteFstHeader(fst::Fst<fst::ReverseArc<fst::ArcTpl<fst::TropicalWeightTpl<float> > > > const&, std::ostream&, fst::FstWriteOptions const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, fst::FstHeader*)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/fst.h:746: undefined reference to `fst::FstHeader::Write(std::ostream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::ReadFstKaldiGeneric(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)':
/home/kaldi-trunk/src/fstext/kaldi-fst-io.cc:57: undefined reference to `fst::FstHeader::Read(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/home/kaldi-trunk/src/fstext/kaldi-fst-io.cc:79: undefined reference to `fst::FstReadOptions::FstReadOptions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, fst::FstHeader const*, fst::SymbolTable const*, fst::SymbolTable const*)'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::ReadFstKaldi(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/kaldi-trunk/src/fstext/kaldi-fst-io.cc:34: undefined reference to `fst::FstHeader::Read(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/home/kaldi-trunk/src/fstext/kaldi-fst-io.cc:37: undefined reference to `fst::FstReadOptions::FstReadOptions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, fst::FstHeader const*, fst::SymbolTable const*, fst::SymbolTable const*)'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::Fst<fst::ArcTpl<fst::TropicalWeightTpl<float> > >::Read(std::istream&, fst::FstReadOptions const&)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/fst.h:240: undefined reference to `fst::FstHeader::Read(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::FstRegister<fst::ArcTpl<fst::TropicalWeightTpl<float> > >::ConvertKeyToSoFilename(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/register.h:62: undefined reference to `fst::ConvertToLegalCSymbol(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::internal::FstImpl<fst::ArcTpl<fst::TropicalWeightTpl<float> > >::ReadHeader(std::istream&, fst::FstReadOptions const&, int, fst::FstHeader*)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/fst.h:797: undefined reference to `fst::FstHeader::Read(std::istream&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
../fstext/kaldi-fstext.a(kaldi-fst-io.o): In function `fst::internal::ConstFstImpl<fst::ArcTpl<fst::TropicalWeightTpl<float> >, unsigned int>::Read(std::istream&, fst::FstReadOptions const&)':
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/const-fst.h:214: undefined reference to `fst::MappedFile::Map(std::istream*, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long)'
/home/kaldi-trunk/tools/openfst-1.6.7/include/fst/const-fst.h:227: undefined reference to `fst::MappedFile::Map(std::istream*, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long)'
collect2: error: ld returned 1 exit status
make[1]: *** [align-equal] Error 1
make[1]: Leaving directory `/home/kaldi-trunk/src/bin'
make: *** [bin] Error 2
將gcc/g++降到5.4.0,依然報這個錯,不能解決,換Ubuntu系統,過程在上面。