Постановка проблемы: мы хотели бы включить numpy с многопоточным процессом с openBlas в версии RHEL 7.4 и Anacoda Python 3.6.5 (/ opt / anaconda3), но не смогли этого достичь. Не могли бы вы помочь нам с точным местоположением для размещения файла site.cfg, а также поможет нам в обеспечении / тестировании шагов для многопоточности с использованием numpy
Выполнены следующие шаги
1) После установки OpenBLAS в каталог по умолчанию / opt мы удалили существующий numpy с помощью pip (pip uninstall numpy)
2) Затем создайте файл .numpy-site.cfg в корневом домашнем каталоге со следующим содержимым:
[default]
include_dirs = /opt/OpenBLAS/include
library_dirs = /opt/OpenBLAS/lib
[openblas]
openblas_libs = openblas
include_dirs = /opt/OpenBLAS/include
library_dirs = /opt/OpenBLAS/lib
[lapack]
lapack_libs = openblas
[atlas]
atlas_libs = openblas
libraries = openblas
3) Затем снова установите numpy (pip install numpy)
4) подробности конфигурации, как показано ниже. Где library_dirs вместо этого указывает на '/ usr / local / lib' / opt / OpenBLAS / lib '
command tested :python -c "import numpy; print(numpy.config.show())"
o/p:
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
None
Затем мы протестировали одиночный и многопоточный сценарий, используя следующий
5.1) одиночная нить
OMP_NUM_THREADS=1 python testmultithread.py
version: 1.16.3
maxint: 9223372036854775807
BLAS info:
* libraries ['mkl_rt', 'pthread']
* library_dirs ['/opt/anaconda3/lib']
* define_macros [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
* include_dirs ['/usr/local/include', '/usr/include', '/opt/anaconda3/include']
dot: 7.072579 sec
command tested for single tread: ps -To pid,tid,tgid,tty,time,comm -p 12011
PID TID TGID TT TIME COMMAND
12011 12011 12011 pts/0 00:00:09 python
5.2) Многопоточность
OMP_NUM_THREADS=2 python testmultithread.py
version: 1.16.3
maxint: 9223372036854775807
BLAS info:
* libraries ['mkl_rt', 'pthread']
* library_dirs ['/opt/anaconda3/lib']
* define_macros [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
* include_dirs ['/usr/local/include', '/usr/include', '/opt/anaconda3/include']
dot: 2.924053 sec
command tested for mulithread: ps -To pid,tid,tgid,tty,time,comm -p 13160
PID TID TGID TT TIME COMMAND
13160 13160 13160 pts/0 00:00:13 python
13160 13166 13160 pts/0 00:00:10 python
фрагмент кода testmultithread.py
#!/usr/bin/env python
import numpy
from numpy.distutils.system_info import get_info
import sys
import timeit
print("version: %s" % numpy.__version__)
print("maxint: %i\n" % sys.maxsize)
info = get_info('blas_opt')
print('BLAS info:')
for kk, vv in info.items():
print(' * ' + kk + ' ' + str(vv))
setup = "import numpy; x = numpy.random.random((5000, 5000))"
count = 10
t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
print("\ndot: %f sec" % (t.timeit(count) / count))
Вопросы
1) Где мы должны разместить numpy-site.cfg во время установки pip numpy . так как в корневой директории pip установка конфигураций не учитывается ..
2) когда мы делаем numpy config show ... library_dirs вместо этого указывает на «/ usr / local / lib» /opt/OpenBLAS/lib'.
Не могли бы вы помочь нам указать на правильный openblas?
3) когда мы запускаем многопоточный тестовый запрос в o / p, мы можем видеть детали из numpy.distutils.system_info import get_info показывает библиотеки ['mkl_rt', 'pthread'], но python -c "import numpy; print (numpy.config. show ()) "показывает openblas как упомянуто в разделе по умолчанию.
Используется ли openblas или mkl_rt?
4) Как указано в разделе Multithread 5.2: мы могли видеть, что два потока работают?
подтверждает ли это, что numpy работает на Multithread с использованием openbals?
Заранее спасибо