2

sbatch次を使用して実行するpython送信スクリプトがありますslurm

sbatch batch.py

私がこれを行うと、batch.pyプロセスが適切な環境変数を継承しないと思われるため、適切に機能しません。したがって、コマンドが実行batch.pyされた場所から実行するのではなく、別の場所から実行されました(私は信じています)。Pythonスクリプトをbashスクリプトでラップすることで、これを修正できました。sbatch/

#!/usr/bin/env bash
cd path/to/scripts
python script.py

この一時的なハックは、問題に対処するのではなく、問題をすべて回避しているように見えますが、うまく機能しているようです。誰かがこれをより良い方法で修正する方法を知っていますか?

たとえば、docker には-wor-WORKDIRが存在するため、docker コンテナーはどこにあると想定されているかを認識できます。そのようなものがスラームに存在するのだろうかと思っていました。

4

1 に答える 1

3

Slurm は、ユーザーまたはシステム管理者によって明示的に無効にされた変数を除いて、送信時にユーザーの環境をジョブにプッシュするように設計されています。

ただし、スクリプトの実行方法は次のとおりです。スクリプトは、コマンドが実行$PWDされたディレクトリに設定して、Slurm 固有のディレクトリの割り当てのマスター ノードにコピーされ、そこから実行されます。sbatch

次のような単純なスクリプトでそれを確認できます。

$ cat t.sh
#!/bin/bash
#
#SBATCH --job-name=test_ms
#SBATCH --output=res_ms.txt

echo $PWD
dirname $(readlink -f "$0")

$ sbatch t.sh
Submitted batch job 1109631
$ cat res_ms.txt
/home/damienfrancois/
/var/spool/slurm/job1109631

結果の 1 つは、現在のディレクトリにモジュールをインポートする Python スクリプトが失敗することです。sys.path.append(os.getcwd())回避策は、失敗したインポートの前に明示的に追加することです。

于 2017-10-13T06:59:05.650 に答える