犬でも分かるOpen OnDemand(6):ジョブ投入

Open OnDemand

clusterを定義してSlurmをインストールした後は、Open OnDemandからジョブ投入できるようにしてみましょう。参考にしたのは、Open OnDemandのSlurmのページです。

cluster定義ファイルにjobブロックを定義する

犬でも分かるOpen OnDemand(4)で作成した /etc/ood/config/clusters.d/my_cluster.yml に job のブロックを追加します。内容は以下の通りとしました。

v2:
metadata:
title: "My Cluster"
login:
host: "ood0.home.local"
job:
adapter: "slurm"
cluster: "my_cluster"
bin: "/usr/bin"
conf: "/etc/slurm/slurm.conf"
bin_overrides:
sbatch: "/usr/local/bin/sbatch"
squeue: "/usr/local/bin/squeue"
scontrol: "/usr/local/bin/scontrol"
scancel: "/usr/local/bin/scancel"
copy_environment: false

job の adapter は slurm を定義します。conf にはSlurmの定義ファイル /etc/slurm/slurm.conf を定義して、cluster には slurm.confの ClusterName に定義した名前と同じにします。

slurmコマンドのwrapperを作成する

Open OnDemandからのジョブ操作では、Slurmのコマンド sbatch,squeue,scontrol,scancelを実行することになります。これらのコマンドが存在するディレクトリは bin で定義(/usr/bin)します。。。
でも、それぞれのコマンドのパスを個別に定義することも可能です。そういうことで今回は、sbatchなら /usr/local/bin/sbatch というwrapperを作成して、そちらを使うようにします。

何故かというと、 Open OnDemand がこれらのコマンドを実行する際に、引数に「-M <クラスタ名>」を付与するのですが、私のSlurm環境ではエラーになるためです(まあ、そんなに真剣に構築していないので..)。それ故、wrapperで -M オプションを無視するようにしています。以下はsbatch用のwrapperですが、squeue,scontrol,scancel も同様に作成します。

#!/bin/bash
ARGS=()
while (( $# > 0 ))

do
if [ "$1" = '-M' ]; then
shift
else
ARGS=("${ARGS[@]}" "$1")
fi
shift
done
/usr/bin/sbatch ${ARGS[*]}

ジョブ投入してみる

ジョブ操作の画面遷移

Open OnDemandのジョブ投入~ジョブ状態表示~結果の確認といった操作がどのような画面遷移になっているかを理解するために、画面遷移図を書いてみました。以下の図において、右に向かう矢印では、ブラウザのウィンドウが新しいタブでOpenされます。
正直なところ理解しないと使いづらい。。でも理解すると、なるほどーと思う設計です。

Jobs Composerでジョブ投入

① 本体画面の「Jobs」の「Jobs Composer」を選択します。

①本体画面

② Job ComposerのNew Job画面が新しいタブで表示されます。
初期の状態では、登録済のジョブは存在しません。
「New Job」から「From Default Template」を選択すると、ジョブのテンプレートが登録され、③のJobsの画面に遷移します。

③Job Composer画面

③ Jobs画面では、左側にジョブテンプレートの一覧が表示されます。右側には、テンプレートに対応する情報、すなわち、ジョブスクリプトが作成されるディレクトリ(ジョブ投入ディレクトリ)のパス、ジョブスクリプトのファイル名、内容が表示されます。

③ジョブテンプレート画面

④ ジョブを投入する前に、ジョブスクリプトの内容を修正する必要があるので、「Open Editor」をクリックします。すると、File Editor画面が新しいタブで表示されます。

④File Editor画面-変更前

編集画面で内容を変更(sleep 60を入れてみました)すると、「Save」ボタンの背景が白くなります(Saveの文字色が白なのでとても見づらい..)。

⑤ ③のJobs画面で、ジョブ投入したいテンプレートを選択して「Submit」ボタンをクリックすると、ジョブが投入されます。

ジョブ状態の表示

⑥ 本体画面の「Jobs」の「Active Jobs」を選択すると、実行中のジョブ一覧が表示されます。
一覧を更新するのに「Update」ボタンがあれば良いのですがありません。だから、ブラウザのリロードアイコンをクリックして画面を更新します。

⑥Active Jobs画面

③のJobs画面のジョブテンプレート一覧のStatusフィールドにもジョブの状態が表示されるので、わざわざActive Jobsの画面を表示しなくても良いかもしれません。

ジョブの出力の確認

⑦ ジョブが終了したら、ジョブ投入ディレクトリ配下にジョブの出力ファイルが作成されます。
それを確認する方法の1つ目は、③のJobs画面から「Open Dir」ボタンをクリックして、Files画面を新しいタブで表示することです。

⑦ジョブ出力の確認1

⑧ ジョブの出力ファイルを確認する2つ目の方法は、③のJobs画面から「Open Terminal」ボタンをクリックして、ターミナル画面を新しいタブで表示することです。ターミナルのカレントディレクトリはジョブ投入ディレクトリになっています。

⑧ジョブ出力の確認2

ジョブテンプレートとは何か..

Open OnDemandにおけるジョブテンプレートは、同じジョブ投入ディレクトリから投入するジョブのひな型と定義することができます。ジョブテンプレート毎に、
$HOME/ondemand/data/sys/myjobs/projects/default/<ジョブID>/
というパスでジョブ投入ディレクトリが作成されて、その配下にジョブスクリプトが作成されます。ジョブ投入ディレクトリもこのディレクトリになるので、ジョブの出力もここに保存されます。

③のJobs画面のジョブテンプレート一覧で、テンプレートを選択して「Delete」をクリックすると、上記のジョブ投入ディレクトリとその配下に作成されたファイルも削除されます。

所感

初めてジョブ投入の操作をしたときには、画面遷移がよく理解できませんでしたが、慣れてみると、ジョブテンプレートという概念も含めて、使いやすいんじゃないかなと思えてきました。。
Active Jobs(実行中のジョブ一覧)の画面には、「Update」ボタンが欲しいですし、Jobs画面(ジョブテンプレートの一覧画面)にあったような、ジョブ投入ディレクトリを表示するボタンがあると便利かなあと思いました。

広告主へのリンク




このブログにおける関連リンク

犬でも分かるOpen OnDemand シリーズ

コメント

タイトルとURLをコピーしました