ABCIで機械学習環境を爆速で構築する


0. 概要

ABCIというスパコン的なAI研究のためのハードウェアリソース基盤が凄いらしい。
https://abci.ai/ja/

使ってみようとしたところ、使うまでが結構難しいのでまとめてみた。

簡単に以下の手順が必要である。

  • アカウント登録
  • 公開鍵登録
  • asにログイン
  • esにログイン
  • 計算ノードへログイン
  • GPUを使える!

TL;DR

以下の3ステップで計算ノードへ接続できます。

host$ ssh <YOUR_USERNAME>@as.abci.ai -L 10022:es:22
host$ ssh -XC -p 10022 -l <YOUR_USERNAME> localhost
es$ qrsh -g <YOUR_GROUPNAME> -l rt_F=1 -pty yes -display $DISPLAY -v TERM /bin/bash

1. 環境構築

計算ノードに接続するところまで環境構築を行う。

1.1. アカウント登録

以下のウェブサイトから申請してアカウントを発行
https://abci.ai/ja/how_to_use/member.html
次に、アカウントと仮パスワードを使ってログイン。

1.2. 公開鍵登録

ABCI利用ポータルに接続して、公開鍵を登録する。

1.3. SSHログイン (to as)

ACBIに公開鍵でログインする。

概要


この時、ログインするマシンはACBI内のasであるが、フォワーディングされて
es1~es4のどれかにログインすることになる。
esは1人あたり32MB程度しか割り当てられておらず、またGPU等も利用できない。
そこで、有料マシンの計算ノードに接続する必要がある。

asにssh

teraterm等のsshクライアントを使いログインを行う。

$ ssh <YOUR_USERNAME>@as.abci.ai -L 10022:es:22

こんな感じの画面が表示されれば成功である。

esにssh

次にesにログインする。
teraterm等のsshクライアントをもう1つ開き以下のように入力する

$ ssh -p 10022 -l <YOUR_USERNAME> localhost

これでWelcome to ABCI System等と表示されれば成功である。

1.4. 計算ノードへ接続

esにつないだところで、ただのハブである。
これから計算ノードを利用する。計算ノードの利用は有料である。今回はグループ単位で借りているとする。

es内で以下のコマンドを実行する

$ qrsh -g group -l resource_type=num [options]

例えば次のようにする$ qrsh -g gabxxxx -l rt_F=1
なお、リソースタイプは以下である。

おもむろにnvidia-smi -lを実行すると・・・

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  On   | 00000000:3D:00.0 Off |                    0 |
| N/A   25C    P0    41W / 300W |      0MiB / 16160MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla V100-SXM2...  On   | 00000000:3E:00.0 Off |                    0 |
| N/A   23C    P0    40W / 300W |      0MiB / 16160MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla V100-SXM2...  On   | 00000000:B1:00.0 Off |                    0 |
| N/A   23C    P0    42W / 300W |      0MiB / 16160MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla V100-SXM2...  On   | 00000000:B2:00.0 Off |                    0 |
| N/A   25C    P0    42W / 300W |      0MiB / 16160MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

1.5. Display変数を引き継いで接続

まずasにつないだ状態で以下のように接続する。
ただDisplay変数を引き継いで渡しているだけである。

host$ ssh -XC -p 10022 -l <YOUR_USERNAME> localhost
es$ qrsh -g <YOUR_GROUPNAME> -l rt_F=1 -pty yes -display $DISPLAY -v TERM /bin/bash

2. 機械学習環境

一先ず、TensorflowとKerasを入れてみる。

2.1. 初回

計算ノードにログインした状態で以下を実行する。

g0001$ module load python/3.6/3.6.5 cuda/10.0/10.0.130.1 cudnn/7.6/7.6.5
g0001$ python3 -m venv ~/venv/tensorflow-keras
g0001$ source ~/venv/tensorflow-keras/bin/activate
(tensorflow-keras) g0001$ pip3 install --upgrade pip setuptools
(tensorflow-keras) g0001$ pip3 install tensorflow-gpu==1.15 keras

これでtensorflow及びkerasのインストールが終わった。

2.2. 2度目以降

簡単!

g0001$ module load python/3.6/3.6.5 cuda/10.0/10.0.130.1 cudnn/7.6/7.6.5
g0001$ source ~/venv/tensorflow-keras/bin/activate

99. その後