Как запустить MPI Python Script на нескольких узлах в кластере Slurm?Ошибка: Предупреждение: невозможно запустить 1 процесс на 2 узлах, установив nnodes в 1 - PullRequest
3 голосов
/ 20 июня 2019

Я запускаю скрипт на кластере Slurm, который может выиграть от параллельной обработки, поэтому я пытаюсь реализовать MPI.Тем не менее, это не позволяет мне запускать процессы на нескольких узлах.Я не знаю, обычно ли это делается автоматически, но всякий раз, когда я устанавливаю --nodes = 2 в пакетном файле для отправки, я получаю сообщение об ошибке: «Предупреждение: невозможно запустить 1 процесс на 2 узлах, задав nnodes значение1. "

Я пытался заставить его работать с простым сценарием Hello World, но все еще сталкивался с вышеуказанной ошибкой.Я добавил --oversubscribe для параметров, когда я запускаю скрипт MPI, но все равно получаю эту ошибку.

    #SBATCH --job-name=a_test
    #SBATCH --mail-type=ALL
    #SBATCH --ntasks=1
    #SBATCH --cpu-freq=high
    #SBATCH --nodes=2
    #SBATCH --cpus-per-task=2
    #SBATCH --mem-per-cpu=1gb
    #SBATCH --mem-bind=verbose,local
    #SBATCH --time=01:00:00
    #SBATCH --output=out_%x.log

    module load python/3.6.2
    mpirun -np 4 --oversubscribe python par_PyScript2.py
```bash

I still get the expected output, but only after the error message "Warning: can't run 1 processes on 2 nodes, setting nnodes to 1." I'm worried that without being able to run on multiple nodes, my actual script will be a lot slower.

1 Ответ

3 голосов
/ 20 июня 2019

Причина предупреждения заключается в следующей строке:

#SBATCH --ntasks=1

, где вы указываете, что собираетесь запускать только 1 процесс MPI, непосредственно перед тем, как запрашивать 2 узла.

--ntasks устанавливает количество процессов, которые нужно запустить / ранжировать для использования в вашем случае.Затем вы перезаписываете его эквивалентным -n, поэтому вы видите результат.

Для справки: это скрипт, который я запускаю в своей системе,

#!/bin/bash

#SBATCH -C knl 
#SBATCH -q regular
#SBATCH -t 00:10:00

#SBATCH --nodes=2

module load python3

START_TIME=$SECONDS

srun -n 4 python mpi_py.py >& py_${SLURM_JOB_ID}.log

ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo $ELAPSED_TIME

Замечания по производительности:

  • Ваш код выполняется быстрееузел, если это возможно.Связь между узлами медленнее, чем внутри узла, она может быть немного медленнее, но также может быть намного медленнее, что зависит от таких вещей, как кластерная архитектура.
  • Обратитесь к рекомендациям по настройке кластера.Например, на моем, я должен добавить некоторые параметры slurm к этому сценарию, в частности -c и cpu_bind= (больше здесь ).
...