====== 概要 ======
* クラスタ計算機の使い方です
* 新入生向け
====== サーバーへのログイン手順 ======
===== SSH鍵の作成 =====
クラスタ計算機にログインするためにはSSH鍵を作成する必要があります。
ターミナルを開いて次のようにコマンドを入力してください。
$ cd
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): # Enterキーを押します
Created directory '/home/username/.ssh'. # ~/.ssh がない場合、ディレクトリを作成します
Enter passphrase (empty for no passphrase): # パスフレーズを入力します
Enter same passphrase again: # もう一度パスフレーズを入力します
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
パーミッションを設定します。
$ chmod 600 ~/.ssh/id_rsa
$ chmod 700 ~/.ssh/
.sshディレクトリ(隠しフォルダ)内に生成されたid_rsa.pubを、計算機の管理者にメールなどで送ってください。
===== 計算機へのログイン =====
事前にクラスタ計算機の管理者からIPアドレスまたはホスト名を聞いてください。
ここではIPアドレス(またはホスト名)をxxx.xxx.xxx.xxxとします。
==== 直接入る方法 ====
ターミナルを開いて次のようにコマンドを打ちます。
usernameはクラスタ計算機でのユーザー名にしてください。
$ ssh -i ~/.ssh/id_rsa username@xxx.xxx.xxx.xxx
The authenticity of host 'server_no_address.jp (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
パスフレーズを聞かれるので、SSH鍵を作成した際に設定したものを入力します。
==== configファイルを作成する方法 ====
configファイルを使うと、ログインのたびに毎回IPアドレスを打ち込む手間が省けます。
$ cd ~/.ssh/
$ vim config
Host hogehoge
HostName xxx.xxx.xxx.xxx
User username
IdentityFile ~/.ssh/id_rsa
usernameはクラスタ計算機でのユーザー名に変更してください。
hogehogeは自分のわかりやすいものに変更してください。
ログインは次のようにします。
$ ssh hogehoge
The authenticity of host 'server_no_address.jp (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
パスフレーズを聞かれるので、SSH鍵を作成するときに設定したものを入力します。
==== ログアウト ====
終了するときはサーバーからログアウトしてください
$ exit
====== ソフトウェアの利用設定 ======
===== コンパイラIntel OneAPIの設定 =====
コンパイラIntel OneAPIの登録をします。
サーバーにログインし、ホーム・ディレクトリにある.bashrcを開いて、一番下の行にOneAPIのパスを追加します。
$ vim .bashrc
(略)
source /opt/intel/oneapi/setvars.sh
$ source ~/.bashrc
===== ジョブスケジューラOpenPBSの設定 =====
ジョブスケジューラであるOpenPBSの設定をします
==== プログラムの実行 ====
a.outというプログラムを実行する場合を考えます。
ジョブスケジューラでプログラムを実行すれば、サーバーからログアウト後もプログラムは動き続けます。
=== 並列化なしでの簡単な例 ===
次のスクリプトファイルをプログラムと同じディレクトリに作成します。
$ vim run.sh
#!/bin/bash
#PBS -V
#PBS -l select=1:ncpus=1
cd $PBS_O_WORKDIR
./a.out
スクリプトファイルに実行権限を付与します(実行権限は一度付与したら残り続けます)
$ chmod +x run.sh
ジョブを計算機に投げます
$ qsub run.sh
ジョブの状況やジョブ番号 (Job ID) はqstatコマンドで確認できます。
$ qstat
オプションをつけるとより細かいジョブ状態が見えます。
ジョブIDを省略した場合、投げているすべてのジョブについて表示されます。
$ qstat -s
* ジョブが走っているノードと、使用しているリソースを表示します。
$ qstat -f
* ジョブに関するすべての情報を表示します。
ジョブの強制終了はqdelコマンドで行います。
$ qdel
使用できる計算ノードの情報はpbsnodesコマンドで行います。
$ pbsnodes -a
各ノードの使用状況がひと目でわかる簡易表示もできます。
$ pbsnodes -aSj
=== 並列化する場合 ===
使用には数値計算プログラムをOpenMPやMPIによる並列化に対応させる必要があります。
* select ... ノードの数を指定します
* ncpus ... 1ノードあたりのCPUのコア数を指定します
* mpiprocs ... 1ノードあたりのMPIスレッド数を指定します
* ompthreads ... OpenMPスレッド数を指定します
ncpus = mpiprocs × ompthreads となるように設定します。
=== 例:OpenMPのみ ===
12スレッドのOpenMP並列の例です。
#!/bin/bash
#PBS -V
#PBS -l select=1:ncpus=12:ompthreads=12
cd $PBS_O_WORKDIR
./a.out
=== 例:OpenMPとMPIのハイブリッド実行 ===
2ノード48コア(1ノード当たり24コア)を使用し、MPIスレッドは全部で4つ作る例です。
各MPIスレッドでOpenMPは12並列です
#!/bin/bash
#PBS -V
#PBS -l select=2:ncpus=24:mpiprocs=2:ompthreads=12
cd $PBS_O_WORKDIR
./a.out