Многопроцессорная обработка с python на одном узле с использованием slurm - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь запустить некоторый параллельный код в кластере. Кластер использует slurm, и мой код находится в python. Код использует несколько ядер, когда я запускаю его на своем компьютере. Тем не менее, когда я пытаюсь запустить код в кластере, он работает очень медленно и не использует несколько ядер.

Вот соответствующий код из python:

from multiprocessing import Pool

Nz_i=range(1,13)

p=Pool()
p.map(Err_Calc,Nz_i)
p.close()
p.join()

, функция Err_Calc определена ранее. Я не думаю, что его определение уместно.

SBATCH, который я использую для запуска кода в кластере, выглядит следующим образом:

#!/bin/bash
#SBATCH -N 1
#SBATCH -p RM-shared
#SBATCH --ntasks-per-node 13
#SBATCH -t 03:10:00

module load python/intel_2.7.14

python Err_vs_Nz_Cl.py 

Файл Err_vs_Nz_Cl.py содержит код, который я показал выше. Я ожидаю, что этот SBATCH предоставит мне 13 ядер, но код, похоже, использует только 1 ядро ​​или, возможно, работает медленно по какой-то другой причине. Кто-нибудь знает, что идет не так?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Это может быть неправильно (я новичок ie в этом), но что произойдет, если вы измените аргумент --ntasks-per-node 13 на --cpus-per-task 13? Я думаю, что в документах говорится, что вам нужно явно указать количество процессоров, иначе он будет работать только с одним процессором.

Источник: https://slurm.schedmd.com/sbatch.html

0 голосов
/ 04 марта 2020

Поскольку вы работаете без srun -n (что правильно для multiprocessing с его моделью потоков, основанной на процессах), вам нужен другой способ указать, сколько процессоров использовать. Это делается в вашем скрипте sbatch с --ntasks=1 и --cpus-per-task=13 (или любым количеством ядер, которые есть у вашего узла).

Будьте осторожны с multiprocessing. Если вы не работаете на целом узле или явно не указываете количество ядер, он попытается запустить все видимые ядра ЦП, независимо от того, были ли они выделены вам или нет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...