Работа Python в кластере slurm, узлы против ядер

Aug 29 2020

У меня очень простой вопрос, на который мне почему-то так и не удалось найти ответа. Предположим, что у меня есть доступ к кластеру, в котором запущен slurm, и что мне нужно запустить задание Python в кластере. Предположим, что мой код не был написан для поддержки многопроцессорности. Есть ли у меня причина требовать несколько ядер? Или я должен придерживаться 1 узла и 1 ядра?

И наоборот, если бы я хотел запустить 5 раз один и тот же сценарий (например, с разными входными переменными), есть ли разница между требованием 1 узла и назначением 1 ядра для каждого задания или требованием 5 узлов с 1 ядром в каждом?

Ответы

MarcusBoden Sep 01 2020 at 12:54

Если ваш скрипт python не использует несколько потоков, то да, вам следует придерживаться одной задачи ( -n1) с одним процессором ( -c1) на одном узле ( -N1). Вам не нужно указывать это, так как в любом случае это значение по умолчанию. Если вы запросите больше ресурсов, они будут потрачены впустую, поскольку вы их не используете.

Однако: некоторые библиотеки Python для многопоточных вычислений без необходимости указывать их явно, поэтому, если вы выполните несколько вычислений, вы можете извлечь выгоду из нескольких ядер .

И наоборот, если бы я хотел запустить 5 раз один и тот же сценарий (например, с разными входными переменными), есть ли разница между требованием 1 узла и назначением 1 ядра для каждого задания или требованием 5 узлов с 1 ядром в каждом?

Да, есть: если вы спросите Slurm о 5 узлах с 1 задачей на узел, то ему придется подождать, пока 5 узлов не освободят место для задачи. Даже если, например, узел с 20 процессорами полностью пуст, ваше задание не будет выполняться, поскольку вы явно запросили 5 узлов. Так что я бы посоветовал начать 5 заданий с -n1.