共有利用では、他の利用者が計算機を使用している場合に、計算を実行するまでに"順番待ち"が発生することがあります。
計算の実行順は、スケジューラというソフトウェアによって、資源の要求量や各種制限に応じて決定し管理しているため、利用者の皆様でコントロールすることは難しいのですが、プログラムの計算規模や、ジョブスクリプトで指定する要求資源量を調整することで、待ち時間の短縮を狙うことも出来ます。
以下でその方法を解説します。
 

1.現在の利用状況を確認する

    自分を含めた他の利用者の利用状況を確認する方法はいくつかありますが、今後の利用スケジュールを含めて視覚的に確認したい場合は、以下のWEBページが利用可能です。
    OCTOPUS利用状況 SQUID利用状況
     

    以下の画像はOCTOPUSの利用状況のページです。
    ”#”が使用中/スケジュール済の計算ノード、”.”が空いている計算ノードです。
     
    計算機の状況によっては、直近の数時間で計算ノードに空きが生まれる場合があります。
    以下の例では、OCTOPUS 汎用CPUノード群の3ノードにて、15時55分から5時間分、"隙間時間"があることを示しています。
    こうした"隙間時間"に収まるよう経過時間(elapstim_req)を調整しジョブを投入することで、待ち時間無く計算が実行される可能性があります。
     

     

2.計算規模、資源量を調整する

    以下の例は、OCTOPUS汎用CPUノード群で24時間の計算を実行するジョブスクリプトとなります。
    このままqsubしても、上記の"隙間時間"には収まらず、計算実行までに順番待ちが発生します。

    #!/bin/bash
    #PBS -q OCTOPUS
    #PBS -l elapstim_req=24:00:00
    cd $PBS_O_WORKDIR
    ./a.out

     

    このようなときは、プログラムの実行にかかる計算時間と、ジョブスクリプトで指定している"elpstim_req"の時間に乖離が無いか確認しましょう。スケジューラはジョブスクリプトの"elpstim_req"を元に計算ノードをスケジューリング(予約)しますので、長時間に設定していると"隙間時間"に収まらず最後方にスケジューリングされることになり、待ち時間が長期化してしまう可能性が高いです。
     
    今回の例の場合、仮に3時間前後で実行終了するプログラムの場合は、ジョブスクリプトで指定しているelapstim_reqを4時間に修正するとよいでしょう。また、実際に24時間程度の計算時間かかってしまう場合でも、計算規模を縮小できるプログラムや複数ジョブに分割できるプログラム、計算を途中で中断・再開できるプログラムなどの場合は、5時間以内に実行終了するようプログラム中のパラメータを変更し、複数回に分けて実行することで結果的に早く実行できます。
     
    注意点として、計算時間がelapstim_reqで指定した時間に達した時点でプログラムは強制終了されますので、elapstim_reqは実際の計算時間よりも少し余裕を持って設定するようにしてください。実行時間が見積もれない場合は長めに指定しておき、何度か実行して実際にかかる計算時間をある程度把握した上で、elapstim_reqの指定を段階的に短くしていくのが良いでしょう。
     

    今回は、4時間で実行終了するように、elapstim_reqの値を修正しました。

    #!/bin/bash
    #PBS -q OCTOPUS
    #PBS -l elapstim_req=4:00:00
    cd $PBS_O_WORKDIR
    ./a.out

     

    無事、"空き"ノードでジョブが実行されました。

     

    また、動作確認など短時間で終わるジョブを実行する際は #PBS -qオプションで指定するジョブクラスに"DBG"をご利用ください。DBGキューは"elpstim_req"が最長でも10分までの短時間専用のジョブクラスとなっていますが、ジョブの回転が早いため通常のキューに比べて待ち時間が少なくなります。以下はDBGキューで実行する場合のジョブスクリプト例です。

    #!/bin/bash
    #PBS -q DBG
    #PBS -l elapstim_req=10:00
    cd $PBS_O_WORKDIR
    ./a.out

 

注意事項

    利用状況WEBページはリアルタイムでは無く、5分に1度の更新となります。また、計算ノード上でメンテナンスを実施している場合、一時的に"空き"ノードのように見えることがあります。
    狙ったノードで計算が実行されない場合もございますので、予めご了承ください。
     
    上記のとおり、elapstim_reqの指定を短くすることで、待ち時間の短縮が期待できますが、elapstim_reqを超えた場合はその時点でジョブが強制終了となりますので、ご注意ください。

 

どうしても早く実行したい場合:高優先度キューの利用(SQUID限定)

    SQUIDには「SQUID-H」という高優先度キューが整備されています。
     
    ジョブスクリプトの-qオプションで「SQUID-H」を指定してジョブを投入することで高優先度ジョブとなり、通常のキューで投入されたジョブよりも優先的にスケジューリングされ、待ち時間を短縮できます。ただし、通常のキューに比べて消費係数が高く設定されているため、実行した際のポイント消費量が通常のキューよりも多くなります。通常キューや高優先度キューの消費係数など、ポイント制度の詳細については以下のページをご覧ください。
    ポイント制度について

    上記の通り割高での利用となってしまいますので、プログラムの性質上elapstim_reqの指定を短くできない場合や、過度の混雑により短くしても待ち時間が改善されない場合などにご利用いただければと思います。