簡體   English   中英

在Slurm群集上運行TensorFlow?

[英]Running TensorFlow on a Slurm Cluster?

我可以訪問計算集群,特別是一個帶有兩個12核CPU的節點,它與Slurm Workload Manager一起運行。

我想在該系統上運行TensorFlow ,但遺憾的是我無法找到有關如何執行此操作的信息,或者甚至是否可能。 我是新手,但據我所知,我必須通過創建Slurm作業來運行TensorFlow,並且不能通過ssh直接執行python / tensorflow。

有沒有人有關於這個主題的想法,教程或任何類型的來源?

它相對簡單。

在每個主機請求一個進程的簡化假設下,slurm將為您提供環境變量中所需的所有信息,特別是SLURM_PROCID,SLURM_NPROCS和SLURM_NODELIST。

例如,您可以按如下方式初始化任務索引,任務數和節點列表:

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']) ]  

請注意,slurm為您提供了壓縮格式的主機列表(例如,“myhost [11-99]”),您需要進行擴展。 我使用KentEngströ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 ):
       ...

上面報告的代碼存在的缺陷是,您的所有作業都將指示Tensorflow安裝在固定端口22222上偵聽的服務器。如果多個此類作業恰好安排到同一節點,則第二個將無法偵聽22222。

更好的解決方案是讓slurm為每個工作預留端口。 您需要將您的slurm管理員帶到船上並要求他配置slurm,以便它允許您使用--resv-ports選項請求端口。 在實踐中,這需要他們在slurm.conf中添加如下所示的行:

MpiParams=ports=15000-19999

在您的slurm管理員出錯之前,請檢查已配置的選項,例如:

scontrol show config | grep MpiParams

如果您的網站已經使用舊版本的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']) ]  

祝好運!

您可以使用sbatch命令將批處理腳本簡單地傳遞給slurm

sbatch --partition=part start.sh

列出可用分區可以使用sinfo

start.sh (可能的配置)

#!/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

而run.py包含你想用slurm執行的腳本,即你的tensorflow代碼。

您可以在此處查看詳細信息: https//slurm.schedmd.com/sbatch.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM