Почему мультипроцессор использует только одно ядро ​​после импорта numpy?

Я не уверен, считается ли это больше проблемой ОС, но я подумал, что могу спросить здесь, если у кого-то есть понимание с конца Python.

Я пытался распараллелить перегруженный ЦП цикл for, используя joblib

113 голосов | спросил ali_m 26 MarpmTue, 26 Mar 2013 18:37:34 +04002013-03-26T18:37:34+04:0006 2013, 18:37:34

3 ответа


0

После еще одного поиска в Google я нашел ответ здесь .

Оказывается, что некоторые модули Python (numpy, scipy, tables, pandas, skimage ...) путаются со сродством ядра при импорте. Насколько я могу судить, эта проблема, по-видимому, вызвана тем, что они связаны с многопоточными библиотеками OpenBLAS.

Обходной путь - сбросить сходство задачи с помощью

os.system("taskset -p 0xff %d" % os.getpid())

С этой строкой, вставленной после импорта модуля, мой пример теперь работает на всех ядрах:

htop_workaround ​​

Мой опыт показывает, что это не оказывает какого-либо отрицательного влияния на производительность numpy, хотя это вероятно, зависит от машины и задачи.

Обновление:

Есть также два способа отключить поведение сброса соответствия процессоров самого OpenBLAS. Во время выполнения вы можете использовать переменную среды OPENBLAS_MAIN_FREE (или GOTOBLAS_MAIN_FREE), например

OPENBLAS_MAIN_FREE=1 python myscript.py

Или, в качестве альтернативы, если вы компилируете OpenBLAS из исходного кода, вы можете навсегда отключить его во время сборки, отредактировав Makefile.rule, чтобы он содержал линия

NO_AFFINITY=1
ответил ali_m 26 MarpmTue, 26 Mar 2013 19:36:46 +04002013-03-26T19:36:46+04:0007 2013, 19:36:46
0

Python 3 теперь предоставляет методы для прямой установки сходства

>>> import os
>>> os.sched_getaffinity(0)
{0, 1, 2, 3}
>>> os.sched_setaffinity(0, {1, 3})
>>> os.sched_getaffinity(0)
{1, 3}
>>> x = {i for i in range(10)}
>>> x
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> os.sched_setaffinity(0, x)
>>> os.sched_getaffinity(0)
{0, 1, 2, 3}
ответил WoJ 12 J000000Sunday15 2015, 20:56:27
0
ответил NPE 26 MarpmTue, 26 Mar 2013 18:47:54 +04002013-03-26T18:47:54+04:0006 2013, 18:47:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132