티스토리 뷰

개발/기계학습

[Kaldi] install ( feat. on Mac )

Jaeyeon Baek 2019. 1. 24. 12:39

http://kaldi-asr.org/

Kaldi Speech Recognition Toolkit 의 동작에 대한 기본 테스트를 MacOS 에서 진행한 경험을 기록 합니다. 보통의 오픈소스를 살펴보면 READMD.md 와 같은 파일을 두고 그 안에서 설치 가이드를 제공하고 있는데 KaldiREADME 에서 그런 언급을 하지 않고 대신 INSTALL ( plain-text ) 파일을 제공합니다. 그럼 이제 INSTALL 파일을 확인하고 설치를 진행해보도록 합니다.

우선 GitHub 을 통해 공개되어 있는 Kaldi 소스코드를 내려 받습니다.

git clone https://github.com/kaldi-asr/kaldi.git

소스 디렉터리 홈에 있는 INSTALL 파일을 열어보면 다음과 같은 내용이 쓰여 있습니다.

This is the official Kaldi INSTALL. Look also at INSTALL.md for the git mirror installation.
[for native Windows install, see windows/INSTALL]

(1)
go to tools/  and follow INSTALL instructions there.

(2)
go to src/ and follow INSTALL instructions there.

파일의 내용을 순서대로 실행하면 되는데 우선 (1) 에서 안내해주는 tools/INSTALL 파일을 확인하도록 합니다.

(1) tools/INSTALL

To check the prerequisites for Kaldi, first run

  extras/check_dependencies.sh

and see if there are any system-level installations you need to do. Check the
output carefully. There are some things that will make your life a lot easier
if you fix them at this stage. If your system default C++ compiler is not
supported, you can do the check with another compiler by setting the CXX
environment variable, e.g.

  CXX=g++-4.8 extras/check_dependencies.sh

Then run

  make

which by default will install ATLAS headers, OpenFst, SCTK and sph2pipe.
OpenFst requires a relatively recent C++ compiler with C++11 support, e.g.
g++ >= 4.7, Apple clang >= 5.0 or LLVM clang >= 3.3. If your system default
compiler does not have adequate support for C++11, you can specify a C++11
compliant compiler as a command argument, e.g.

  make CXX=g++-4.8

If you have multiple CPUs and want to speed things up, you can do a parallel
build by supplying the "-j" option to make, e.g. to use 4 CPUs

  make -j 4

In extras/, there are also various scripts to install extra bits and pieces that
are used by individual example scripts.  If an example script needs you to run
one of those scripts, it will tell you what to do.

안에 내용은 크게 두 가지로 나눌 수 있는데, 첫 번째는 Kaldi 에 필요한 dependencies 확인하는 내용이고, 두 번째는 필요한 패키지를 컴파일 하는 내용입니다. 일단 dependenciescheck_dependencies.sh 스크립트를 통해 다음과 같이 확인합니다. ( 실제 스크립트의 결과에는 "\" 가 없이 한줄에 표현됩니다. 여기서는 편의상 한눈에 볼 수 있도록 "\" 문자와 함께 개행을 추가했습니다. 뒤에 나오는 모든 결과도 마찬가지로 처리 됩니다. )

$ extras/check_dependencies.sh
extras/check_dependencies.sh: automake is not installed.
extras/check_dependencies.sh: autoconf is not installed.
extras/check_dependencies.sh: neither libtoolize nor glibtoolize is installed
extras/check_dependencies.sh: python2.7 is installed, but the python2 binary does not exist.\
                              Creating a symlink and adding this to tools/env.sh
extras/check_dependencies.sh: WARNING python 2.7 is not the default python. We fixed this by\
                              adding a correct symlink more prominently on the path.
extras/check_dependencies.sh: If you really want to use python 3.6.5 as default, add an empty\ 
                              file /Users/caley/work/kaldi/tools/python/.use_default_python \
                              and run this script again.

내용을 확인해보면 설치되지 않은 패키지들이 보입니다. 먼저 여기서는 python3 을 기본으로 사용할 것이기 때문에 가이드대로 kaldi/tools/python/.use_default_python 파일을 다음과 같이 생성해줍니다.

$ touch /Users/caley/work/kaldi/tools/python/.use_default_python

brew 를 통해 automake 를 설치합니다. ( brew 가 Mac 에 설치되어 있지 않다면 다음 링크를 참고하세요 : https://brew.sh/index_ko )

$ brew install automake
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/core, homebrew/cask and adoptopenjdk/openjdk).
==> Updated Formulae
bash                  coreutils             kubernetes-helm       
libvterm              nuxeo                 puzzles               swiftlint
chronograf            gitlab-runner         libbi                 libxml2               
platformio            quex                  wireguard-tools
==> Deleted Formulae
liblastfm

==> Installing dependencies for automake: autoconf
==> Installing automake dependency: autoconf
==> Downloading https://homebrew.bintray.com/bottles/autoconf-2.69.high_sierra.bottle.4.tar.gz
######################################################################## 100.0%
==> Pouring autoconf-2.69.high_sierra.bottle.4.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/autoconf
==> Summary
🍺  /usr/local/Cellar/autoconf/2.69: 71 files, 3.0MB
==> Installing automake
==> Downloading https://homebrew.bintray.com/bottles/automake-1.16.1_1.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring automake-1.16.1_1.high_sierra.bottle.tar.gz
🍺  /usr/local/Cellar/automake/1.16.1_1: 131 files, 3.4MB
==> Caveats
==> autoconf
Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/autoconf

libtool 도 마찬가지로 brew 를 통해 설치합니다.

$ brew install libtool
==> Downloading https://homebrew.bintray.com/bottles/libtool-2.4.6_1.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libtool-2.4.6_1.high_sierra.bottle.tar.gz
==> Caveats
In order to prevent conflicts with Apple's own libtool we have prepended a "g"
so, you have instead: glibtool and glibtoolize.
==> Summary
🍺  /usr/local/Cellar/libtool/2.4.6_1: 71 files, 3.7MB

prerequisites 에 명시된 필요한 패키지를 모두 설치해줬으니 check_dependencies.sh 를 다시 실행시켜봅니다. 다음과 같이 모든 dependencies 패키지가 정상적으로 설치되어 있는 것을 확인할 수 있습니다.

$ extras/check_dependencies.sh
extras/check_dependencies.sh: all OK.

다음으로는 tools 하위에 있는 모듈들을 빌드 해야 합니다. 컴파일은 make 로 진행되며 명령어를 멀티코어로 돌리기 위해 우선 CPU 의 개수를 확인해야 합니다. MacOS 에서 CPU 개수는 다음과 같이 확인할 수 있습니다.

$ sysctl -n hw.ncpu
12

12 코어로 확인되었으니 make -j 옵션에 12 를 parameter 로 넘겨서 make 가 12개의 jobs 으로 동작되도록 해줍니다.

$ make -j 12
...
make[5]: Nothing to be done for `install-exec-am'.
make[5]: Nothing to be done for `install-data-am'.
make[4]: Nothing to be done for `install-exec-am'.
make[4]: Nothing to be done for `install-data-am'.
make[3]: Nothing to be done for `install-exec-am'.
make[3]: Nothing to be done for `install-data-am'.
rm -f openfst
ln -s openfst-1.6.7 openfst
-e


Warning: IRSTLM is not installed by default anymore. If you need IRSTLM
Warning: use the script extras/install_irstlm.sh
All done OK.

모든 과정이 완료될 때까지 잠시 기다리고, 다음 단계로 넘어갑니다.

(2) src/INSTALL

src/INSTALL 파일의 내용을 확인해보면 일반적인 오픈소스의 컴파일 순서처럼 configure, make depend, make 세 가지 단계로 동일하게 처리 됩니다. 


These instructions are valid for UNIX-like systems (these steps have
been run on various Linux distributions; Darwin; Cygwin).  For native Windows
compilation, see ../windows/INSTALL.

You must first have completed the installation steps in ../tools/INSTALL
(compiling OpenFst; getting ATLAS and CLAPACK headers).

The installation instructions are

  ./configure --shared
  make depend -j 8
  make -j 8

Note that we added the "-j 8" to run in parallel because "make" takes a long
time.  8 jobs might be too many for a laptop or small desktop machine with not
many cores.

For more information, see documentation at http://kaldi-asr.org/doc/
and click on "The build process (how Kaldi is compiled)".

그럼 우선 configure 를 먼저 실행해주고,

$ ./configure --shared
Configuring ...
Checking compiler g++ ...
Checking OpenFst library in /Users/caley/work/kaldi/tools/openfst ...
Checking cub library in /Users/caley/work/kaldi/tools/cub ...
Doing OS specific configurations ...
On Darwin: Checking for Accelerate framework ...
Configuring for OS X version 10.13 ...
Successfully configured for Darwin with Accelerate framework.
CUDA will not be used! If you have already installed cuda drivers
and cuda toolkit, try using --cudatk-dir=... option.  Note: this is
only relevant for neural net experiments
SUCCESS
To compile: make clean -j; make depend -j; make -j
 ... or e.g. -j 10, instead of -j, to use a specified number of CPUs

make depend 를 실행합니다. 앞에 (1) 번과 동일하게 현재 CPU 가 12 core 로 구성되어 있으므로 -j 옵션에는 12를 명시해줬습니다.

$ make depend -j 12

마지막으로 make 를 실행합니다.

$ make -j 12
...
...
g++  -Wl,-rpath -Wl,/Users/caley/work/kaldi/tools/openfst/lib -g  -Wl,-rpath -Wl,\
/Users/caley/work/kaldi/src/lib  lattice-lmrescore-kaldi-rnnlm.o   \
../rnnlm/libkaldi-rnnlm.dylib  ../nnet3/libkaldi-nnet3.dylib  \
../cudamatrix/libkaldi-cudamatrix.dylib  ../lat/libkaldi-lat.dylib  \
../lm/libkaldi-lm.dylib  ../fstext/libkaldi-fstext.dylib  \
../hmm/libkaldi-hmm.dylib  ../tree/libkaldi-tree.dylib  ../util/libkaldi-util.dylib  \
../matrix/libkaldi-matrix.dylib  ../base/libkaldi-base.dylib \
/Users/caley/work/kaldi/tools/openfst/lib/libfst.dylib -framework Accelerate \
-lm -lpthread -ldl  -o lattice-lmrescore-kaldi-rnnlm
echo Done
Done


마무리

여기까지해서 Kaldiinstall 과정이 모두 끝났습니다. Kaldi 는 요즘 빠르게 발전하고 있는 다른 Speech Recognitions 와는 다르게 설치 과정에 어려움이 없었습니다. 대부분의 머신러닝 관련 오픈소스가 GPU 를 사용해야 하는 이유때문에 Nvidia 사용에 어려움이 없는 Ubuntu 에 초점이 많이 맞춰져 있기 때문에 MacOS 에서는 여러 패키지 설치부터 어려움이 많이 있습니다. 겪어보지 않으면 Kaldi 의 설치가 얼마나 깔끔하게 되어 있는지 알 수 없죠. 아무튼 다음편에는 설치한 Kaldi 에 포함되어 있는 샘플 스크립트를 사용해보는 과정에 대해 기술하도록 하겠습니다.


If you have difficulty installing Kaldi, please contact me by comment or e-mail.




댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday