私は.shスクリプトを使用する初心者ですので、無知を許してください。私の質問は次のとおりです。
自分のジョブをクラスタに送信するには、その送信ファイルに次の「slurmヘッダー」が含まれている必要があります。
#!/bin/sh
#
########## Begin Slurm header ##########
#
#SBATCH --job-name=blabla
#
########### End Slurm header ##########
# Load module
module load math/matlab/R2020a
# Start a Matlab program
matlab -nodesktop -r "program $1 $2"
exit
2つのパラメータを.shファイルに渡し、それをmatlabプログラムに渡します。入力パラメータに基づいてSlurmヘッダーのジョブ名を動的にする方法は?
単に#SBATCH --job-name=blabla$1$2
予測可能なコンテンツを作成することは効果がありません。
ベストアンサー1
ジョブで実行したいコマンドのみを含む、以下のsbatchジョブスクリプトを作成します。
#!/bin/sh
# you can include #SBATCH comments here if you like, but any that are
# specified on the command line or in SBATCH_* environment variables
# will override whatever is defined in the comments. You **can't**
# use positional parameters like $1 or $2 in a comment - they won't
# do anything.
# Load module
module load math/matlab/R2020a
# Start a Matlab program
# give it five arguments, -nodesktop, -r, program, and two
# more that you pass in as arguments to THIS script.
matlab -nodesktop -r "program" "$1" "$2"
# alternatively (since I don't know how matlab runs "program",
# or how it handles args or how it passes them on to a matlab
# script), maybe just three args:
# matlab -nodesktop -r "program $1 $2"
exit
たとえば、必要に応じて保存./mymatlabjob.sh
して実行可能にします。chmod +x mymatlabjob.sh
次に、コマンドラインから実行します。
sbatch --job-name "whatever job name you want" ./mymatlabjob.sh arg1 arg2
matlabジョブに渡すパラメータはどこにありarg1
、何ですか?arg2
または、次のネストされたループで:
#!/bin/sh
for i in 1 2 3; do
for j in 3 2 1; do
sbatch --job-name "blablah$i$j" ./mymatlabjob.sh "$i" "$j"
done
done
このコマンドを実行すると、sbatchを使用してそれぞれ異なるジョブ名を持つ9つの異なるジョブが実行されます($ iおよび$ jの各反復ごとに1つ)。