2016-08-31 12 views
2

クラスタマネージャーslurmを使用していて、sbatch(Pythonインターペーターを使用)を使用してサブミットスクリプトを実行していました。 sbatch submissionは、main_nn.pyというモジュールの1つをインポートしました。モジュールは私のサブミットディレクトリと同じ場所にありますが、ファイルが存在していてもpythonはそれを見つけることができません。なぜこのことが起こっているのかを考え出すのは難しいです。私のpythonファイルには、以下のようになります。SLURMでsbatchコマンドを使用するときにローカルPythonモジュールをインポートする方法

#!/usr/bin/env python 
#SBATCH --job-name=Python 

print('hi') 

import main_nn 

私SLURMダンプファイルの出力があるしかし:

hi 
Traceback (most recent call last): 
    File "/home/slurm/slurmd/job3223398/slurm_script", line6, in <module> 
     import main_nn 
ImportError: No module named main_nn 

モジュールmain_nnは、カレントディレクトリにあった、それは確かにあった場合、私はチェックしてみました。したがって、私に疑わしい最初のことは、slurmファイルのエラーが、path_to_projectではなく、"/home/slurm/slurmd/job3223398/slurm_script"にあると言っていたということでした。したがって、私は先に行ってきましたそのsbatchがで実行されるスクリプトへのファンキーな何かをやっている意味する必要があります私のスクリプトから、私の驚き、それはむしろ"/home/slurm/slurmd/job3223398/slurm_script"でよりpath_to_projectで実行していたに実行されていた場所を確認するにはライン

os.system('pwd') 

を追加しました1つの場所が、それを別の場所で考えるようにします。この場合、モジュールが私のサブミットスクリプトと同じ場所にあるところで、私はどのようにPythonでインポートを行うと思われますか?私はそれをパッケージに入れて、パッケージ/ライブラリでそれを考えるためにpythonを欺くことを余儀なくされましたか?

+0

https://rcc.uchicago.edu/docs/tutorials/kicp-tutorials/running-jobs.html –

+1

提出ディレクトリにPYTHONPATHを設定しようとしましたか? – damienfrancois

+0

関連:https://stackoverflow.com/questions/46718499/how-does-one-make-sure-that-the-python-submission-script-in-slurm-is-in-the-loca/46724189?noredirect = 1#comment80425963_46724189 –

答えて

2

Slurmは、サブミッションスクリプトを計算ノード上の特定の場所にコピーして実行するため、Pythonスクリプトはサブミッションディレクトリにあるモジュールを見つけられません。

しかし、あなたが明示的のようなもので、Pythonのパスに追加することができますので、SLURMは正しく現在の作業ディレクトリを設定します。あなたのスクリプトの先頭近く

sys.path.append(os.getcwd()) 

+0

私はそれを手に入れません、なぜ、それだけでこれを行うのではないのですか? –

+0

これは単に開発チームによって見過ごされたかもしれません。 – damienfrancois

+0

には、この問題に対する意識を高める方法がありますか?存在すべきではないはずの問題の種類が私には分かります。 –

関連する問題