Выполнить Python + Numpy код на кластере PBS - Ограничить использование процессора подпроцессом Numpy - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь адаптировать свой код для работы в кластере, управляемом с помощью планировщика заданий PBS.

Этот вопрос относится к этому , этому и этой теме .

В данный момент мой код выглядит примерно так:

from threadpoolctl import threadpool_limits
import numpy as np
from multiprocessing import Pool

def simple_numpy_job(n=5000):
    return n*2

def heavy_numpy_job(n=1000):
    # I use threadpool_limits to avoid sub-jobs to use more than one CPU
    with threadpool_limits(limits=1, user_api='blas'):
        a = np.random.randn(n, n)
        for i in range(20):
            b = a @ a
        return b

def multi_job(job, n):
    with Pool(n) as pool:
        res = pool.map(job, [1000]*8)
    return res

if __name__ ==  '__main__':

    # Initial part of the job. Can be done one one core as it's not computationally expensive
    simple_numpy_job
    # Part of the job I'd like to parallelize
    res = multi_job(heavy_numpy_job,6)

Я проверяю это на моей Windows машине, проверяя использование ЦП с помощью монитора ресурсов (я не могу проверить количество потоков напрямую как - я не знаю почему - Python spawn десятков потоков в любом случае. Так что это число не имеет смысла)

Как вы можете видеть на картинке ниже, даже если я настрою Pool на 6 рабочих, и каждое задание будет ограничено использованием только 1 ЦП, тем не менее все ЦП (12) активируются.

CPU Usage during the execution of the code above

Я также заметил, что код

def heavy_numpy_job(n=5000):
    with threadpool_limits(limits=1, user_api='blas'):
        a = np.random.randn(n, n)
        for i in range(20):
            b = a @ a
        return b

if __name__ ==  '__main__':

    heavy_numpy_job()

действительно ограничивает количество процессоров, Numpy используемых одним в то время, но для каждой итерации l oop выше используется другой . Я не знаю, может ли это вызвать проблемы на общем узле вычислительного кластера HP C.

Какой лучший способ сделать мой код "PBS" / "HP C" дружественным? Спасибо

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