Как определить, какой узел выполняет код при его выполнении в Slurm? - PullRequest
1 голос
/ 21 июня 2019

Я очень новичок в Slurm и в распределенных / параллельных вычислениях, поэтому надеюсь, что кто-то сможет пролить свет на мою проблему, но, учитывая, что это может быть просто тупой проблемой, которую нужно решить.

Я настроил кластер, используя 6 подчиненных Pi3 (и 1 мастер), и установил диспетчер рабочей нагрузки Slurm, чтобы помочь с распределением ресурсов и т. Д.

Прежде чем перейти к более сложному коду, я пытаюсь протестировать что-то очень простое. Я посылаю одну и ту же команду всем своим узлам и печатаю имя узла узла.

Мой текущий код (который работает):

srun --nodes=6 hostname

и возвращает:

node01
node05
node04
node02
node06
node03

Теперь я пытаюсь запустить команду того же типа, используя sbatch, со следующим скриптом:

 #!/bin/bash
 #SBATCH --nodes=6
 #SBATCH --partition=partition
 #SBATCH --ntasks-per-node=1

 cd $SLURM_SUBMIT_DIR
 srun printf ‘Hello from: %s\n’ $(hostname) >> out.txt

ожидаю того же результата, что и выше, но вместо этого я получаю:

Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01

Я пытался поиграться с переменными env SLURM_NODEID и SLURMD_NODENAME, но все еще не мог заставить его делать то, что я хотел.

Я просто хочу знать, на каком узле выполняется код. Цель состоит в том, чтобы в дальнейшем я мог отслеживать, какие операции и какие узлы выполняются для более сложных сценариев. Может быть, сравнить производительность между узлами, которые, как ожидается, будут "идентичными" Возможно, даже отследить, какие узлы выполняют какую часть параллельного случая?

Большое спасибо !!!!

1 Ответ

0 голосов
/ 24 июня 2019

Часть printf ‘Hello from: %s\n’ $(hostname) >> out.txt оценивается Bash, прежде чем она будет предложена srun.Таким образом, в основном ваш сценарий эквивалентен

HOST=$(hostname)
srun printf ‘Hello from: %s\n’ $HOST >> out.txt

. Он запускает ту же команду printf с той же самой расширенной переменной.Если вы просто запустите

srun hostname

в своем скрипте отправки, вы увидите результат, идентичный результату, который вы получаете при запуске srun напрямую (вне сценария отправки)

Если вы хотитедля запуска printf вы должны сделать что-то вроде этого:

srun bash -c "printf 'Hello from: %s\n' \$(hostname)" >> out.txt
...