2016-01-16 12 views
12

コンピューティングクラスタにアクセスできます。具体的には、1つのノードに2つの12コアCPUがあり、これはSlurm Workload Managerで動作しています。SlurmクラスタでTensorFlowを実行していますか?

私はそのシステムでTensorFlowを実行したいと思いますが、残念ながらこれを行う方法やこれが可能であるかどうかについての情報は見つかりませんでした。私はこれに新しいですが、私が理解する限り、私はSlurmジョブを作成してTensorFlowを実行しなければならず、ssh経由でpython/tensorflowを直接実行することはできません。

誰でもこのトピックに関するアイデア、チュートリアル、またはあらゆる種類のソースを持っていますか?

+1

[継続的インテグレーションサイト](http://ci.tensorflow.org/)についての情報が助けになるかもしれません。また、[readme](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/tools/ci_build/README.md)を参照してください –

+0

私はSlurmとDockerのGoogleクエリを実行し、複数の結果がありました。 –

+1

特定の情報源を見つけましたか?はいの場合は、共有してください。もちろん、Googleはいくつかのページをリストしていますが、Slurmジョブを使ってPython-APIでTensorFlowを実行するためのヒントやチュートリアル、公式の情報は見つかりませんでした。 – daniel451

答えて

19

これは比較的簡単です。

ホストごとに1つのプロセスを要求する簡単な仮定の下で、slurmは環境変数に必要なすべての情報、特にSLURM_PROCID、SLURM_NPROCS、およびSLURM_NODELISTを提供します。次のように

たとえば、あなたがあなたのタスクインデックス、タスクの数とノードリストを初期化することができます:SLURMはあなたにその圧縮形式のホストリストを与えること

from hostlist import expand_hostlist 
task_index = int(os.environ['SLURM_PROCID']) 
n_tasks  = int(os.environ['SLURM_NPROCS']) 
tf_hostlist = [ ("%s:22222" % host) for host in 
       expand_hostlist(os.environ['SLURM_NODELIST']) ] 

注意を(例えば、「myhostの[11 -99] ")、拡張する必要があります。私は、例えば、利用可能 ケントEngströmにより、モジュールのホストリスト、とここhttps://pypi.python.org/pypi/python-hostlist

その時点で、あなたは右先に行くことができますし、利用可能な情報を使用してTensorFlowクラスタの指定とサーバーを作成することを実行します。

cluster = tf.train.ClusterSpec({"your_taskname" : tf_hostlist }) 
server = tf.train.Server(cluster.as_cluster_def(), 
          job_name = "your_taskname", 
          task_index = task_index) 

あなたはセットです!これで、通常の構文を使用して割り当ての特定のホスト上でTensorFlowノードの配置を行うことができます。

for idx in range(n_tasks): 
    with tf.device("/job:your_taskname/task:%d" % idx): 
     ... 

上記報告のコードを持つ欠点は、すべてのジョブが固定ポート22222でリスニングサーバーをインストールするTensorflowに指示することです。複数のジョブが同じノードにスケジュールされた場合、2番目のジョブは22222の応答に失敗します。

より良い解決策は、ジョブごとにslurm予約ポートを使用させることです。あなたはあなたのslurm管理者を連れて来て、slurmを設定するように頼んで、--resv-portsオプションでポートを尋ねる必要があります。

MpiParams=ports=15000-19999 

あなたのバグの前にあなたのSLURMの管理者が、で、例えば、オプションがすでに設定されているかどうか確認:

scontrol show config | grep MpiParams 
実際には、これは彼らのslurm.confに次のような行を追加することを求める必要が

サイトですでにOpenMPIの古いバージョンが使用されている場合は、このようなオプションが既に存在する可能性があります。その後

、次のようにコードの私の最初のスニペットを修正:

from hostlist import expand_hostlist 
task_index = int(os.environ['SLURM_PROCID']) 
n_tasks  = int(os.environ['SLURM_NPROCS']) 
port  = int(os.environ['SLURM_STEP_RESV_PORTS'].split('-')[0]) 
tf_hostlist = [ ("%s:%s" % (host,port)) for host in 
       expand_hostlist(os.environ['SLURM_NODELIST']) ] 

幸運を!

2

あなたは、単にリスト利用可能なパーティションがsinfoで行うことができます

sbatch --partition=part start.sh 
よう sbatchコマンドでSLURMにバッチスクリプトを渡すことができます。

start.sh(可能なコンフィギュレーション):run.pyあなたはSLURMすなわちあなたtensorflowコードを実行したいスクリプトが含まれているのに対し、

#!/bin/sh 
#SBATCH -N 1  # nodes requested 
#SBATCH -n 1  # tasks requested 
#SBATCH -c 10  # cores requested 
#SBATCH --mem=32000 # memory in Mb 
#SBATCH -o outfile # send stdout to outfile 
#SBATCH -e errfile # send stderr to errfile 
python run.py 

あなたはここで詳細を調べることができます。https://slurm.schedmd.com/sbatch.html

関連する問題