LoginSignup
3
3

More than 5 years have passed since last update.

ChainerMN を Ubuntu 16.04 でビルドする

Posted at

漢なら ChainerMN で大規模分散機械学習やりたいですね!

とりあえずビルドしましょう!

Environment

  • Ubuntu 16.04.2 64bit
  • CUDA 8.0 64bit(/usr/local/cuda)
  • virtualenv で python 2.7 環境がインストールされている

CUDA_HOME 環境変数に CUDA のパス(/usr/local/cuda)が設定されているものとします.

MPI with CUDA

CUDA 有効の OpenMPI をビルドします. apt で入る
OpenMPI と切り分けるために, $HOME/local/openmpi にインストールするものとします.

$ ./configure --with-cuda --prefix=$HOME/local/openmpi
$ make -j1  # 並列ビルドだとこけるときがある
$ make install

LD_LIBRARY_PATH$HOME/local/openmpi/lib, PATH$HOME/local/openmpi/bin を追加しておきます.

NVIDIA NCCL

ChainerMN の installation doc そのままに従います.

以降, NCCL_ROOT/build に NCCL のビルド成果物があるとします.

Cython

pip で入れます.

$ pip install cython

mpi4py

pip install だと apt でビルドされた MPI を仮定するようで, インストールはできるが mpirun 時にこけてしまうので, CUDA-aware MPI の mpicc で再ビルドします.

# $HOME/local/openmpi/bin の mpicc を使っていることを確認
$ which mpicc
$ python setup.py build
$ python setup.py install

ChainerMN

そのまま pip install chainermn すると, CUDA のヘッダが見つからないとか言われます.

nccl.c のコンパイルに CUDA と NCCL が必要になります.
CPATH を設定すればいけるっぽいですが, なんか面倒だったのでソースからビルドし, CUDA_HOMENCCL_ROOT を見るようにしました.

$ python setup.py build
$ python install

Voala! これで ChainerMN をビルド + 動かす環境が整いました.

TODO

  • Chainer で実際の学習コードを書く
  • InfiniBand + multiple GPU でマルチノード + 複数 GPU で学習させる
  • GPU マイニングで活用している GPU を転用して, Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour にチャレンジしたい https://research.fb.com/publications/imagenet1kin1h/
  • 優秀な機械学習若人が, ChainerMN を使うことにより, 人類史上最速で優秀な分散機械学習若人へと昇華するスキームを確立する旅に出たい.
3
3
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
3
3