計算サーバ利用手引き

注・このページは高い頻度で更新されています。ご覧になる方は常に最新版を参照してください。
(最終更新日: 2023(令和5)年03月31日)

目次

1. はじめに

天文シミュレーションプロジェクトは数値シミュレーションを用いた天文学研究の支援を行なっています。一言で数値シミュレーションと言っても様々ですが、その中にはXC50のような大型並列スーパーコンピュータやGRAPE・GPUのような加速器型計算機には馴染まない、本然的に中小規模かつ長時間を要するものが多くあります。計算サーバはこのような中小規模の数値シミュレーションによる研究を支援する機材です。この種のシミュレーションの多くは非並列なものですが、計算サーバでは小規模ではあるものの並列計算用の資源も提供しており、将来的にXC50等で大型並列計算行う準備のための機材としてもお使い頂けます。計算サーバの募集要項と申請書はこちらにございます。XC50GRAPE・GPUの利用申請は計算サーバの利用申請とは別途行って頂くことになりますが、解析サーバは計算サーバの利用者になれば利用が可能となります。利用者の皆様にはこの文書と併せて計算サーバに関する FAQ (Frequently Asked Questions; よくある質問とその答え) もご参照ください。

2. 機器構成

計算サーバはログインノード・計算ノード・ファイル保持期限が定まった作業領域、およびそれらを接続するプライベートネットワークから構成されています。作業領域は解析サーバからも参照できます。利用者はログインノード(m000.cfca.nao.ac.jp)にログイン後、PBS を経由して計算ノードにジョブを投入します。

2.1 ノード

計算サーバの利用者はログインノードにログイン後、計算ノードにジョブを投入します。なお計算ノードにログインすることはできません。

2.1.1 ログインノード

これは m000.cfca.nao.ac.jp という名前で運用される機材であり、利用者のファイル編集・コンパイル・PBSジョブの投入といった作業をここで行います。CentOS 7の仮想マシンとして運用されています。

m000.cfca.nao.ac.jp
CPU (仮想親機のもの) Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
主記憶 96 GB
コア数 6
ジョブ管理システム OpenPBS
ファイルサーバへのアクセス ※

※ ここで言うファイルサーバとは固有名詞であり、ディレクトリ /misc/work??? および /glv{0,1} のホスト群のことです。下記のファイルサーバのマウントもご覧ください。

2.1.2 計算ノード

利用者がログインノードから投入したPBSジョブは計算ノード群で実行されます。計算ノードのハードウェア情報については以下を参照してください。但し機材障害等により一時的に運用から外されるノードもあり、常に全てのノードが稼働しているとは限らないことにご注意ください。

2.2 ストレージ

以下のファイルシステムが一般利用者向けのストレージとして利用可能です。なお各々の作業領域にはquotaによる容量制限があります。

  • /home/ : ホームディレクトリ(解析サーバと共通)
  • /mwork1/ : 作業領域(約 339 TB)
  • /mwork2/ : 作業領域(約 329 TB)

(注)/mwork1/, /mwork2/下にあるファイルは最終アクセス日時 (last access time; atime) から 120 日後に削除されます。各ファイルの最終アクセス日時は ls -lustat -c "%x" コマンドを用いて検証してください。

計算サーバのホームディレクトリは解析サーバと共通です。作業領域 /mwork1/, /mwork2/ は解析サーバからマウントされています (/misc/mwork{1,2}/ ですが、歴史的な経緯により /mwork{1,2}/ という形でも見えています)。各領域にはquotaによる容量制限があります。

ソフトリミット ハードリミット
ホームディレクトリ(/home) 1.0 TB/user 1.5 TB/user
作業領域 (/mwork1) 24 TB/user 24 TB/user
作業領域 (/mwork2) 24 TB/user 24 TB/user

ご自分の quota 状況を知るには quota -v コマンドを使ってください。上記のquota制限値を超えてしまうと当該ファイルシステムには一切の書き込みが出来なくなりますのでご注意ください。ホームディレクトリのquota制限値を超えた利用者に対しては一日に一度 root から警告メールが流されます。この警告メールを転送するためご自分のホームディレクトリに .forward ファイルを作成し、ご自身のメールアドレスを記載してください。もしも警告メールを受け取ったら、不要なファイルを削除または移動してください。
なお令和4年4月現在、/mwork{1,2}/ 以下のquota現状を即座に表示するコマンドはなく、quota制限値を超過したことを通知する電子メールも送付されません。代わりに全利用者のquota状況を記したファイル /mwork{1,2}/userspace.txt が準備されており、これらは60分に一度の頻度で更新されています。/mwork{1,2}/ 上のご自分のquota状態を知るにはこのファイルの中身をcatしてご覧になるか、以下のようにしてください。

% grep `whoami` /mwork{1,2}/userspace.txt

これにより以下の例のようにご自分の利用状況(右から二欄目の数値)およびquota上限値(右端欄の数値)が表示されます。

/mwork1/userspace.txt:POSIX User itootk 1.23T 24T
/mwork2/userspace.txt:POSIX User itootk 3.54T 24T

また上記されたホームディレクトリや作業領域のquotaとは独立に、利用者のPBSジョブが計算ノード上で一時的に書き出す標準出力・標準エラー出力や計算ノードの /var/tmp/ への書き出し量にも上限が設けられています。下記はいずれも同一利用者が同時に実行している全PBSジョブからの合計値であることにご注意ください。

  • 計算ノード/var/spool/pbs/への標準(および標準エラー)出力の書き出し : 64 GB
    • 最新の使用量は m000 上のファイル /pbslog/misc/userspace.txt に記録されます。このファイルは一時間に一度更新されます
  • 計算ノード/var/tmp/への標準(および標準エラー)出力の書き出し: 5 GB (ソフトリミット 4 GB)
    • 現時点ではここの使用量を利用者自身が知ることはできません。知りたい場合には管理者へお問い合わせください

ファイルサーバのマウント

  • ログインノード m000 にはファイルサーバのディレクトリ群が読み書き可能の状態でマウントされています (/misc/work???/ は動的(auto)マウント。/glv{0,1}/ および /fs50/ は静的(static)マウント)。
  • /misc/work???/ は計算ノードからも読み込みのみ可の状態で動的にマウントされますが、ディレクトリ /glv{0,1}/ および /fs50/ は計算ノードからはマウントされませんのでご注意ください。
  • 計算サーバとファイルサーバの関係については以下の表もご参照ください。
ディレクトリ \ クライアント m000 (ログインノード) 計算ノード
/misc/work??? 読み書き可能, auto 読み取り専用, auto
/glv{0,1} 読み書き可能, static マウントされない
/fs50 読み書き可能, static マウントされない

2.3 初期の環境設定

m000へのログイン

計算サーバを利用するには何はともあれログインノード(m000.cfca.nao.ac.jp)にログインする必要があります。このために最初に行うことは、VPN を用いて CfCA HPC network に接続することです。詳しくはこちらのページを参照してください。CfCA HPC network への接続に成功したら、ssh を用いてログインノードにログインします。CfCA 共同利用計算機のアカウント名は本 Web システムのアカウント情報から確認することができます。また初期 NIS パスワードは利用申請受理後にメールで配信されます。

% ssh -l アカウント名 m000.cfca.nao.ac.jp

(注)既にXC50やGRAPEをご利用の方が計算サーバを利用する場合にも、改めて利用申請を行ってください。計算サーバ上のアカウント名やパスワードはNISを経由して他システムと共通化されていますが、計算サーバの利用申請を行わないとログインノード(m000)上のホームディレクトリが作製されないので、利用可能にはなりません。

環境設定ファイル

計算サーバ・解析サーバ・GPUなどではホームディレクトリを共有していますが、いずれの利用にも対応するシェルの初期設定ファイルの例が準備されています。詳しくは 解析サーバ 利用の手引き 2.3.1 シェルの環境設定ファイルをご参照ください。現時点で以下が準備されています。

  • bash用
  • tcsh (csh) 用
  • zsh 用

なおログインノードの /etc/skel/ にはシステムデフォルトの環境設定ファイルが置かれていますが、これらを使って計算サーバ以外の機材で作業すると何らかの設定不足が生じる可能性がありますので、お勧めはしません。これらのファイルを使う場合には自己責任でお願いいたします。

  • /etc/skel/.bash_profile
  • /etc/skel/.bash_logout
  • /etc/skel/.bashrc
  • /etc/skel/.cshrc
  • /etc/skel/.zshrc
  • /etc/skel/.emacs (これはシェル用ではなくemacs用の設定ファイル)

初期パスワードやログインシェルの変更

初期パスワードの変更には yppasswd コマンドを用いてください。なおパスワード長は12文字以上にするという原則が自然科学研究機構の情報セキュリティ対策基準にて定められています (5.4節, (3) 2)。利用者各位もこちらへの準拠をお願いいたします。

ログインシェルの変更には ypchsh コマンドを用いてください。利用できるシェルは /bin/sh, /bin/csh, /bin/bash, /bin/tcsh, /bin/zsh です。デフォルトは /bin/csh です。
なおXC50やGRAPEにもアカウントをお持ちの方がここでパスワードやログインシェルを変更すると、NISサーバを経由して他システムでのパスワードやログインシェルも変更されます。ご注意ください。

作業ディレクトリ下での個人用サブディレクトリ作製 【重要】

前述した作業領域用ディレクトリ(/mwork{1,2}/) を使う際には、まずご自分のアカウント名のサブディレクトリを作製してください。例えば以下のようにします。

% mkdir /mwork1/アカウント名
% mkdir /mwork2/アカウント名

然る後にこのサブディレクトリ/mwork1/アカウント名/または/mwork2/アカウント名/の下に必要なファイルを置いてください。作業領域用ディレクトリの直下に /mwork2/個人ファイル などとしてファイルを置くことの無いようにお願いします。そのような作られ方をされたディレクトリは管理者側で移動または削除することがあります。

2.4 ファイル転送と電子メール

ファイルの転送

計算サーバからのファイル転送は、国立天文台内部のネットワークに転送する場合と国立天文台外部のネットワークに転送する場合で方法が異なります。なお、ここで言う国立天文台内部のネットワークとは IP address が 133.40.*.* のネットワークを指し、それ以外のネットワークを国立天文台外部のネットワークと呼ぶことにします。計算サーバを含む本プロジェクトの計算機システムは、すべて国立天文台内部のネットワーク内に構築された CfCA HPC network に納められています。

(1) 国立天文台外部のネットワークへのファイル転送

CfCA HPC network から国立天文台外部の計算機へは、scp などを用いたファイル転送を自由に行うことが可能です。ここでは例として国立天文台外部にある計算機の名称を Local-nonaoj とし、m000.cfca.nao.ac.jp 上にあるファイル hogehoge を m000.cfca.nao.ac.jp の上から scp コマンドを用いて Local-nonaoj へファイルを転送する方法について説明します。

  • m000.cfca.nao.ac.jp 上で操作を行う場合には以下のようにします。
  • m000% scp hogehoge アカウント名@Local-nonaoj:
  • Local-nonaoj 上でこの操作を行うことも出来ます。この場合には以下のようにします。
  • Local-nonaoj% scp アカウント名@m000.cfca.nao.ac.jp:hogehoge .

上記と逆の方向、すなわち Local-nonaoj 上にあるファイル pogepoge を m000.cfca.nao.ac.jp に転送する場合には、以下のいずれかを行ってください。

  • m000.cfca.nao.ac.jp 上で操作を行う場合には以下のようにします。
  • m000% scp アカウント名@Local-nonaoj:pogepoge .
  • Local-nonaoj 上でこの操作を行うことも出来ます。この場合には以下のようにします。
  • Local-nonaoj% scp pogepoge アカウント名@m000.cfca.nao.ac.jp:

(2) 国立天文台内部のネットワークへのファイル転送

国立天文台外部ネットワークへのファイル転送の場合とは異なり、国立天文台内部の計算機 Local-NAOJ に対しては CfCA HPC network → Local-NAOJ という方向への scp などによるファイル転送が許可されていません。これは CfCA HPC network (firewall) の現在の設定(仕様)によります。この方向のファイルの転送を行う場合には Local-NAOJ → CfCA HPC network という方向で scp 等を動かします。例えば Local-NAOJ にあるファイル hogehoge を m000.cfca.nao.ac.jp へ転送する場合には、Local-NAOJ 上で以下のようなコマンドを打ち込んでください。

Local-NAOJ% scp hogehoge アカウント名@m000.cfca.nao.ac.jp:

同様にして m000.cfca.nao.ac.jp にあるファイル pogepoge を Local-NAOJ に転送する場合には、以下のようにしてください。

Local-NAOJ% scp アカウント名@m000.cfca.nao.ac.jp:pogepoge .

電子メールの送受信

ログインノードでは CfCA HPC network 内から届いた電子メールを受け取ることができ、かつ CfCA HPC network の内外へメールを送信することができます(CfCA HPC network の外から ログインノードにメールを送信することはできません)。後述するように計算サーバのジョブ管理システムはジョブの開始や終了を電子メールで利用者に知らせますが、利用者が何も設定しないとこのメールはログインノード上のローカルな利用者アカウントに届きます。ローカルなアカウントにメールを受け取りたくない場合には qsub コマンドのオプション -M を用いて転送先のメールアドレスを指定するか、ログインノードのホームディレクトリに .forward ファイルを置いてメールを転送してください。

3. コンパイラの利用方法

ログインノードでは Intel、PGI、GNU、および OpenMPI 用のコンパイラが利用可能です。必要なソフトウェアの切替とそのための環境変数の設定はmoduleコマンドを用いて行えます。利用可能なソフトウェアの環境変数モジュールは以下のコマンドで知ることが出来ます。

% module avail

※ ログインノードm000では解析サーバで使えるモジュールのうち幾つかを利用できます。現在読み込まれている環境変数モジュールは次のコマンドで知ることが出来ます。

% module list

(注)ログインノード上で負荷の大きいユーザプロセスを発見した場合には、管理者権限で強制的にkillさせて頂きます。

3.1 Intel コンパイラ

C および Fortran コンパイラが利用可能です。同時利用可能なライセンス数はそれぞれのコンパイラについて 2 です。ライセンスが他利用者により使用されている場合にはしばらく待ってから再試行してください。

  • icc(C コンパイラ)
  • ifort(Fortran コンパイラ)

Intelコンパイラを使用したい場合は以下のようにして、Intelコンパイラの環境変数モジュールを読み込んでください。

% module load intel

異なるバージョンのソフトウェアに切り替えたい場合は、以下のようにしてください。

% module switch intel/12.1

※ 同じソフトウェアの異なるバージョンを同時に読み込むことはできません。モジュールを削除するには以下のようにしてください。

% module unload intel/12.1

3.1.1 利用可能なバージョン

以下のコマンドでご覧ください。

% module show intel

また、ベンダのホームページから Intel コンパイラ version 12 (Intel Composer XE) 最適化クイック・リファレンス・ガイド(外部リンク)が入手可能です。

3.2 PGI コンパイラ

C および Fortran コンパイラが利用可能です。同時利用可能なライセンス数はそれぞれのコンパイラについて 1 です。ライセンスが他利用者により使用されている場合にはしばらく待ってから再試行してください。

  • pgcc(C コンパイラ)
  • pgc++(C++ コンパイラ)
  • pgf77(Fortran77 コンパイラ)
  • pgf95(Fortran90/Fortran95 コンパイラ)
  • pgprof(性能解析プロファイラ)

3.2.1 利用可能なバージョン

以下のコマンドでご覧ください。

% module show pgi

PGI コンパイラを使用したい場合は以下のようにして環境変数モジュールを読み込んでください。

% module load pgi

3.2.2 利用するバージョンの変更

異なるバージョンのソフトウェアに切り替えたい場合は、以下のようにしてください。

% module switch pgi/12.10

※ 同じソフトウェアの異なるバージョンを同時に読み込むことはできません。モジュールを削除するには以下のようにしてください。

% module unload pgi/12.10

最適化オプションの例

PGI コンパイラの利用に際してどのようなコンパイルオプションが最適であるかはソースコードの構造やメモリ使用量に強く依存しますので、各利用者が自分で試行錯誤して本当に最適なオプションを見付けられることをお薦めいたします。参考までに、Intel Core i7 に最適化したコードを生成するには以下が有効なことが多いようです。

% pgcc -tp nehalem-64 -fastsse hogehoge.c
% pgf95 -tp nehalem-64 -fastsse hogehoge.f90

PGI コンパイラで使えるオプションの詳細に関してはこの辺りのページ(外部リンク)に情報があるようです。

3.3 GNU コンパイラ

C および Fortran コンパイラが利用可能です。ライセンス数の制限はありません。

3.2.1 利用可能なバージョン

以下のコマンドでご覧ください。

% module show gcc

GNU コンパイラを使用したい場合は以下のようにして環境変数モジュールを読み込んでください。

% module load gcc

3.2.2 利用するバージョンの変更

異なるバージョンのソフトウェアに切り替えたい場合は、以下のようにしてください。

% module switch gcc/5.4.0

※ 同じソフトウェアの異なるバージョンを同時に読み込むことはできません。
モジュールを削除するには以下のようにしてください。

% module unload gcc/5.4.0

3.4 OpenMPI 用コンパイラ

計算サーバの OpenMPI のコンパイラにはデフォルトで GNU のものが用いられます。これを変更する場合には、以下の環境変数を用いて具体的なコマンド名を指定します。

  • mpicc → 環境変数 OMPI_CC
  • mpicxx → 環境変数 OMPI_CXX
  • mpif77 → 環境変数 OMPI_F77
  • mpif90 → 環境変数 OMPI_FC

例えば mpif90, mpicc で Intel コンパイラを呼び出す場合にはそれぞれ以下のようにします。

% env OMPI_FC=ifort mpif90 ソースファイル
% env OMPI_CC=icc mpicc ソースファイル

4. ジョブ管理システム

ログインノードであるm000 は OpenPBS を利用してジョブを管理しています。

4.1 PBS

PBS は m000 上でのジョブ制御に用いられているアプリケーションの総称です。PBS には商用版と非商用版があり、非商用版は最近まで PBS Professional Open Source Project という名称でしたが OpenPBS へと改称されました。本文書では単に PBS と呼びます。PBS の詳細な利用についてはこちらのページにある公式な文書 (外部リンク) を参照してください。

4.1.1 ジョブの投入と削除

PBS への指示文と実行コマンドを記述したシェルスクリプト(PBS スクリプト)を作成し、以下のコマンドでジョブを投入します。

% qsub PBSスクリプト

キューへ投入したジョブを削除するには qdel コマンドを使います。ジョブ ID を知るには qstat または qstat-n1 コマンド(詳細は後述)を使ってください。

% qdel ジョブID

計算ノードを指定してジョブを実行

通常は指定しませんが、ジョブを実行する計算ノードを敢えて指定する場合には以下のようにします。

% qsub -l nodes=計算ノード名 PBSスクリプト

例えば計算ノード m016 でジョブを実行させる場合には以下の通りです。なおノード上のコア番号の指定は出来ません。

% qsub -l nodes=m016 PBSスクリプト

4.1.2 PBSスクリプトの記入例

以下に、PBS スクリプトの一例を示します。

#! /bin/sh
#PBS -r y
#PBS -m abe
#PBS -q short
#PBS -o Log.out
#PBS -e Log.err
#PBS -N MyPBSjob
#PBS -M who@domain.org.country

# Go to this job's working directory
cd $PBS_O_WORKDIR

# Run your executable
./a.out

上記した PBS スクリプトうち #PBS で始まる2-6行目は qsub に固有なオプションの記載です。このスクリプト例では以下のようなオプションを用いています。

オプション -r

上記した PBS スクリプトの2行目にある #PBS -r y はシステム停止時のジョブの再実行可能・不可能の設定です。このオプションを指定しない場合(デフォルト)には -r y の指定が行われたと看倣されます。

  • -r y : ノードダウンや保守作業などによりジョブが中断した時、システム復旧後に自動的に再実行を行います。
  • -r n : 上記のような場合にシステム復旧後もジョブを再実行せず、ジョブはキューから削除されます。

オプション -m

上記した PBS スクリプトの3行目にある #PBS -m abe は、ジョブに関する電子メールの発送に関するオプションです。このオプションを指定しない場合(デフォルト)には -m a の指定が行われたと看倣されます。

  • -m a : ジョブが中止された場合にメールを送信します。
  • -m b : ジョブの実行が開始された際にメールを送信します。
  • -m e : ジョブの実行が終了した際にメールを送信します。
  • -m n : メールを送信しません。

オプション -q

上記した PBS スクリプトの4行目にある #PBS -q long は、ジョブを投入するキューの指定に関するオプションです。計算サーバで m000 からジョブを投入する場合、キューとして後述する short, mid, long, openmp が指定できます。このオプションを指定しない場合(デフォルト)には -q short の指定が行われたと看倣されます。

  • -q short : キュー short にジョブを投入します。
  • -q mid : キュー mid にジョブを投入します。
  • -q long : キュー long にジョブを投入します。
  • -q openmp : キュー openmp にジョブを投入します。

なおキュー openmp を指定した場合、ジョブを投入する際に使用するqsubコマンドのオプション -l ncpus でコアの数を明示的に指定する必要があります。最大使用コア数は 4 です。指定しない場合(デフォルト)には -l ncpus=1 の指定が行われたと看倣されます。

% qsub -q openmp -l ncpus=使用コア数 PBSスクリプト

ちなみに、キュー openmp 以外を指定した場合はコア数の指定はできません。以下の例のような表示がされてジョブは投入されません。

% qsub -q short -l ncpus=2 qsub_short.sh
qsub: Job exceeds queue and/or server resource limits

オプション -o, オプション -e

上記の -m e オプションが指定されていればジョブの終了時点で利用者にメールでジョブ終了が通知され(宛先は -M オプションで指定されたアドレス)、同時に以下のファイルに二種類の出力が書き出されます。

  • スクリプト名.oXXX : 標準出力
  • スクリプト名.eXXX : 標準エラー出力

上記の "XXX" はジョブの番号であり、qstat コマンドにより表示されるものです。こうした標準出力ファイル・標準エラー出力ファイルを利用者が指定するのが上記した PBS スクリプトの5行目と6行目にある #PBS -o と #PBS -e オプションです。上記の例では標準出力がファイル Log.out に、標準エラー出力がファイル Log.err に書き出されます。

オプション -N

上記した PBS スクリプトの7行目にある #PBS -N MyPBSjob は、投入するジョブに固有の名前を付けるオプションです。このジョブ名は qstat などのコマンドで表示されるものとなります。なお -N で指定されるジョブ名は空白(スペース)を含まない15文字以内の ASCII 英数文字列であり、なおかつ先頭はアルファベットで始まる必要があります。従って -N 00myjob などという指定は無効です。このオプションを指定しない場合(デフォルト)には当該ジョブの投入に使われた PBS スクリプト名がそのままジョブ名となります。

オプション -M

上記した PBS スクリプトの8行目にある #PBS -M who@domain.org.country は、PBS から発信される電子メールアドレスの転送先指定です。このオプションを指定しないと、PBS からの電子メールはすべて当該ジョブの所有者、すなわち m000.cfca.nao.ac.jp 上のローカルなアカウントに送付されます。なお上記のスクリプト例にある who@domain.org.country は実在しない、架空の電子メールアドレスです。ここには必ず実在するご自分のアドレスを記載してください。

コマンドラインからのオプションの指定

上記のようなオプションはジョブ投入時にコマンドラインからも指定できます。

% qsub -r y -m abe -q long -N MyPBSjob -M who@domain.org.country PBSスクリプト

qsub コマンドはこの他にも多数のオプションを持っています。詳しくは man qsub をご覧ください。

PBS 環境変数

上記した PBS スクリプト内では PBS_O_WORKDIR という変数が使われていますが、これは PBS が内部的に定義している環境変数です。PBS_O_WORKDIR はこの PBS スクリプトが投入されたカレントディレクトリのパスですが、その他の代表的な PBS 環境変数には以下のようなものがあり、利用者はこれらを適所に使うことで生産性の高い PBS スクリプトを構築することが可能となります。

  • PBS_JOBNAME : このジョブのジョブ名
  • PBS_JOBID : このジョブのジョブ ID
  • PBS_O_HOME : このジョブを投入した利用者のホームディレクトリ
  • PBS_O_QUEUE : このジョブが投入されたキューの名称

qsubスクリプト内でのモジュールのロード

PBSジョブとして走らせるコードがIntelコンパイラやPython環境を必要とする場合には、必要なモジュールをqsubスクリプト内で読み込んでおく必要があります。
qsubスクリプトがsh対応の場合には、実行させたいコードの前に以下の二行を追記してください。以下の例ではAnacondaとIntelコンパイラの環境が読み込まれます。

source /usr/share/Modules/init/sh
module load anaconda intel

qsubスクリプトがcsh対応の場合には以下を追記してください

source /usr/share/Modules/init/csh
module load anaconda intel

qsubスクリプトがtcsh対応の場合には以下を追記してください

source /usr/share/Modules/init/tcsh
module load anaconda intel

4.1.3 キュー構成

計算サーバで m000 からジョブを投入する場合、現在のキュー構成は以下のようになっています。この設定は機器の稼働状況や利用者の利用状況を反映して中期的に変更されます。なお、PBSスクリプトのオプション -q を指定しない場合(デフォルト)には -q short の指定が行われたと看倣されます。

キュー名 ジョブ時間制限 (walltime) 実行優先度 最大実行ジョブ数 / user 最大使用コア数 / job 最大投入可能ジョブ数 / user
short 0.5時間 1 96 (48) 1 384
mid 240時間 3 960 (192) 1 4096
long 無し 4 960 (192) 1 4096
openmp 720時間 2 32 (16) 4 256

キュー構成については以下の点に留意してください。

  • 上の表ではキュー long でのジョブ時間制限が「無し」となっていますが、計算サーバは数ヶ月に一度の頻度で定期保守作業のために全ノードが停止されます。この時には実行されているジョブもすべて強制終了されますので、キュー long に投入されたジョブの実際的な最長実行可能時間は数ヶ月であるとお考えください。
  • キューに設定されているジョブ実行の優先度は表中の数字が小さいほど高くなるように設定されています。従って、例えば short と long の両キューにジョブがキューイングされている場合には short キューに投入されたジョブが long キューに投入されたジョブよりも先に実行されます。もし仮に多くの利用者が short キューに多数のジョブを投入するような事態が実現された場合には、short キューに投入されたジョブが終了するまで long キューに投入されたジョブはまったく実行されずに延々と待ち続けることになります。
  • キュー long で最大実行ジョブ数が 960 (192) となっているのは、ここでは hard limit (960) と soft limit (192) の二種類の制限が行われているためです。これらの制限については後述します。
  • キュー openmp のユーザあたりの最大実行ジョブ数はジョブが使用しているコア数に関係なく 32 (16) です。また1ジョブで使用できる最大使用コア数は 4 です。
  • 各利用者が投入できる最大のジョブ数は 8192 です (qmgr での設定 set server max_queued)。ここで投入可能なPBSジョブ数とは、実行(R)およびキュー並び(Q)されるジョブ数の最大値 (すべてのキューに関する値の総和) を意味します。
  • それぞれの計算ノードにある CPU は4または16または32コアを有しており (AMD Ryzenを搭載した計算ノードに於いてこのコア数は仮想的に実装されています)、それぞれ最大4, 16, 32本のPBSジョブが当該ノードの主記憶を共有します。一方で、各々の計算ノードに於いてジョブ毎のメモリ量制限は敷かれていません。従って或るPBSジョブが或る計算ノード内で大きなメモリを占有すると、その計算ノード内は他のジョブが使えるメモリ量が小さくなり、コアには空きがあってもジョブが流れない状況が発生し得ます。
  • PBSジョブ時間制限の表示について long, short, midキューではCPU time(CPU使用時間)を表しており、openmpキューではwall time(プロセスが開始されてから終了するまでの実時間)を表しています。 openmpキューをご利用の場合はご注意ください。

キュー openmp に関する補足

キュー openmp について以下を補足して記載します。

  • このキュー名は openmp ですが、OpenMP のみならず MPI を使うジョブも投入可能です。モジュール mpi をロードしてください (openmpi3)。
  • 利用者一人当たりの最大実行ジョブ数は各並列ジョブが使うコア数とは無関係に定められています。つまり、4コアを使うジョブであっても1コアしか使わないジョブであっても、PBSはそれらを 1 本のジョブと看做します。
  • キュー openmp を指定する場合には、ジョブを投入する際に qsub -l ncpus=コア数 としてジョブが使用するコア数を明示的に指定する必要があります。最大使用コア数は 4 です。指定しない場合(デフォルト)には qsub -l ncpus=1 の指定が行われたと看倣されます。上述の オプション -q に関する解説もお読みください。

4.1.4 ジョブ状態の表示

キューに投入されているPBSジョブの状態を調べるには qstat コマンドを使います。このコマンドも多数のオプションを持ちますが、まずはオプション無しで投入してみましょう。以下は qstat コマンドの実行例です。

% qstat
Job id           Name             User             Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
9123.m000        job1             user1            86:30:47 R long
9162.m000        job2             user2            53:56:23 R long
9270.m000        job3             user3            68:02:20 R long
9271.m000        job4             user4            00:08:25 R short
9345.m000        job5             user5                   0 Q long

ジョブの状態(Status)は上記の "S" 欄に記された文字で表されます。ジョブの代表的な Status には以下のようなものがあります。ジョブ Status の詳しい情報については man qsub を参照してください。

  • E (Exiting) ジョブは実行済みで終了中
  • H (Held) ジョブは保留状態
  • Q (Queued) ジョブはキュー待機状態
  • R (Running) ジョブは実行中
  • S (Suspended) ジョブは中断中

qstat コマンドに -Q オプションを付けて実行すると現在設定されている全キューの情報を得ることが出来ます。以下の例ではある時点での計算サーバのキュー構成が表示されています。

% qstat -Q
Queue              Max   Tot Ena Str   Que   Run   Hld   Wat   Trn   Ext Type
---------------- ----- ----- --- --- ----- ----- ----- ----- ----- ----- ----
long                 0    70 yes yes    21    49     0     0     0     0 Exec
short                0    33 yes yes     9    24     0     0     0     0 Exec

qstat -Q に似ていますが、qstat -q は現在設定されている全キューの情報を別種のフォーマットで出力します。各欄についての説明は man qsub をご覧ください。

% qstat -q
server: m000.cfca.nao.ac.jp
Queue            Memory CPU Time Walltime Node   Run   Que   Lm  State
---------------- ------ -------- -------- ---- ----- ----- ----  -----
long               --      --       --     --     49    21   --   E R
short              --   01:15:00    --     --     24     9   --   E R
                                               ----- -----
                                                  73    30

多数のジョブが投入されている状況では、自分が投入したジョブの状態のみを qstat で表示させたいことがあります。その場合には以下のようなコマンドを打ち込んでください。

% qstat -u 自分のアカウント名

大概の shell に於いて、上記のコマンドは以下のように一般化が可能でしょう。

% qstat -u `whoami`

同様にして、多数のジョブが投入されている状況で現在実行されているジョブの状態のみを表示させるには、以下のようにして -r オプションを付加してください。

% qstat -r

qstatコマンドの派生の一つとして、計算サーバでは qstat-n1 コマンドが準備されています。このコマンドを使うと各ジョブが実行されている計算ノード名を簡単に知ることができます。この出力はコマンド qstat -n1 -r の結果と本質的に同一ですが、各ジョブの情報が一行に短くまとまって出力されることが特徴です。なおこのコマンドではキューイングされてはいるがまだ実行されていないジョブ(Status = Q)の情報は表示されません。

% qstat-n1
Job ID          Username Queue    Jobname    SessID NDS S ETime Node Alloc
--------------- -------- -------- ---------- ------ --- - ----- -----------
24.m000.cfca.na useraa   long     runA.csh     4593   1 R 01:49 m001/0
25.m000.cfca.na userbb   long     runB.csh     4644   1 R 01:47 m001/1
26.m000.cfca.na usercc   long     runC.csh     4693   1 R 01:46 m001/2
27.m000.cfca.na userdd   long     runD.csh     4742   1 R 01:45 m001/3
28.m000.cfca.na useree   short    runE.csh     4735   1 R 01:45 m002/0

また、以下のように --version を付加して qstat を動かすとシステムにインストールされている PBS のバージョンを知ることが出来ます。なお以下に現れているバージョン番号は単なる例であり、実際に計算サーバにインストールされているものとは異なる場合があります。

% qstat --version
pbs_version = 19.1.3

4.1.5 ジョブの優先度制御

第4.1.3節の表にあるように、現在の設定では資源が空いてさえいれば各利用者はキュー long および mid で最大 960 本のPBSジョブを実行できます 。しかし同一利用者の 193 本目以降のジョブは優先度が下がります。そのような優先度の低いジョブの実行中に未だ総数 192 を越えたジョブを実行していない他の利用者がジョブを投入すると優先度の低いジョブは suspend 状態となり、他の利用者のジョブが終了するまで待たされます。Suspend されたジョブは qstat 表示では以下のように Status = S となります。

Job id            Name             User              Time Use S Queue
----------------  ---------------- ----------------  -------- - -----
81231.m000        myjob            someuser          01:01:25 S long

ジョブ制御の例

ここではキュー long に複数利用者のPBSジョブが投入された場合の動作例を簡潔に説明します。なお、以下では説明の簡潔さ優先のためにこのキューで利用できる総コア数 = 8と仮定し、ひとりの利用者が投入できるジョブ数上限を 8 (soft limit = 4) としていることにご注意ください。

(1) 利用者Aが 11 本のジョブを投入した場合。コア資源が空いていれば全部実行される
Running    : A A A A A'A'A'A' (←5-8本目のジョブ A' は低い優先度)
Queued     : A"A"A"                (←9本目以降のジョブ A" はキューイング状態)

(2) 利用者Bがジョブを 4 本投げた直後。優先度が低いジョブ A' は suspend される

Running    : A A A A B B B B  (←A' に代わり利用者 B のジョブが走る)
Queued     : A"A"A"
Suspended  : A'A'A'A'             (←ジョブ A' は SIGSTOP 信号により suspend される)

(3) 利用者Bのジョブが先に終了するとジョブ A' は suspend から実行状態へ戻る

Running    : A A A A A'A'A'A' (←ジョブ A' の実行が再開される)
Queued     : A"A"A"

その他
  • 上記の優先度制御は PBS の soft limit 機能により実現されています。利用者数がノード数よりも少ない場合にはこの機能の仕様により一見すると直感に反するジョブの割り付けが為されることがありますが、バグではありません。
  • 上記の状態 (2) のように suspend されたジョブが存在する時に保守作業等のためにシステムが停止された場合、再起動後には停止前に実行されていたジョブ(Status = R)と suspend されていたジョブ(Status = S)の投入順序が変わり、停止前に実行されていたジョブが suspend されることがあります。

4.1.6 PBS に関するその他の情報

ジョブの round-robin 形式制御

キュー long(または short)にジョブが一本も投入されていない状況でジョブを投入開始すると、ジョブは各ノード上に以下のような順序で分配されて行きます。これはジョブを各計算ノードに分散してなるべく負荷を均質にしようとするための制御であり、round-robin 形式と呼ばれています。

m001 → m002 → m003 → … → m239 → m240 → m001 → m002 → …

ジョブが強制終了された場合の制御

計算サーバの PBS 環境にはチェックポイント機能がありません。従って、保守作業やシステムダウン等で計算ノードが停止し、再起動された場合のジョブの動きは以下のようになります。

  • PBS スクリプト内でジョブの再実行を設定しているジョブ(#PBS -r y というオプション指定がある、または #PBS -r のオプション指定を持たないジョブ):
    • システム再起動後、資源の空いている計算ノードに於いてジョブの先頭から計算が再開されます。飽くまでジョブ先頭からの計算再実行であり、システム停止時にジョブが到達していた中途時点からの再開は出来ないことに留意してください。
  • PBS スクリプト内でジョブの再実行を設定していないジョブ(#PBS -r n のオプション指定があるジョブ):
    • 当該ジョブはシステム再起動後も自動的に再投入されることはありません。当該ジョブはシステム再起動後にキューから削除されます。

なお、システム停止前にキューイングされていたジョブ(Status = Q)の実行順序はシステムの再起動後も保存されます。ちなみにジョブに関する情報は以下の tracejob コマンドで取得できます。

% tracejob ジョブID

また、qstat にオプション -fx を付加しても詳しいジョブ情報を取得できます。

% qstat -fx ジョブID

5. その他の注意事項

5.1 ログインノードでの直接計算実行の禁止

ログインノードである m000.cfca.nao.ac.jp での直接計算実行および大規模な可視化(例えば m000 のコマンドラインから a.out 等の実行形式ファイルを直接投入することなど)は絶対に行わないでください。
m000はログインノードであると同時に計算サーバ全体の管理ノードでもあり、この機器の負荷が不必要に上がると PBS 計算ノードとの通信に異常が発生し、最悪の場合には他利用者のジョブが強制終了されることもあります。利用者各位の計算ジョブは短時間のものであっても必ず qsub コマンドを用い、PBS 経由で計算ノードに投入して頂くよう強くお願い申し上げます。データの可視化作業には解析サーバをご利用ください。
m000上で負荷の大きいプロセスが発見された場合には、当該プロセスを強制的を削除する場合があることをご承知おきください。

5.2 利用者データの無補償・無保証

募集要項こちらの注意事項にも記されているように、計算サーバ利用に当たっての不慮の事故等によるデータの破損・消失、プログラム実行結果やその遅延等により利用者が受け得る如何なる損害についても、本プロジェクトとしては一切の補償・保証を行うことが出来ません。また、計算サーバ上のデータについて本プロジェクトとしてはバックアップの保管等は全く行っておりません。あらかじめご了承ください。