Запуск параллельных python программ на HPC - PullRequest
0 голосов
/ 08 мая 2020

Раньше я выполнял некоторые параллелизуемые вычисления, используя python на сервере, теперь я хочу перейти на HP C, работающий над SLURM, но я считаю, что у меня есть некоторые концептуальные проблемы.

Для моих вычислений требуются матрицы и параметры (в виде словаря), одинаковые для всех прогонов, и некоторые входные параметры, которые отличаются. В основном это выглядит так:

def evaluate(inp, matrices, params):
    .....
    return output

load matrices, create params dict...
inputs = [(k, matrices, params) for k in input_parameters]
with multiprocessing.Pool(processes=n) as pool:
    results =pool.starmap(evaluate,inputs)
save_results(results)

и bash скрипт:

#!/bin/bash
#SBATCH -J ****     
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=40
#SBATCH --mem=500M              
#SBATCH --time=1:00:00 
#SBATCH --partition=standard
module load python
source $HOME/env/bin/activate
python3 main.py

Итак, моя проблема здесь в том, что на одном узле, даже если процессы активны, они получают % 0 CPU и ожидает, пока SLURM не завершит задание из-за превышения времени, и когда я попытался использовать multiprocessing.get_context.Pool вместо multiprocessing.Pool, код выполняется и никогда не завершается. Я не совсем понимаю, в чем может быть проблема?

Также, если я хочу выполнить эту программу на нескольких узлах, я понимаю, что мне нужно привязать MPI, и для этой цели можно использовать mpi4py или ray. Это также относится к работе с одним узлом?

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