1 新スーパーコンピュータ ITO システム 利用講習会 九州大学情報基盤研究開発センター 2017 年 10 月
ITO システムの構成 2
3 ITO システムの特徴 最新ハードウェア技術 Intel Skylake-SP NVIDIA Pascal + NVLink Mellanox InfiniBand EDR 対話的な利用環境の拡充 合計 164 ノードのフロントエンド ノード当たりメモリ量 : 384GB ~ 12TB 外部システムとの接続性向上 パブリッククラウドとの連携 オープンデータへのアクセス
4 本講習会の内容 ITO システム利用手段の選択 利用の準備 ログインノード ITO ポータルの利用 フロントエンドの利用 ( 富士通社より説明 ) バックエンドの利用 ITO システムのソフトウェア
5 ITO システム利用手段の選択 ログインノード 主に ファイルの編集やコンパイル ジョブ投入等の基本操作 HPC ポータル Webインタフェースによるファイル操作 コンパイル ジョブ投入ログインノード フロントエンド GUI 等による対話的な大規模データの操作 解析 ITO ポータル フロントエンド バックエンド 大規模計算 バックエンド
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 実習 0 ログインノード ITO ポータルの利用 0. 初期パスワード変更 1.MobaXterm への鍵の登録 2. ログインノードへのログイン 3.ITO ポータルへのログイン
11 0. 初期パスワード変更 1. ITO ポータルにアクセス https://ito-portal.cc.kyushu-u.ac.jp/itoportal 2. 配布されたユーザ ID と初期パスワードでログイン 3. 新しいパスワードを入力 (2 回 ) 8 文字以上
12 1.MobaXterm への鍵の登録 1. MobaXtermを起動 2. Settingsをクリック 3. SSHをクリック 4. Use internal SSH agent "MobAgent" のボックスをチェック 5. その下の右側の + をクリック 6. デスクトップの ito_id_rsa.ppk をダブルクリック 7. OKをクリックし さらに OKをクリックして MobaXtermを再起動
13 2. ログインノードへのログイン lect1013 1. 秘密鍵のパスフレーズを入力 2. Session をクリック 3. SSH をクリック 4. Remote hostに ito.cc.kyushu-u.ac.jp 5. Specify usernameの左のボックスをクリック 6. その右のボックスにユーザ IDを入力 7. ログインできたことを確認したら ログアウト
14 3.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/ 1. 予約システムにログイン 2. システムの空き状況確認 3. 自分の利用状況確認 4. 予約 5. メールで IP アドレス通知 6. ログインノード経由で指定アドレスにログイン
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 ポータル フロントエンドからジョブ投入 基本的な流れ : 1. ジョブスクリプト作成 2. ジョブ投入 ( システムの空き状況に応じて 順にジョブを実行 ) ログインノード ITO ポータル フロントエンド 3. 完了を待って 出力ファイル確認 バックエンド 計算結果
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 1 36 339GiB 1 時間 ito-g-16-dbg 4 36 4 339GiB 4 1 時間 ito-g-4 1 36 339GiB 48 時間 ito-g-16 4 36 4 339GiB 4 24 時間 ito-test 1/12 3 28GiB 48 時間 ito-test-dbg 1/12 3 28GiB 1 時間 デバッグ専用 GPU: 4 基 x 1 ノード デバッグ専用 GPU: 4 基 x 4 ノード シングルノードジョブ GPU: 4 基 x 1 ノード 4 ノードまで利用可能 GPU: 4 基 x 4 ノード 1/12 ノード利用 GPU 使用不可 デバッグ専用 1/12 ノード利用 GPU 使用不可
24 最大実行時間を指定する理由 バックフィルスケジューリング 他のジョブを遅らせない範囲で ジョブの追い越しを認める 例 ) ジョブ C を先に実行しても ジョブ B の実行開始時刻は変わらない 追い越し 時間 ジョブ C ジョブ B ジョブ A ジョブ 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 プログラムの実行を管理 例 )mpiexec.hydra -n 16 例 )vnode=4, vnode_core=36 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 -X./a.out Intel コンパイラ利用時は module load intel/2017 を追加 使用実ノード数 1 使用コア数 1
ジョブスクリプト例 : スレッド並列処理 ( 富士通コンパイラの自動並列化 ) #!/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 29 使用実ノード数 1 使用コア数 36 export PARALLEL=36./a.out
ジョブスクリプト例 : スレッド並列処理 (OpenMP) 30 #!/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 OMP_NUM_THREADS=36./a.out 使用実ノード数 1 使用コア数 36 Intel コンパイラ利用時は 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 使用実ノード数 4 使用コア数 144 (36 x 4) mpiexec -n 144./a.out
ジョブスクリプト例 : ハイブリッド並列処理 ( 富士通 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 32 使用実ノード数 4 使用コア数 144 (36 x 4) export OMP_NUM_THREADS=6 mpiexec -n 24./a.out
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 使用実ノード数 4 使用コア数 144 (36 x 4) 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
ジョブスクリプト例 : ハイブリッド並列処理 (Intel MPI + OpenMP) 34 #!/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 使用実ノード数 4 使用コア数 144 (36 x 4) 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=9 export 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
35 pjstat ジョブの状態確認 現在投入されているジョブの情報を表示 $ pjstat 表示内容 : ACCEPT QUEUED STGIN READY RUNING RUNOUT STGOUT HOLD ERROR TOTAL 0 0 0 0 1 0 0 0 0 1 s 0 0 0 0 1 0 0 0 0 1 JOB_ID JOB_NAME MD ST USER START_DATE ELAPSE_LIM NODE_REQUIRE VNODE CORE V_MEM 28700 test-mpifc NM RNE k70043a 10/04 09:34:06 0000:05:00-1 36 unlimited ジョブID ジョブスクリプト状態ユーザID 実行開始日時 制限時間 ファイル名 オプション無し : 自分が投入したジョブのみ表示 --all オプション : 実行中の全ジョブを表示
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 富士通コンパイラ コマンド名 言語 コマンド 自動並列 OpenMP 非 MPI Fortran frt -Kparallel -Kopenmp C fcc C++ FCC MPI Fortran mpifrt C mpifcc C++ mpifcc
40 富士通コンパイラの主なオプション -c オブジェクトファイルの作成までを行う -o ファイル名作成するファイル名を変更 -Kfast 最適化 ( 推奨オプション ) -Kparallel -Kopenmp -Free -Fixed -Haefosux -Kocl -Xg 自動並列化 OpenMP による並列化 自由形式 (Fortran) 固定形式 (Fortran) コンパイル時及び実行時に引数の整合性 添え字式 部分列式の値 未定義変数の参照 配列式の形状適合等を検査 (Fortran) 最適化制御行を有効化 (C/C++) GCC C コンパイラ (C89 規格 ) の仕様に基づいてコンパイル (C)
41 Intel コンパイラ 環境設定 コンパイル時 対話的な実行時 およびジョブスクリプト内での利用時に必要 バージョン 2017 を利用 $ module load intel バージョン 2016 を利用 $ module load intel/2016 コマンド 言語 コマンド 自動並列 OpenMP 非 MPI Fortran ifort -parallel -qopenmp C icc C++ icpc MPI Fortran mpiifort C mpiicc C++ mpiicpc
42 Intel コンパイラの主なオプション -c オブジェクトファイルの作成までを行う -o ファイル名作成するファイル名を変更 -ipo -O3 -no-prec-div -fp-model fast=2 -xhost 最適化 ( 推奨オプション ) -parallel -qopenmp -mkl 自動並列化 OpenMP による並列化 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 ジョブ番号 時間が余ったら プログラムやスクリプトを書き換えて試してみて下さい