Problema
Para usar o CUDA no Kaldi, precisamos de uma determinada versão do gcc instalada em nosso sistema. Como o Manjaro é uma distribuição rolling release, surgem algumas dificuldades para garantir isso. Esse post mostra um resumo do que pode ser feito para contornar essa situação.
Solução
-
Instalar o driver da nvidia pela interface gráfica do Hardware configuration
-
Instalar o cuda/cudnn pelo pacman. ```pacman -S cuda cudnn’’’
-
Instalar o gcc6 e o gcc6-fortran pelo yaourt (o Cuda versão 9 é incompatível com gcc superior a 7). ```yaourt gcc6’’’
-
No diretório tools do kaldi, executar o make indicando que os compiladores de C e C++ serão o gcc-6 e o g++-6 ```make CXX=g++-6 CC=gcc-6’’’
-
Alterar a instrução de compilação do openblas no makefile para incluir CC=gcc-6 e FC=gfortran-6. Essa instrução deverá ficar parecida com: ```$(MAKE) PREFIX=
pwd
/OpenBLAS/install CC=gcc-6 FC=gfortran-6 $(fortran_opt) DEBUG=1 USE_THREAD=1 NUM_THREADS=64 -C OpenBLAS all install’’’ -
Compilar OpenBLAS: ``` export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.1/ make openblas ‘’’
-
No diretório src, executar o configure com os seguintes parâmetros: ```CXX=g++-6 ./configure –openblas-root=../tools/OpenBLAS/install –cudatk-dir=/opt/cuda’’’
-
Alterar o arquivo kaldi.mk, incluindo as flags -L e -Wl,-rpath na variável OPENBLASLIBS. Essas flags devem indicar onde estão as bibliotecas do g++-6 que serão usadas em tempo de compilação e de execução. ```OPENBLASLIBS = -L/media/dados/git/kaldi-jcsilva/tools/OpenBLAS/install/lib -lopenblas -L/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.1/ -lgfortran -Wl,-rpath=/media/dados/git/kaldi-jcsilva/tools/OpenBLAS/install/lib -Wl,-rpath=/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.1/’’’
-
Compilar ```make clean -j; make depend -j; make -j 4’’’