Как Python может увидеть 12 процессоров в кластере, где я получил 4 ядра по LSF? - PullRequest
1 голос
/ 17 сентября 2011

Я получаю доступ к кластеру Linux, где ресурсы распределяются с использованием LSF, который, как мне кажется, является распространенным инструментом Scala (http://www.scali.com/workload-management/high-performance-computing).). В интерактивной очереди я запросил и получил максимальное количество ядер: 4Но если я проверю, сколько процессоров видит многопроцессорный модуль Python, то число равно 12, числу физических ядер, на которые был выделен узел. Похоже, что у многопроцессорного модуля есть проблемы с соблюдением границ, которые должен / навязывает LSF.Это проблема в LSF или Python?

[lsandor@iliadaccess03 peers_prisons]$ bsub -Is -n 4 -q interact sh
Job <7408231> is submitted to queue <interact>.
<<Waiting for dispatch ...>>
<<Starting on heroint5>>
sh-3.2$ python3
Python 3.2 (r32:88445, Jun 13 2011, 09:20:03) 
[GCC 4.3.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import multiprocessing
>>> 
>>> multiprocessing.cpu_count()
12

Ответы [ 3 ]

1 голос
/ 09 июля 2015

Немного опоздал на вечеринку, но, расширив ответ @ Paddy3118, спецификация диапазона не нужна. Вместо этого переменная окружения LSB_DJOB_NUMPROC содержит количество выделенных ядер. По крайней мере, это связано с доступной мне версией LSF (9.1.2).

1 голос
/ 17 сентября 2011

Не проблема, хотя ваша программа должна учитывать количество ресурсов, выделенных ей системой очередей, которое может быть значительно меньше 100%, как вы поняли. Я не верю, что у LSF есть хуки уровня ОС для обеспечения соблюдения, и, вероятно, не должно.

В прошлом я видел, как это обрабатывается скриптом-оберткой. Тот, который устанавливает программу и задание одновременно с соответствующими настройками, а затем запускает его.

0 голосов
/ 04 августа 2012

Если вы отправляете в lsf, используя опцию -n, чтобы указать, сколько процессоров вы хотите, и затем используете запрос, чтобы четыре процессора были доступны на одном хосте, используя span, как в приведенной ниже команде:

bsub -n 4 -R "span[hosts=1]" my_job

Затем my_job запускается со следующими установленными переменными среды, которые могут быть запрошены вашим скриптом python, чтобы установить количество подпроцессов для запуска, равное числу, назначенному LSF:

LSB_HOSTS= "hostA hostA hostA hostA"
LSB_MCPU_HOSTS="hostA 4" 

(Или число подпроцессов должно быть числом процессов, выделенных LSF - 1 для учета скрипта python, запускающего подпроцессы: -)

...