1

新スーパーコンピュータ「ITOシステム」利用講習会
九州大学情報基盤研究開発センター
２０１７年１０月

2

ITOシステムの構成

3

ITOシステムの特徴• 最新ハードウェア技術• Intel Skylake-SP• NVIDIA Pascal + NVLink• Mellanox InfiniBand EDR• 対話的な利用環境の拡充• 合計 164ノードのフロントエンド• ノード当たりメモリ量：
384GB ～ 12TB
• 外部システムとの接続性向上• パブリッククラウドとの連携• オープンデータへのアクセス

4

本講習会の内容• ITOシステム利用手段の選択• 利用の準備• ログインノード、ITOポータルの利用• フロントエンドの利用（富士通社より説明）• バックエンドの利用• ITOシステムのソフトウェア

5

ITOシステム利用手段の選択• ログインノード• 主に、ファイルの編集やコンパイル、ジョブ投入等の基本操作• HPCポータル• Webインタフェースによるファイル操作、コンパイル、ジョブ投入
ログインノード
ITOポータル• フロントエンド• GUI等による対話的な大規模データの操作、解析• バックエンド• 大規模計算

バックエンド

フロントエンド6

利用の準備• 利用登録• 利用申請書入手• 本センターの Webサイト

https://www.cc.kyushu-u.ac.jp/scp/「利用案内」⇒「センターご利用のための手続き」• ユーザIDと初期パスワードを確認• 返送される利用承認書に記述• 初期パスワード変更• ITOポータル
https://ito-portal.cc.kyushu-u.ac.jp/itoportal• 公開鍵登録• ログインノード、フロントエンド、バックエンドの利用に必要

7

公開鍵の登録• 鍵ペア（秘密鍵、公開鍵）• まだ作成していなければ、新規に作成• Windows:

端末エミュレータ（MobaXterm、Putty、TeraTerm等）に付属の作成ツール• MacOS X、Linux:
ターミナルで ssh-keygen• SSH-1(RSA)等の古い鍵ではログイン不可⇒ 新規に鍵ペアを作成• 公開鍵の登録• 本センター Webサイト：「システム」⇒「スーパーコンピュータシステムITO」⇒「ログイン方法」⇒「HPC Portalを利用した鍵登録方法」

8

ログインノードの利用• Windows: 端末エミュレータを利用• MobaXterm、Putty、TeraTerm等• ホスト名： ito.cc.kyushu-u.ac.jp• 認証方法： 「SSH認証」で、「プライベートキー」として、作成した秘密鍵を指定• MacOS X、Linux: ターミナルでsshコマンドを利用$ ssh -i 秘密鍵のパス ITOのユーザID@ito.cc.kyushu-u.ac.jp• ログインノードの利用制限：

メモリ 2GB以下、連続計算時間 1時間（全スレッド合計）• 多数の利用者が同時にログインして利用するため• 大規模な計算は、フロントエンド、もしくはバックエンドで実行

9

ITOポータルの利用• URL:

https://ito-portal.cc.kyushu-u.ac.jp/itoportal• 主な操作：• 各種マニュアル参照• ファイル操作• ファイル編集、コピー、移動、削除• 手元の PCからのアップロード、ダウンロード• コンパイル• Fujitsuコンパイラ、Intelコンパイラ• OpenMP、MPI、MKL、SSL2• バックエンドへのジョブ操作• ジョブ作成、投入• 状態表示• バックエンドの混雑状況確認• 投入したジョブの状況表示、削除• ディスク使用量確認

10

実習０
ログインノード、ITOポータルの利用• ０．初期パスワード変更• １．MobaXtermへの鍵の登録• ２．ログインノードへのログイン• ３．ITOポータルへのログイン

11０．初期パスワード変更
1. ITOポータルにアクセス

https://ito-portal.cc.kyushu-u.ac.jp/itoportal
2. 配布されたユーザIDと初期パスワードでログイン
3. 新しいパスワードを入力（２回）• 8文字以上

12

１．MobaXtermへの鍵の登録
1. MobaXtermを起動
2. Settingsをクリック
3. SSHをクリック
4. 「Use internal SSH agent "MobAgent" のボックスをチェック
5. その下の右側の + をクリック
6. デスクトップの ito_id_rsa.ppk をダブルクリック7. OKをクリックし、さらに OKをクリックして、MobaXtermを再起動

13

２．ログインノードへのログイン
1. 秘密鍵のパスフレーズ lect1013 を入力
2. 「Session」をクリック
3. 「SSH」をクリック
4. Remote hostに ito.cc.kyushu-u.ac.jp
5. Specify usernameの左のボックスをクリック
6. その右のボックスにユーザ IDを入力
7. ログインできたことを確認したら、ログアウト

14

３．ITOポータルへログイン
1. ブラウザ起動
2. 以下の URLにアクセス

https://ito-portal.cc.kyushu-u.ac.jp/itoportal
3. ユーザIDとパスワードを入力
4. ファイル操作、コンパイル、ジョブ、状態表示、をそれぞれ選択して、表示を確認

5. メイン で、マニュアルを選んで表示
6. ログアウト15

フロントエンドの利用• 富士通社から説明• 基本的な流れ：

https://www.cc.kyushu-u.ac.jp/scp/system/ITO/frontend/
１．予約システムにログイン
２．システムの空き状況確認
３．自分の利用状況確認
４．予約
５．メールで IPアドレス通知
６．ログインノード経由で指定アドレスにログイン

16

SSHエージェントフォワーディング機能• フロントエンドで予約したホストへのログインに利用

https://www.cc.kyushu-u.ac.jp/scp/system/ITO/frontend/02_login.html• ログインノードを経由した二段階ログイン• 手元のPCの秘密鍵をログインノードにコピーせず、予約ホストにログイン可能• Windows:

端末エミュレータの機能を利用• MobaXtermの利用を推奨• MacOS X:.ssh/configを編集• Linux:

ssh-agentおよび ssh-addを利用

17

バックエンドの利用• バッチシステムによる利用• ログインノード、ITOポータル、フロントエンドからジョブ投入• 基本的な流れ：

１．ジョブスクリプト作成
２．ジョブ投入

ログインノード
ITOポータル

フロントエンド（システムの空き状況に応じて、順にジョブを実行）
３．完了を待って、出力ファイル確認
バックエンド計算結果

18

バッチシステムの仕組み#!/bin/sh• 処理してほしい内容を記述したファイルを投入• ジョブとして受付• 資源の空き状況に応じて順に処理される• 要求内容や空き状況によっては先を越されることも#PJM -L "vnode=4"#PJM -L "vnode-core=36"#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-16"#PJM -L "elapse=10:00"
export OMP_NUM_THREADS=4
mpiexec -n 16 ./a.out

リソースグループ（待ち行列）
ジョブの使用資源量（CPU,メモリ）で選択

ジョブ

小規模ジョブ用

中規模ジョブ用

大規模ジョブ用計算機

19

バッチシステムの必要性• 対話的な利用の限界:• 負荷が計算機で同時に処理可能な量を超えると,資源が空くまではコマンドの実行不可• 次にいつ資源が空くか不明• ジョブ実行要求を交通整理する仕組みが必要：バッチシステム• 要求された処理内容をジョブとして登録• 資源の空き状況に応じて自動的に実行開始

20

バッチ処理に用いるコマンド• バッチジョブの投入

pjsub• バッチジョブの状況

pjstat• バッチジョブのキャンセル

pjdel

21

pjsub バッチジョブの投入• コマンド$ pjsub オプション ジョブスクリプトファイル名• オプション：使用する資源等に関する指定• いつも同じ指定をするのであれば、ジョブスクリプトファイルの中に記述• pjsubコマンドでのオプション指定が優先• ジョブスクリプトファイル：依頼する処理内容• シェルスクリプトとして記述• 例）ジョブスクリプトファイル test.sh を投入$ pjsub test.sh[INFO] PJM 0000 pjsub Job 28246 submitted.

ジョブ ID

22

主なオプション
オプション

説明-L rscunit=name

リソースユニット名を指定（必須）-L rscgrp=name

リソースグループ名を指定（必須）-L elapse=h:m:s

ジョブの最大実行時間を h時間m分s秒に制限-L vnode=num

使用する仮想ノード数の最大値-L vnode_core=num

使用する仮想ノード当たりのコア数--mpi proc=procs

MPIのプロセス数（富士通MPI使用時のみ）-o filename

標準出力ファイル名(デフォルト： ジョブ名.oジョブID)-e filename

標準エラー出力ファイル名(デフォルト： ジョブ名.eジョブID)-j

標準エラー出力と標準出力を同じファイルに書き出す-N name

ジョブ名をジョブスクリプトファイル名から nameに変更-S投入したジョブのノード情報を含む統計情報を出力-X

ジョブ投入時の環境変数をジョブ実行環境に継承

23

リソースユニットとリソースグループ• リソースユニット：使用する計算機群の選択• サブシステムA（2018年1月運用開始予定）： ito-a• サブシステムB： ito-b• リソースグループ：使用する計算資源量の選択
リソースグループ名

ノード数

コア数

メモリサイズ

計算時間

備考

ito-g-4-dbg

136339GiB1時間

デバッグ専用GPU: 4基 x 1ノード

ito-g-16-dbg

436×4

339GiB×4

1時間

デバッグ専用GPU: 4基 x 4ノード

ito-g-4

136339GiB

48時間

シングルノードジョブ
GPU: 4基 x 1ノード

ito-g-16

436×4

339GiB×4

24時間

4ノードまで利用可能
GPU: 4基 x 4ノード

ito-test

1/12

3

28GiB

48時間

1/12ノード利用
GPU使用不可

1時間

デバッグ専用
1/12ノード利用
GPU使用不可ito-test-dbg

1/12

3

28GiB

24

最大実行時間を指定する理由• 「バックフィルスケジューリング」• 他のジョブを遅らせない範囲で、ジョブの追い越しを認める• 例）ジョブCを先に実行しても、ジョブBの実行開始時刻は変わらない

時間

追い越し

ジョブＣ

ジョブＢ
ジョブＡ

ジョブＢの開始予定時刻• 最大実行時間をリソースグループの制限値より短く設定⇒ 追い越し実行の可能性増• 注意： 最大実行時間を過ぎたジョブは強制終了

25

vnodeと vnode_core• 実ノード = 計算ノード• CPUコア数： 36コア
• vnode（仮想ノード）= バッチシステムが提供する仮想的なノード• 富士通MPIを利用する場合：• vnode = 最大プロセス数• vnode_core = プロセス内コア数• バッチシステムが MPIプログラムの実行を管理

例）vnode=16, vnode_core=9• 他のMPI（Intel MPI等）を利用する場合：• vnode = 使用する計算ノード数• vnode_core = ノード内コア数（36）• MPIライブラリの mpirunがMPIプログラムの実行を管理
例）vnode=4, vnode_core=36• 例）mpiexec.hydra -n 16

vnode

プロセス

26

プログラムの実行形態• 逐次• 1コアを使用• スレッド並列• 共有メモリでの並列実行• 基本的にスレッド数分のコアを使用• MPI並列（プロセス並列）• 分散メモリでの並列実行• 主に複数ノードを使用• 基本的にプロセス数分のコアを使用• ハイブリッド並列• 各プロセス内でスレッド並列実行• 主に複数ノードを使用• 基本的に、プロセス数 x スレッド数 のコアを使用

27

ジョブスクリプトファイルの様式• 通常のシェルスクリプト• 冒頭にジョブのオプションを指定可能• 実行開始時の作業ディレクトリ

= ジョブ投入時の作業ディレクトリ

#!/bin/sh

ジョブのオプション
実行コマンド実行コマンド…

28

ジョブスクリプト例：
逐次処理#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-test-dbg"
使用実ノード数#PJM -L "vnode=1"
使用コア数#PJM -L "vnode-core=1"#PJM -L "elapse=10:00"#PJM -j#PJM -XIntelコンパイラ利用時は、./a.out

module load intel/2017
を追加

11

29

ジョブスクリプト例：
スレッド並列処理（富士通コンパイラの自動並列化）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-4-dbg"#PJM -L "vnode=1"#PJM -L "vnode-core=36"#PJM -L "elapse=10:00"#PJM -j#PJM -X
export PARALLEL=36./a.out

使用実ノード数

1

使用コア数

36

30

ジョブスクリプト例：
スレッド並列処理（OpenMP）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-4-dbg"
使用実ノード数
1#PJM -L "vnode=1"
使用コア数
36#PJM -L "vnode-core=36"#PJM -L "elapse=10:00"#PJM -j#PJM -XIntelコンパイラ利用時は、
export OMP_NUM_THREADS=36./a.out

module load intel/2017
を追加

31

ジョブスクリプト例：
MPIによる並列処理（富士通MPI）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-16-dbg"
使用実ノード数#PJM -L "vnode=144"
使用コア数#PJM -L "vnode-core=1"#PJM -L "elapse=10:00"#PJM -j#PJM -X
mpiexec -n 144 ./a.out

4
144 (36 x 4)

32

ジョブスクリプト例：
ハイブリッド並列処理（富士通MPI + OpenMP）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-16-dbg"
使用実ノード数#PJM -L "vnode=24"
使用コア数#PJM -L "vnode-core=6"#PJM -L "elapse=10:00"#PJM -j#PJM -X

export OMP_NUM_THREADS=6
mpiexec -n 24 ./a.out

4
144 (36 x 4)

33

ジョブスクリプト例：
MPIによる並列処理（Intel MPI）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-16-dbg"#PJM -L "vnode=4"#PJM -L "vnode-core=36"#PJM -L "elapse=10:00"#PJM -j#PJM -X

使用実ノード数
使用コア数

module load intel/2017
export I_MPI_PERHOST=36
export I_MPI_FABRICS=shm:ofa
export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}
mpiexec.hydra -n 144 ./a.out

4144 (36 x 4)

34

ジョブスクリプト例：
ハイブリッド並列処理（Intel MPI + OpenMP）#!/bin/bash#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-16-dbg"#PJM -L "vnode=4"#PJM -L "vnode-core=36"#PJM -L "elapse=10:00"#PJM -j#PJM -X
module load intel/2017
export I_MPI_PERHOST=4
export I_MPI_FABRICS=shm:ofa
export I_MPI_PIN_DOMAIN=omp
export I_MPI_PIN_CELL=core
export OMP_NUM_THREADS=9export KMP_STACKSIZE=8m
export KMP_AFFINITY=compact
export I_MPI_HYDRA_BOOTSTRAP=rsh
export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh
export I_MPI_HYDRA_HOST_FILE=${PJM_O_NODEINF}
mpiexec.hydra -n 16 ./a.out

使用実ノード数
使用コア数

4144 (36 x 4)

35

pjstat ジョブの状態確認• 現在投入されているジョブの情報を表示• 表示内容：$pjstat

ACCEPT QUEUED STGIN READY RUNING RUNOUT STGOUTHOLD ERRORTOTAL0000100001s0000
10000
1
JOB_ID
28700

JOB_NAME
MD ST USER
test-mpifc NM RNE k70043a

ジョブID

START_DATE
10/04 09:34:06

ジョブスクリプト 状態 ユーザID 実行開始日時
ファイル名

ELAPSE_LIM NODE_REQUIRE
0000:05:00 -制限時間• オプション無し： 自分が投入したジョブのみ表示• --all オプション： 実行中の全ジョブを表示

VNODE
1

CORE V_MEM
36
unlimited36

pjsub ジョブの削除• 利用法：$ pjdel ジョブID• pjstatで表示されるジョブIDを指定

37

ITOシステムのソフトウェア• コンパイラ、言語処理系• 富士通コンパイラ、Intelコンパイラ、PGIコンパイラ、CUDA、CUDA Fortran、Perl、Python• 数値計算ライブラリ• SSL II、BLAS/LAPACK/ScaLAPACK、NAGライブラリ、FFTW、PETSc• その他ライブラリ• HDF5、NetCDF• 計算化学• Gaussian、Gaussview、CHARMM、VASP、Molpro、SCIGRESS、AMBER、GAMESS、GROMACS• 流体・構造解析• Marc/Marc Mentat、MSC Nastran/Patran、ANSYS、OpenFOAM、FrontFlow/Red• データ解析• SAS、ENVI/IDL、R• 科学技術計算• Mathematica、MATLAB• 機械学習• TensorFlow• 画像処理• FIELDVIEW、AVS

38

Moduleコマンド• 使用するソフトウェアの選択• 必要な環境変数の自動設定• 利用例：• 利用可能なモジュールの確認$ module avail• モジュールの選択$ module load モジュール名/バージョン• モジュールの選択取り消し$ module unload モジュール名/バージョン• 使用するモジュールファイルディレクトリ（モジュールの設定ファイル群がある場所）を追加$ module use モジュールファイルディレクトリ

39

富士通コンパイラ• コマンド名

非MPI

MPI

言語

コマンド

自動並列OpenMP

Fortranfrt-Kparallel-Kopenmp

Cfcc

C++

FCC

FortranmpifrtCmpifccC++

mpiFCC40

富士通コンパイラの主なオプション-c

オブジェクトファイルの作成までを行う-o ファイル名 作成するファイル名を変更-Kfast最適化(推奨オプション)-Kparallel

自動並列化-Kopenmp

OpenMPによる並列化-Free

自由形式（Fortran）-Fixed固定形式（Fortran）-Haefosux

コンパイル時及び実行時に引数の整合性、添え字式、部分列式の値、未定義変数の参照、配列式の形状適合等を検査(Fortran)-Kocl

最適化制御行を有効化（C/C++）-Xg

GCC Cコンパイラ（C89規格）の仕様に基づいてコンパイル
（C）

41

Intelコンパイラ• 環境設定• コンパイル時、対話的な実行時、およびジョブスクリプト内での利用時に必要• バージョン2017を利用$ module load intel• バージョン2016を利用$ module load intel/2016• コマンド

非MPI

MPI言語

コマンド

自動並列

Fortranifort-parallel -qopenmp

Cicc

C++

icpc

Fortranmpiifort

CmpiiccC++

mpiicpc

OpenMP42

Intelコンパイラの主なオプション-c

オブジェクトファイルの作成までを行う-o ファイル名

作成するファイル名を変更-ipo -O3 -no-prec-div -fp-model fast=2 -xHost

最適化(推奨オプション)-parallel

自動並列化-qopenmp

OpenMPによる並列化-mkl

MKLライブラリ使用

43

GPU（CUDA）の利用方法• 環境設定$ module load cuda
• ジョブスクリプトにも記述• CUDAプログラムのコンパイル例）$ nvcc -gencode arch=compute_60,code=sm_60 -o test test.cu• ジョブスクリプト例）#!/bin/bash#PJM -L "vnode=1"#PJM -L "vnode-core=36"#PJM -L "rscunit=ito-b"#PJM -L "rscgrp=ito-g-4"#PJM -L "elapse=1:00"
module load cuda./test44

Pythonの利用• Python2• 特に設定せず、利用可能$ python• Python3• moduleで選択して利用• 利用可能なバージョンの確認$ module avail python• 使用するモジュールの選択$ module load python/バージョン番号• 実行$ python3• python2 コマンドで、Python2も実行可能45

Pythonのパッケージ追加• 自分のホームディレクトリに追加可能• Python2$ pip2 install パッケージ名 --user• Python3 (モジュール選択後)$ pip3 install パッケージ名 --user• 注意• パッケージの追加に伴って、ストレージの使用量が増加するので、不要なパッケージは削除する• パッケージ追加時にメモリやCPU時間が不足して失敗する場合、フロントエンド、もしくはバックエンドで実行

46

試験的に公開中のソフトウェア• 動作確認が十分に行えていないソフトウェアを試験的に公開中• Caffe、FrontFlow/Red、OpenCV、Open MPI、MVAPICH2等• 利用方法：• モジュールファイル・ディレクトリの追加$ module use /home/exp/modulefiles• module avail で利用可能なモジュールファイルを確認して、選択

47

実習 バックエンドの利用• MobaXtermで、Sessions から ito.cc.kyushu-u.ac.jp をダブルクリックしてログインノードにログイン• 以下の手順で、MPIプログラムのコンパイル、ジョブ投入、結果確認$ cp /home/tmp/test/* .
$ ls$ cat test-mpi.c$ cat test.sh$ cat test.dat$ mpifcc -Kfast test-mpi.c -o test-mpi$ pjsub test.sh$ pjstat$ cat test.sh.oジョブ番号• 時間が余ったら、プログラムやスクリプトを書き換えて試してみて下さい。