漢なら 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_HOME
と NCCL_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 を使うことにより, 人類史上最速で優秀な分散機械学習若人へと昇華するスキームを確立する旅に出たい.