пул многопроцессорных Python в кластере - PullRequest
0 голосов
/ 21 января 2019

Я использую следующий код (пример) для параллельной обработки в кластере. Он отлично работает в кластере, используя все доступные ядра в узле, просто набрав: python test.py

    from multiprocessing import Pool
    import glob
    from astropy.io import fits

    def read(files):
        data=fits.open(files)

    if __name__ == '__main__':
        files= glob.glob("*.fits*")
        nfiles = len(files)
        pool = Pool()                       
        pool.map(read, files)

Однако, когда я отправляю пакетное задание, используя srun -N 1 python test.py Кажется, используется только 1 ядро, а не все доступные ядра в этом узле. Что я должен изменить, чтобы распределить nfiles в узле по всем ядрам, чтобы каждое ядро ​​получало nfiles / ncores.

1 Ответ

0 голосов
/ 21 января 2019

Это потому, что вы указываете -N 1, что означает, что 1 узел назначен вызову python test.py. Кроме того, значение по умолчанию для другого флага -n равно 1. Измените его на -N nnodes, где nnodes равно числу узлов, на которых вы собираетесь запустить скрипт, и укажите -n ncores, где ncores равно количество ядер на каждом узле. Если ваши узлы неоднородны, то вы можете рискнуть настроить больше задач, чем ядер на каждом узле или незанятых ядер на узлах.

Для получения дополнительной документации по указанным выше флагам см. здесь .

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