Skip to content

Instantly share code, notes, and snippets.

@keisukefukuda
Last active April 20, 2019 09:41
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save keisukefukuda/55e5a641d098cd1feb17269b4cc57e03 to your computer and use it in GitHub Desktop.
Save keisukefukuda/55e5a641d098cd1feb17269b4cc57e03 to your computer and use it in GitHub Desktop.
Reedbush環境での最新版Chainerのセットアップ方法
#!/bin/bash
GROUP=$(id -ng)
MYDIR=/lustre/${GROUP}/$USER
export HOME=$MYDIR
. /etc/profile.d/modules.sh
module load cuda9/9.1.85
module load anaconda3/4.3.0
module load openmpi/gdr/2.1.2/gnu
unset PIP_ROOT
export PYTHONUSERBASE=$MYDIR/.python
#!/bin/bash
#PBS -q h-debug # <-------------- 投入するキューを指定する
#PBS -l select=2:mpiprocs=2:ompthreads=1 #<-- 実行したいノード数と、ノードあたりプロセス数を記述する(ここでは合計4プロセス)
#PBS -W group_list=pz0xxx # <-------------- 自分のグループ名に書き換える
#PBS -l walltime=00:15:00 # <-------------- 実行時間上限を指定する
GROUP=$(id -ng)
MYDIR=/lustre/${GROUP}/${USER}
export HOME=$MYDIR
. $MYDIR/env.sh
cd $MYDIR
# デバッグ出力: Chainer と CuPy のバージョンを表示
python -c "import chainer; print(chainer.__version__)"
python -c "import cupy; print(cupy.cuda.nccl.get_version())"
mpiexec -x PYTHONUSERBASE \
python ./train_mnist.py -g --communicator pure_nccl

参考資料

手順(1)

Quick Start Guideの項目4〜14を参考に、初期設定を行い、ログインできることを確認する

手順(2)

以下の手順で、 CUDA 9.1 上に Chainer 5.1.0をインストールできる。 現時点では、CUDA 9.2 のmoduleで一部問題があったので9.1を利用している。

環境設定

計算ノードからはHOMEは見えないので、Lustreを事実上のHOMEとして用いる。

$ cd /lustre/$(id -ng)/$USER/

環境設定ファイル env.sh を作成する(内容は、このgistの別ファイル参照)

$ vi env.sh

env.shを読み込む。この操作はログインのたびに毎回行うので、 .bash_profile 等に書くと良い。

$ . /lustre/$(id -ng)/$USER/env.sh

pip

次に、pipで必要なモジュールをインストールする。env.sh内に定義されている PYTHONUSERBASE の定義により、 Lustre下にインストールされる

# pip install は、ファイルシステムの調子によって、数分〜5分かかる場合があるので気長に待つ
$ pip install --user mpi4py
$ pip install --user cupy-cuda91==5.1.0
$ pip install --user chainer==5.1.0

MNISTの実行準備

ChainerのMNISTサンプルは、初回実行時にHOMEディレクトリにMNISTデータをダウンロードする。計算ノードからはインターネットにアクセスできないので、ログインノードでMNISTを一回実行してデータをダウンロードさせる。この実行はChainerMNである必要はない。(まちがえてmasterブランチのtrain_mnist.pyをダウンロードするとエラーで実行できないので注意) (なお、手動でデータをコピーしても良い)

# NOTE: env.shの実行を忘れないように
$ wget https://raw.githubusercontent.com/chainer/chainer/v5.1.0/examples/mnist/train_mnist.py -O train_mnist_single.py
$ python train_mnist_single.py -e 1

次に、ChainerMN用の train_mnist.py をダウンロードする。(まちがえてmasterブランチのtrain_mnist.pyをダウンロードするとエラーで実行できないので注意)

$ wget https://raw.githubusercontent.com/chainer/chainer/v5.1.0/examples/chainermn/mnist/train_mnist.py

最後に、ジョブを実行するためのジョブスクリプトを記述する(内容はこのGistの別ファイル参照)

$ vi job.sh

MNISTの実行と確認

ジョブを投入する。

$ chmod +x job.sh
$ qsub job.sh

ジョブが投入されたことを確認する

$ rbstat 
Reedbush-H scheduled stop time: 2019/01/29(Tue) 09:00:00 (Remain: 18days 17:20:19)
Reedbush-L scheduled stop time: 2019/01/29(Tue) 09:00:00 (Remain: 18days 17:20:19)
Reedbush-U scheduled stop time: 2019/01/29(Tue) 09:00:00 (Remain: 18days 17:20:19)

JOB_ID     JOB_NAME   STATUS  PROJECT    QUEUE           START_DATE       ELAPSE   TOKEN    NODE
1405000    job.sh     RUNNING pz0425     h-debug         01/10 15:39:08   00:00:24 0.1      2

暫く待つとジョブが終了するので、結果を確認する

$ cat job.sh.o1405000
5.1.0
2115
[1547102403.645058] [a086:18043:0]         sys.c:744  MXM  WARN  Conflicting CPU frequencies detected, using: 2600.72
[1547102403.645032] [a086:18044:0]         sys.c:744  MXM  WARN  Conflicting CPU frequencies detected, using: 2600.72
[1547102405.171371] [a087:22918:0]         sys.c:744  MXM  WARN  Conflicting CPU frequencies detected, using: 2602.44
[1547102405.171374] [a087:22919:0]         sys.c:744  MXM  WARN  Conflicting CPU frequencies detected, using: 2602.44
==========================================
Num process (COMM_WORLD): 4
Using GPUs
Using pure_nccl communicator
Num unit: 1000
Num Minibatch-size: 100
Num epoch: 20
==========================================
epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.296747    0.123968              0.912467       0.9644                    5.49285
2           0.0975135   0.0798887             0.971667       0.9751                    6.85029
3           0.0583089   0.0665895             0.982667       0.9792                    8.19364
4           0.0378759   0.066392              0.988534       0.9797                    9.50622
5           0.028316    0.063212              0.991          0.9808                    10.8018
6           0.0177264   0.070744              0.9954         0.9804                    12.0978
7           0.0113274   0.0690856             0.996733       0.981                     13.3992
8           0.0106449   0.0800302             0.996067       0.9783                    14.7028
9           0.0119948   0.0708811             0.996267       0.9802                    16.0077
10          0.0135936   0.0718536             0.995533       0.9824                    17.3134
11          0.0102226   0.0728081             0.996334       0.9824                    18.6169
12          0.00913799  0.0785161             0.996867       0.9815                    19.9324
13          0.00474206  0.0799097             0.998267       0.9819                    21.279
14          0.00706878  0.0834321             0.997867       0.9822                    22.6339
15          0.00450557  0.0818857             0.998533       0.9838                    23.9803
16          0.00815668  0.0878528             0.996733       0.9812                    25.3374
17          0.0154402   0.079348              0.9958         0.9822                    26.6402
18          0.00871023  0.0872598             0.996667       0.9789                    27.9572
19          0.00753859  0.0731627             0.997467       0.9842                    29.278
20          0.00245414  0.0770232             0.9994         0.9852                    30.596


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment