PBS ジョブスクリプトのサンプル

サンプル置き場

ログインノードの /work/SAMPLES 以下にサンプルが置いてありますので, 自分のホームディレクトリ以下にコピーしてから使って下さい. 特に, Dockerfile は, コピーした後, 必要なライブラリを自分で追加すると良いです.

/work/SAMPLES

  CPU:
    c_mpihello.c  c_mpihello.sh   C言語 + MPI の例
    c_omphello.c  c_omphello.sh   C言語 + OpenMP の例
    mpihello.f90  mpihello.sh     Fortran90 + MPI の例
    omphello.f90  omphello.sh     Fortran90 + OpenMP の例

  Python-docker-chainer:
    chainer-sample.py  job.sh           chainer のサンプル

  Python-docker-tensorflow_1.5:
     job01.sh  tensorflow1-sample-1.py  tensorflow ver.1 のサンプル
     job02.sh  tensorflow1-sample-2.py

  Python-venv:
     job01.sh  tensorflow2-sample.py    tensorflow のサンプル
     job02.sh  pytorch-sample.py        pytorch のサンプル

スクリプトの書き方

ジョブスクリプトの先頭で, 以下のようにキューと利用する資源を指定する. select=1 は必ず書く必要がある.

#PBS -q <キュー>
#PBS -l select=1:ngpus=<GPUの基数>:ncpus=<CPUコア数>:mpiprocs=<MPI並列数>:ompthreads=<OMP並列数>

デフォルト値:
  ngpus      = 0
  ncpus      = 1
  mpiprocs   = 1
  ompthreads = 1

注意事項: 
  ncpus = mpiprocs * ompthreads となるように指定すること

MPI で並列計算するためのジョブ. cpu キューを利用.

mpirun には -n オプション(並列数の指定)を行う必要はない. PBS の mpiprocs の数字がそのまま使われる.

#!/bin/sh
#PBS -q cpu                                  <= キューの指定
#PBS -l select=1:ncpus=8:mpiprocs=8          <= ncpus, mpiprocs に並列数を指定. select=1 の部分は変えないこと.

cd $PBS_O_WORKDIR                            <= ジョブ投入したディレクトリへ移動
mpirun ./c_mpihello                          <= mpirun から実行する. 

OpenMP で並列計算するためのジョブ. cpu キューを利用.

環境変数 OMP_NUM_THREADS を export する必要はない. PBS の ompthread の数字がそのまま使われる.

#!/bin/sh
#PBS -q cpu                                  <= キューの指定
#PBS -l select=1:ncpus=8:ompthreads=8       <= ncpus, ompthreads に並列数を指定. select=1 の部分は変えないこと.

cd $PBS_O_WORKDIR                            <= ジョブ投入したディレクトリへ移動
./c_omphello                                 <= コマンド

MPI + OpenMP で並列計算するためのジョブ. cpu キューを利用.

mpirun には -n オプション(並列数の指定)を行う必要はない. PBS の mpiprocs の数字がそのまま使われる. また, 環境変数 OMP_NUM_THREADS を export する必要はない. PBS の ompthread の数字がそのまま使われる.

#!/bin/sh
#PBS -q cpu                                  <= キューの指定
#PBS -l select=1:ncpus=8:mpiprocs=4:ompthreads=2   <= MPI 4 並列 x OMP 2 並列 = 8 並列で実行. select=1 の部分は変えないこと

cd $PBS_O_WORKDIR                            <= ジョブ投入したディレクトリへ移動
mpirun ./c_omphello                                 <= コマンド

venv をつかって GPU を用いた計算をする例. ngpus に 1 を指定する

#!/bin/sh
#PBS -q gpu                       <= キューの指定
#PBS -l select=1:ncpus=1:ngpus=1  <= ncpus に CPU 数, ngpus に GPU 数を指定. GPU 数は 1 にすること. select の数字は変えない

# ジョブを実行したディレクトリに移動
cd $PBS_O_WORKDIR

# 開始処理. venv 環境をアクティベート.
. /work/ENV/matsue-ct/venv/bin/activate

# python プログラムの実行
python tensorflow2-sample.py 

# 終了処理. venv 環境をディアクティベート.
deactivate

docker を使って GPU を用いた計算をする例. docker run を実行する.

mpirun には -n オプション(並列数の指定)を行う必要はない.

#!/bin/sh
#PBS -q gpu                       <= キューの指定
#PBS -l select=1:ncpus=1:ngpus=1  <= ncpus に CPU 数, ngpus に GPU 数を指定. GPU 数は 1 にすること. select の数字は変えない

# ジョブを投入したディレクトリに移動
cd $PBS_O_WORKDIR

# docker コンテナを用いて実行
docker run --gpus all -v $PWD:/tmp -w /tmp --rm -u `id -u $USER` chainer/matsue-ct python3 chainer-sample.py -g 0
注意: docker のジョブファイルでは -u <ユーザID> を必ず設定すること. docker は内部では root 権限で動いているので, -u オプションを付けないと作成するファイルやディレクトリの所有者が root になり,ファイルの編集などが出来なくなってしまう.

メール送信する場合

ジョブ実行時・終了時にメールを送る場合は ジョブファイルに -M, -m オプションを追記する. 但し, メールアドレスとして学内のものを指定すること. 学外のメールアドレスは使えません.

#PBS -M XXXX@matsue-ct.jp             <= メールアドレスを指定
#PBS -m abe                           <= これは変えないで良い