スパコンITO のサブシステムB(ITO-B)には GPU が搭載されています.ITO-B で TensorFlow を実行する方法を紹介します.GPU を使うためにバッチ処理が必要となります.そのため,Jupyterではなく,Pythonコードとして実行する必要があります.
スパコンITOのフロントエンドにおいて,TensorFlow を実行する手順はこちらの記事で紹介しました.手順はフロントエンドの場合と共通する部分が多いですが,ITO-Bでのバッチ処理の方が簡単です.
以下の手順はすべて スパコンITO の ログインノード で行います.
TensorFlow のインストール
Minicondaで構築した Python の base 環境を前提とします.anaconda channel
で仮想環境を構築し,anaconda channel
で tensorflow-gpu
パッケージをインストールします.この経緯はこちらの記事を参照ください.
こちらの記事で整備した Miniconda を用い,新しい仮想環境 tf を用意して,インストール作業を進めます.
$ conda create -c anaconda -n tf
$ conda activate tf
$ conda install -c anaconda tensorflow-gpu
ログインノードでは GPU が使用できないため,この段階で動作確認はできません.
バッチ処理スクリプトの作成
バッチ処理については公式サイトを参照ください.GPU の load を含む環境の整備やPythonコードの実行方法を含む bash script を作成します.以下は GPU を1つ使用する場合の,bash script ito_b.sh
です.矢印部分 ←
以降はコメントですので,実際は削除してください.リソースグループは公式サイトを参照して決めます.
#!/bin/bash
#PJM -L "rscunit=ito-b" ← ITO-B を指定
#PJM -L "rscgrp=ito-g-1" ← リソースグループ指定
#PJM -L "vnode=1" ← 使用するノード数を指定
#PJM -L "vnode-core=9" ← ノード当たりのコア数を指定
#PJM -L "elapse=12:00:00" ← 最大の計算時間の指定(12時間を指定)
#PJM -X ← ログインノードの環境変数をバッチ処理でも引き継ぐ指定
source ~/.bashrc # ← MinicondaがPythonの設定を.bashrcに書き込んでおり,これを読み込みます
module load cuda/10.1 # ← GPU を使用するため,CUDA 10.1 を load します
module list # ← CUDA が load されたことを確認します
conda activate tf # ← 仮想環境 tf に入ります
conda info -e # ← 仮想環境 tf に入ったことを確認します
python ann_experiments.py # ← Pythonコードを実行します
conda deactivate # ← 仮想環境から抜けます
バッチ処理はログインノードの環境を(環境変数以外は)引き継ぎませんので,CUDA の load や Python 環境の構築が必要になります.ログインノードで tf 仮想環境に入る必要はありません.この例では Python コードと ito_b.sh
は同一ディレクトリに存在していることを前提としています.
バッチジョブの投入
作成したバッチ処理スクリプト ito_b.sh
をバッチジョブとしてバッチ処理システムに投入します.
$ pjsub ito_b.sh
後は処理が終わるまで待つだけですので,ログアウトして構いません.
ジョブの状況を確認するには以下のようにします.
$ pjstat
バッチジョブが終わると,標準出力および標準エラー出力が,それぞれ ito_b.sh.o0000000
および ito_b.sh.e0000000
のようなファイル名で出力されます.ファイル名はバッチ処理スクリプト名に加え,oまたはeと7桁の数字で構成されています.標準出力ファイルが大きくなりすぎないよう,注意が必要です.