0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

flashlight と wav2letter++ をビルドするメモ

Last updated at Posted at 2019-01-01

C++ 機械学習ライブラリ

のビルドメモです.

環境

  • Ubuntu 16.04
  • CUDA 9.2
    • CUDA 10 ではビルドはできるが arrayfire の cublas テストが失敗するので動かないかも

Docker ビルドでは動かない...?

flashlight には Docker でのビルドがありますが, こちらの環境ではドライバのバージョンとかが悪いのか, Docker 環境に nvidia-docker で入って flashlight example を動かそうとすると GPU に最初にアクセスするときあたりで止まってしまいました.

したがってネイティブ環境でビルドしてみます.

ネイティブ環境でビルドする.

基本的には Dockerfile に書かれているようにすればコンパイルと動作ができます.

まずは flashlight が依存している arrayfire をビルドします.

コンパイラの設定

普段 ccache を使うために CXX=ccache clang++ としていますが, nvcc が ccache をうまく扱えない & clang++ が新しすぎると(2019 年 01 月 01 日時点 7.0.0 とか) nvcc がうまく動かないので, CXX=g++ cmake ... などとして gcc を指定しておきます.

arrayfire + CUDA 10

flashlight は CUDA 9.2 をターゲットにしています. 一応 CUDA 10 でもコンパイルできますが, cublas テストが失敗するのでまだ使えないかもです
(また, deprecated な math_function.h を使っている warning が出ます)

CUDA 10 を利用している場合は, arrayfire のビルド時に cmake が古いと cublas を見つけてくれません.
cmake 3.13.2 以上であれば cublas を見つけてくれます.

cublas は apt で入るものを使いました.

wav2letter++

オーディオ関連のライブラリを apt で入れます.

$ sudo apt install libflac-dev libsndfile1-dev

他の依存ライブラリはソースからビルドしないとダメそうです.

$HOME/local をインストール先にするものとします(-DCMAKE_INSTALL_PREFIX=$HOME/local)

gtest

Getst は ubuntu で入るのは古いので, ソースからビルド(v1.8.x)します. 

sndfile

sndio 周りでビルドに失敗するので sndio を off(cmake/SndFileChecks.cmake でコメントアウト)にしてビルドします.

KenLM

test プログラムのビルドで isnan エラーがでるかもしれません. std::isnan に書き換えておきます.

KenLM は cmake install では bin しかインストールしてくれないので, ビルドしたディレクトリと .a のパスを後述の cmake に設定します.

MKL

Intel のサイトから落としてインストールします.

cmake configure

cmake の引数で GTEST_ROOT=/path/to/gtest で gtest のディレクトリを指定します.

INTEL_MKL_DIR で MKL のインストールディレクトリを指定します.

ccache や clang だと nvcc 内部でのコンパイラ呼び出しで失敗したりするので, Ubuntu 標準の g++, gcc を使うようにします.

最終的にこんな感じになりました.

rm -rf build
mkdir build

CXX=g++ CC=gcc cmake -Bbuild -H. -DCMAKE_BUILD_TYPE=Release -DCRITERION_BACKEND=CUDA \
  -DINTEL_MKL_DIR=$HOME/intel/mkl \
  -DKENLM_DIR=$HOME/work/kenlm \
  -DKENLM_LIB=$HOME/work/kenlm/build/lib/libkenlm.a \
  -DKENLM_UTIL_LIB=$HOME/work/kenlm/build/lib/libkenlm_util.a \
  -DGTEST_ROOT=$HOME/local

TODO

  • CUDA10 で動かす
  • なんだかんだで依存ライブラリが多いのでビルドスクリプトを用意する
  • Docker で動かない原因を探る
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?