スパコン ITO の フロントエンドのベアメタルを利用すると,GPUを用いたインタラクティブな PyTorch の実行が可能です.バッチ処理であれば,ITO-BでもGPUの利用が可能です.
Miniconda をインストールしていることを前提に,conda-forge
を highest priority に設定し,仮想環境 torch を作成し,activate しておきます.
補足: 当初は こちらの記事 にあるように,dockerhubのpytorchイメージを Singularity で実行しようとしましたが,動きませんでしたので,ローカルインストールすることにしました.
conda config --add channels conda-forge
conda update conda
conda create -n torch
conda activate torch
インストール
ITO の cuda ドライバは最新バージョンに対応していませんので,利用可能な cuda ドライバのバージョンに合わせて,以前のバージョンから適切なインストールコマンドを見つける必要があります.ここでは cuda/11.0
を load して利用します.
module load cuda/11.0
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
テスト
インストールが成功したかテストします.Pythonのインタラクティブ環境ではShift + Enter(Windowsのキーボード)で入力になります.
(torch) $ python
Python 3.8.8 | packaged by conda-forge | (default, Feb 20 2021, 16:22:27)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> x=torch.rand(5,3)
>>> print(x)
tensor([[0.7027, 0.1075, 0.9553],
[0.6718, 0.3508, 0.2277],
[0.6082, 0.3109, 0.6119],
[0.6703, 0.1544, 0.2207],
[0.7046, 0.0201, 0.6421]])
>>> torch.cuda.is_available()
True
バッチ処理
ITO-B ではバッチ処理で GPU の利用が可能です.PyTorch を利用する実行用の bash スクリプトを run.sh
とします.以下の ito_b.sh
は GPU を1つ使用する場合の例です.矢印部分 ←
以降はコメントですので,実際は削除する必要があります.リソースグループは [公式サイト] (https://www.cc.kyushu-u.ac.jp/scp/system/ITO/subsystem/06_limit.html)を参照して決めます.
# !/bin/bash
# PJM -L "rscunit=ito-b" ← ITO-B を指定
# PJM -L "rscgrp=ito-g-4" ← リソースグループ指定
# PJM -L "vnode=1" ← 使用するノード数を指定
# PJM -L "vnode-core=36" ← ノード当たりのコア数を指定
# PJM -L "elapse=12:00:00" ← 最大の計算時間の指定(12時間を指定)
# PJM -X ← ログインノードの環境変数をバッチ処理でも引き継ぐ指定
source ~/.bashrc # ← MinicondaがPythonの設定を.bashrcに書き込んでおり,これを読み込みます
module load cuda/11.0 # ← GPU を使用するため,CUDA 11.0 を load します
module list # ← CUDA が load されたことを確認します
conda activate torch # ← 仮想環境 torch に入ります
conda info -e # ← 仮想環境 torch に入ったことを確認します
source ./run.sh # ← 実行用の bash script
conda deactivate # ← 仮想環境から抜けます
バッチ処理はログインノード環境を(環境変数以外は)引き継ぎませんので,CUDA の load や Python 環境の準備が必要になります.この例では ito_b.sh
と PyTorch のコードを実行するスクリプト run.sh
が同一ディレクトリに存在しています.
バッチジョブの投入
作成したバッチ処理スクリプト ito_b.sh
をバッチ処理システムに投入します.
pjsub ito_b.sh
後は処理が終わるまで待つだけですので,ログアウトして構いません.
ジョブの状況を確認するには以下のようにします.
pjstat
バッチジョブが終わると,標準出力および標準エラー出力が,それぞれ ito_b.sh.o0000000
および ito_b.sh.e0000000
のようなファイル名で出力されます.ファイル名はバッチ処理スクリプト名に加え,oまたはeと7桁の数字で構成されています.標準出力ファイルが大きくなりすぎないよう,注意が必要です.