コンテンツにスキップ

5. 簡易型ジョブ内ワークキュー

Warning

下記のサービスは実験的サービスとして公開しています。正式なサポートはありません。
また、予告なく動作しなくなる・公開終了する可能性があります。

TSUBAMEのジョブスケジューラおよび課金システムは、ジョブ開始時の初期化オーバヘッドの面から、 パラメータサーベイのような細かいジョブを大量に投入することには向いておらず、 1つの大きなジョブの中でタスクを逐次的に処理することを推奨しています。
このページではジョブ内で複数のタスクを逐次処理するスクリプト例を紹介しています。

Download: dirworkqueue.sh

本スクリプトは、ユーザによって必要な改変(run_taskの実装等)を行ったうえで、qsubで実行されることを想定しています。 利用方法の詳細はスクリプト内のコメントも適宜ご参照ください。

  • ジョブ投入時のディレクトリ下に ready ディレクトリを作成のうえで、 その下にファイルもしくはディレクトリの形で各タスクのインプットファイルを配置してください。
  • ready ディレクトリ内の各ファイル/ディレクトリをタスクと見做し、 逐次処理を行い、完了したものを complete 、失敗したものを failed の各ディレクトリに格納します。
  • 本スクリプトは同時に複数実行された場合でも各タスクがそれぞれ1度ずつのみ実行されるようになっています。 各タスクを並行して実行したい場合、必要な数だけジョブを投入してください。
  • 各ジョブは running/${JOB_ID} ディレクトリを作業場所として使います。 touch running/123456/terminate などとして、 terminate ファイルを作成すると、 現在実行中のタスクの完了時に次のタスクに処理を移すことなく終了することができます。
  • 本スクリプトは、タスクの実行中にジョブの時間切れとならないよう、23時間(RUNTIME_LIMIT)経過後は新しいタスクを 実行しないようにできています。ジョブの指定実行時間や、各タスクの所要時間に合わせて調整してください。 また、このような場合にジョブを再投入する機構も備えています(RESUBMIT)。 本機構を有効にする場合は、タスクの無限実行とならないよう十分留意してください。