2016-01-16 4 views
12

Я мог получить доступ к вычислительному кластеру, в частности, к одному узлу с двумя 12-ядерными процессорами, который работает с Slurm Workload Manager.Запуск TensorFlow на кластере Slurm?

Я хотел бы запустить TensorFlow в этой системе, но, к сожалению, я не смог найти никакой информации о том, как это сделать или если это возможно. Я новичок в этом, но, насколько я понимаю, мне пришлось бы запустить TensorFlow, создав работу Slurm и не сможет напрямую выполнить python/tensorflow через ssh.

У кого-нибудь есть идея, учебник или какой-либо источник на эту тему?

+1

информацию, выводимую на [месте непрерывной интеграции] (http://ci.tensorflow.org/) может помочь. Также см. [Readme] (https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/tools/ci_build/README.md) –

+0

Я выполнил запрос Google Slurm и Docker, и было несколько результатов. –

+1

Вы нашли конкретные источники? Если да, поделитесь ими, пожалуйста. Конечно, Google перечисляет некоторые страницы, но я не смог найти никаких советов, руководств или официальной информации о запуске TensorFlow с его Python-API через работу Slurm. – daniel451

ответ

19

Это относительно просто.

В упрощающих предположениях, что вы запрашиваете один процесс на хост, 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']) ] 

Обратите внимание, что Слерма дает вам список хостов в сжатом формате (например, «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): 
     ... 

Дефект с кодом сообщалось выше, что все ваши задания будут инструктировать Tensorflow установить серверы прослушивания при фиксированной 22222 портов. Если несколько таких заданий будут запланированы на один и тот же узел, второй не будет прослушивать 22222.

Лучшее решение - позволить портам резервирования slurm для каждого задания. Вам нужно привести администратора slurm на борт и попросить его настроить slurm, чтобы он мог запрашивать порты с опцией --resv-ports. На практике это требует просить их, чтобы добавить строку наподобие следующей в их slurm.conf:

MpiParams=ports=15000-19999 

Перед вами ошибка вашего Слерма администратора, проверьте, какие параметры уже настроены, например, с:

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

Удачи!

2

Вы можете просто передать командный сценарий для Слерма с помощью команды sbatch как такой

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 содержит скрипт, который вы хотите выполнить с Слерма т.е. код tensorflow.

Вы можете посмотреть подробности здесь: https://slurm.schedmd.com/sbatch.html

Смежные вопросы