Condorを使用して、クラスター上のマシンで処理するジョブを送信する方法を見つけました。多くのマシンがあり、それらのマシンのそれぞれが同じように構成されているわけではないので、私は疑問に思っていました:
私のスクリプトはこのパッケージに依存しているため、numpy がインストールされているマシンに私のジョブ (python スクリプト) をディスパッチするようにコンドルに指示することはできますか?
Condorを使用して、クラスター上のマシンで処理するジョブを送信する方法を見つけました。多くのマシンがあり、それらのマシンのそれぞれが同じように構成されているわけではないので、私は疑問に思っていました:
私のスクリプトはこのパッケージに依存しているため、numpy がインストールされているマシンに私のジョブ (python スクリプト) をディスパッチするようにコンドルに指示することはできますか?
他のマシン属性と同様に、マシン クラスアドでアドバタイズし、ジョブにそれを要求させるだけです。
マシンの classad でアドバタイズするには、次のようなものを追加して、各マシンのコンドル構成ファイルにハードコードすることができます。
has_numpy = True
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY
...またはさらに良いことに、スクリプトを使用して実行時に動的に検出し、startd classad hookを介して結果をアドバタイズするように Condor に指示できます。has_numpy
これを行うには、次のように各マシンに簡単なスクリプトをインストールします。
#!/usr/bin/env python
try:
import numpy
except ImportError:
print "has_numpy = False"
else:
print "has_numpy = True"
...そして、マシンのコンドル構成ファイルに以下を追加して、5分ごとに実行し、結果を開始したclassadに貼り付けるようにコンドルに指示します。
HASNUMPY = /usr/libexec/condor/has_numpy
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY)
STARTD_CRON_HASNUMPY_PERIOD = 300
...そして、(再構成後)あなたのマシンは、numpyがインストールされていてPythonスクリプトで利用できるかどうかを動的に検出して報告します。
次に、次のように、対応する要件をジョブ送信ファイルに追加するだけです。
Requirements = (has_numpy == True)
...そして、ジョブは numpy がインストールされているマシンでのみ実行されます。
する必要がありますか?コンドルのマニュアルによると:
Condor は、ジョブを実行するマシンでアカウント (ログイン) を必要としません。Condor がこれを実行できるのは、ディスク ファイルからの読み取りや書き込みなどの操作に対するライブラリ呼び出しをトラップするリモート システム コール テクノロジのおかげです。呼び出しはネットワーク経由で送信され、ジョブが送信されたマシンで実行されます。
これは、ジョブを送信するマシンに numpy がインストールされていれば、動作するはずであることを意味します。