複数のHPCクラスターとの対話をサポートするライブラリおよびコマンドラインインターフェイス
単一のインターフェイスを使用して、最も人気のあるHPCジョブスケジューリングシステムと対話する機能を提供し、ジョブ提出スクリプトの作成を可能にします。
SGE、LSF、およびSLURMでテストしました(開発中のPBS/トルクサポート)
MyClusterはPypiからインストールできます。
pip install mycluster
MyClusterは、送信ファイルにメールアドレスを書き込み、スケジューラから更新を受信できるようにします。これをコマンドラインに提供するか、構成ファイルに保存できます。 [構成ファイル]ファイルにメールを保存するには:
mycluster configure
デフォルトでは、MyClusterは基礎となるスケジューラを検出しようとしますが、MyCluster_Sched環境変数を設定することでこれをオーバーライドできます。これは、 mycluster.schedulers.base.Schedulerクラスを実装するPythonクラスの文字列名に設定する必要があります。
場合によっては、追加のパラメーターまたはスケジューラコマンドを含める場合など、送信テンプレートをオーバーライドする場合があります。これを行うには、使用するJinjaテンプレートにmyCluster_Template環境変数を設定します。ベーステンプレートについては、MyCluster/Schedulers/Templatesを参照してください。
MyClusyterは、「MyCluster」CLIコマンドをインストールして、コマンドラインを介してローカルスケジューラと対話します。
プリントコマンドヘルプ
mycluster <command> --help
すべてのキューをリストします
mycluster queues
ジョブをリストします
mycluster list
新しい送信ファイルを作成します。[ヘルプ]を参照してください。
mycluster create JOBFILE QUEUE RUNSCRIPT
ジョブファイルを送信します
mycluster submit JOBFILE
ジョブをキャンセルします
mycluster cancel JOBID
job_scriptによって実行されるrunscriptは、次の事前定義された環境変数を利用できます
export NUM_TASKS=
export TASKS_PER_NODE=
export THREADS_PER_TASK=
export NUM_NODES=
# OpenMP configuration
export OMP_NUM_THREADS= $THREADS_PER_TASK
# Default mpiexec commnads for each flavour of mpi
export OMPI_CMD= " mpiexec -n $NUM_TASKS -npernode $TASKS_PER_NODE -bysocket -bind-to-socket "
export MVAPICH_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE -bind-to-socket "
export IMPI_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE " MyClusterは、MyClusterモジュールを使用してプログラムで使用できます。すべてのスケジュールは、ベースmycluster.schedulers.base.Schedulerクラスを実装します。
import mycluster
# Detect the local scheduler
scheduler = mycluster . detect_scheduling_sys ()
print ( f"Scheduler loaded: { scheduler . scheduler_type () } " )
# Create a batch script to submit a 48 task run of script.sh to the skylake queue
script = scheduler . create ( "skylake" , 48 , "my_job" , "script.sh" , "01:00:00" , tasks_per_node = 24 )
# Write to a file
with open ( "mysub.job" , "w" ) as f :
f . write ( script )
# Submit the batch script
job_id = scheduler . submit ( "mysub.job" )
# Check the status of the job
print ( scheduler . get_job_details ( job_id ))
# Cancel the job
scheduler . delete ( job_id )