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.

infiniband接続のホスト上のnvidia-docker2でchainermnを動かす

Last updated at Posted at 2018-11-21

やりたいこと

chainermnのサンプルをinfiniband接続のhost上で稼働するnvidia-docker2コンテナ内で動かす.(ただし,この記事ではとりあえず,ノード数1で動かすことを目指す)

何故この記事を書いた?

Infiniband接続のPC内のdocker上でchainermnを使おうとすると,multi-gpu (multi-nodeではない)であっても,dockerに対してInfinibandのdriverを入れる必要があるようだったので,備忘録として.

環境・前提

Host

  • Ubuntu16.04 x64
  • Infiniband (Mellanox)

Docker Image (nvidia-docker2)

  • docker-image: 9.0-cudnn7-devel
  • gitやらなんやらある程度インストールしてある状況を想定。まっさらなものから設定するときは、基本的に各項目の[参考]リンクを参照。

この作業をした日

2018.11.20

まず確認すること

最新版のchainer(5.0.0)にはchainermnが含まれているようです。現時点では古い情報のほうが多いようです。例えば、サンプルコードは[ここのもの]
(https://github.com/chainer/chainer/blob/master/examples/chainermn/mnist/train_mnist.py)を使うべきです。

このコードをlocalに落として来て、下記が動くようであれば、何もする必要がありません。

% export CUDA_VISIBLE_DEVICES='0,1';\
  mpiexec -n 2 train_mnist.py -g

ちなみに,googleで「chainermn mnist」くらいで検索するとこちらの公式インストラクションがヒットしますが,今回はシステムの動作確認なので,手動での変更方法に関するこのインストラクションは使わず,gitにあるサンプルコードを使うのが吉.(地味にこれが一番罠だったかも。何も考えず勉強がてら,インストラクションに従ってコーディングしたが,エラーの原因がコードにあるのかシステムの設定にあるのかわからなくなった.当たり前だけれど,システムの設定をしたいのに手動で編集したコードを使うのは全く良いアイディアではない。)

手順

1. コンテナにinfinibandのドライバーをインストールする(参考)

apt-get install -y autoconf automake swig m4 chrpath dpatch
cd /tmp
wget http://content.mellanox.com/ofed/MLNX_OFED-4.2-1.0.0.0/MLNX_OFED_LINUX-4.2-1.0.0.0-ubuntu16.04-x86_64.tgz
tar -xvzf MLNX_OFED_LINUX-4.2-1.0.0.0-ubuntu16.04-x86_64.tgz
MLNX_OFED_LINUX-4.2-1.0.0.0-ubuntu16.04-x86_64/mlnxofedinstall --user-space-only --without-fw-update --all -q

必要に応じて、最後のinstallスクリプトに--forceオプションを渡す。

2. openmpi3.0.0をソースからコンパイル(参考)

ちなみにコンパイル済みのcupyパッケージを使うと以下の手順は不要かも.

apt install -y --no-install-recommends libtool flex
git clone --depth=1 -b v3.0.0 https://github.com/open-mpi/ompi.git /tmp/ompi
cd /tmp/ompi
./autogen.pl
./configure --with-cuda --with-hwloc
make -j8
make install

3. mpi4pyをインストールする

もし既にインストール済みなら一旦削除してから入れ直す

pip uninstall mpi4py
pip install mpi4py --no-cache

コンパイルに失敗するようなら、setuptoolsのリンクが切れている可能性がある。私の場合はlibopen-palが見つからなかった(といわれるのにldconfig -v|grep libopen-palは存在していた)。baseとなるライブラリが入れ替わったためと思われたので、setuptoolsを再インストールした。

pip install setuptools --force

4. chainerをインストールする

ここまでできたら、chainerをインストールします。もし、すでにインストール済みのものがあれば、一旦uninstallします。

pip uninstall cupy chainer chainermn
pip install cupy chainer --no-cache

5. 動かしてみる

wget https://raw.githubusercontent.com/chainer/chainermn/release/1.3/examples/mnist/train_mnist.py 
export CUDA_VISIBLE_DEVICES='0,1'
mpiexec --allow-run-as-root -n 2 python train_mnist.py -g
0
0
3

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?