Комментарии 14
Есть альтернативный способ добавить многопоточность к numpy: библиотека numexpr
0
Теоретически, можно, конечно, найти исходники библиотек, перекомпилировать их и пересобрать numpy. Я даже слышал, что кто-то писал, что он видел людей, которые говорили, что им это удалось… В общем, самый простой способ — это установить научный дистрибутив Python, например, Anaconda или Canopy.
Если не хочется ставить анаконду ради одной библиотеки, можно просто скачать Wheel-пакет для 32- или 64-битной версии Windows, собранный с MKL. Устанавливается одной командой. Например,
pip install numpy-1.10.2+mkl-cp35-none-win_amd64.whl
установит Numpy 1.10.2, собранный с MKL, для 64-битного python 3.5.
На сайте полно скомпилированных пакетов для научных вычислений, пожалуйста, не положите его ненароком. ;)
+2
Спасибо за отличное дополнение.
Раньше бесплатный MKL тоже был однопоточным. Но Intel в итоге сделала community лицензию для своих библиотек без ограничений по потокам — software.intel.com/sites/campaigns/nest
Раньше бесплатный MKL тоже был однопоточным. Но Intel в итоге сделала community лицензию для своих библиотек без ограничений по потокам — software.intel.com/sites/campaigns/nest
0
Забыл добавить. Посмотреть информацию о используемых библиотеках можно проще:
Если установить dev-пакеты для OpenBLAS, то numpy при сборке сам подхватит библиотеку. Например, в Ubuntu нужно установить libopenblas-dev и libopenblas-base. Если достаточно версии из репозитория, то ничего самому компилировать не нужно. Достаточно установить пакеты и переустановить numpy через pip.
Использовать pip с sudo тоже не стоит, по-моему. Лучше, когда есть только один общесистемный менеджер пакетов. Я свежие математические библиотеки устанавливаю в виртуальное окружение. Довольно удобно, легко обновлять и доустанавливать что-то, а главное — не нужны права root.
import numpy as np
np.show_config()
Если установить dev-пакеты для OpenBLAS, то numpy при сборке сам подхватит библиотеку. Например, в Ubuntu нужно установить libopenblas-dev и libopenblas-base. Если достаточно версии из репозитория, то ничего самому компилировать не нужно. Достаточно установить пакеты и переустановить numpy через pip.
Использовать pip с sudo тоже не стоит, по-моему. Лучше, когда есть только один общесистемный менеджер пакетов. Я свежие математические библиотеки устанавливаю в виртуальное окружение. Довольно удобно, легко обновлять и доустанавливать что-то, а главное — не нужны права root.
+2
А совет для тех, у кого не deb-based?
0
Если кратко, суть статьи — перекомпилировать Numpy. Это отлично делает pip, но надо в своём дистрибутиве сперва установить OpenBLAS или MKL.
0
Имею следующий выхлоп:
Что-то не могу разобраться в значениях top, на которое из двух смотреть?
$ dnf list installed | grep openblas
openblas.x86_64 0.2.15-2.fc23 @updates
openblas-devel.x86_64 0.2.15-2.fc23 @updates
openblas-openmp.x86_64 0.2.15-2.fc23 @updates
openblas-openmp64.x86_64 0.2.15-2.fc23 @updates
openblas-openmp64_.x86_64 0.2.15-2.fc23 @updates
openblas-serial64.x86_64 0.2.15-2.fc23 @updates
openblas-serial64_.x86_64 0.2.15-2.fc23 @updates
openblas-threads.x86_64 0.2.15-2.fc23 @updates
openblas-threads64.x86_64 0.2.15-2.fc23 @updates
openblas-threads64_.x86_64 0.2.15-2.fc23 @updates
$ ldd multiarray.so
linux-vdso.so.1 (0x00007ffc94ee8000)
libopenblas.so.0 => /lib64/libopenblas.so.0 (0x00007f9316707000)
libm.so.6 => /lib64/libm.so.6 (0x00007f9316405000)
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f931603b000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9315e1e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9315a5d000)
/lib64/ld-linux-x86-64.so.2 (0x0000555786b82000)
libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f9315730000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f931552c000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f9315329000)
libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007f93150e9000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9314ed2000)
Что-то не могу разобраться в значениях top, на которое из двух смотреть?
%Cpu(s): 79.1 us, 10.4 sy, 0.0 ni, 9.3 id, 1.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8010052 total, 141700 free, 4756624 used, 3111728 buff/cache
KiB Swap: 2095100 total, 2060716 free, 34384 used. 2810328 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10185 USER 20 0 2642864 2.276g 11056 R 100.0 29.8 3:54.40 python
Не пинайте сильно
я только начал разбираться в проге основательно
0
После запуска top нажмите «1», тогда вместо строки "%Cpu(s)" отобразятся данные отдельно по каждому процессору.
0
Ага, спасибо. Одно ядро загружено полностью, второе — процентов на 20. Так и должно быть?
0
Если вы запускаете пример из статьи, то он должен грузить на 100% все имеющиеся ядра, а у вас загружено только одно.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Numpy и многопроцессорность