NumPy 및 SciPy에서 BLAS / LAPACK 연결을 확인하는 방법은 무엇입니까?


126

Blas를 기반으로 한 numpy / scipy 환경을 구축 하고이 산책을 기반으로 다소의 포장 을합니다.

완료되면 numpy / scipy 함수가 이전에 빌드 된 blas / lapack 기능을 실제로 사용하는지 어떻게 확인할 수 있습니까?

답변:


293

메소드 numpy.show_config()(또는 numpy.__config__.show())는 빌드시 수집 된 연결에 대한 정보를 출력합니다. 내 출력은 다음과 같습니다. Mac OS와 함께 제공되는 BLAS / LAPACK을 사용한다는 의미입니다.

>>> import numpy as np
>>> np.show_config()

lapack_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3']
    define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
    define_macros = [('NO_ATLAS_INFO', 3)]

4
광범위한 유용성을 감안할 때 numpy.__config__실제로 공개 API 여야합니다. 그럼에도 불구하고, 당신은이 라운드를 승리 davost을 .
Cecil Curry

2
그래서, 단지 lapack_opt_info보여지는 사실 은 numpy가 lapack과 연결되어 있다는 것을 의미합니까?
DanHickstein

42
출력을 어떻게 해석합니까?
Edward Newell

18
@CecilCurry numpy.show_config()시작 밑줄이 없기 때문에 공개 API 함수 인을 사용할 수 있습니다 . 그러나 온라인으로 문서화되어 있지 않고 문서 문자열이 없으므로 찾기가 너무 어렵다는 것은 놀라운 일이 아닙니다. 잘만되면 그들은 그것을 고칠 것이다.
Praveen

8
여러 패키지가 표시 될 때 실제로 어떤 패키지가 사용되는지 어떻게 알 수 있습니까?
Jonasson

28

당신이 찾고있는 것은 이것입니다 : 시스템 정보

아틀라스로 numpy / scipy를 컴파일했으며이를 확인할 수 있습니다.

import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')

자세한 명령은 설명서를 확인하십시오.


35
이것은 numpy가 현재 ATLAS를 사용하는지 여부를 나타내지 않고 다음 numpy 컴파일 중에 ATLAS가 링크되는지 여부를 보여줍니다. ATLAS 전에 numpy를 컴파일했습니다. numpy (확실히)를 다시 컴파일 할 때까지 매우 느리게 작동했지만 numpy 다시 컴파일 전후에 sysinfo.get_info ( 'atlas')는 동일한 출력을 표시했습니다. 현재 상황을 확인하는 방법?
dmytro

4
출력을 해석하는 방법?
Eric O Lebigot

2
'atlas'대신 'blas'가 설치되어있을 수 있습니다 (debian 기반 배포판에 openblas를 설치 한 경우 발생).
Malcolm

4
davost 의 답변은 아마도이 답변 대신에 받아 들여졌어야 했는데,이 질문에 대한 답을 얻지 못했습니다 . 이 답변은 다른 관련 질문 을 해결하는 데 유용한 흥미로운 기계를 발견하기 때문에 진심으로 감사드립니다!
Cecil Curry

2
@rabra sysinfo.get_info('atlas')는 나를 위해 아무것도 반환하지 않고 sysinfo.get_info('blas')반환 {'include_dirs': ['/usr/local/include', '/usr/include', '/opt/local/include', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include'], 'libraries': ['blas', 'blas'], 'library_dirs': ['/usr/lib']} 하고 sysinfo.get_info('lapack')반환 {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']} 했습니다. 무슨 뜻입니까?
SebMa

11

동적으로로드 된 버전을 사용하므로 다음과 같이하면됩니다.

$ ldd anyoftheCmodules.so

어디 anyoftheCmodules.so수, 예를 들어, numpy/core/_dotblas.so에, 어떤 링크 libblas.so.


1
파일이 없으면 numpy/core/_dotblas.so어떻게합니까? (talonmies 응답 아래 설명을 참조)
Woltan

1
거기에는 많은 .so파일 이 있어야합니다 . NumPy 디렉토리 내부를 검색하십시오 (예 : 사용 find /path/to/numpy -name "*.so"). (그 중 몇 가지 _dotblas.so, lapack_lite.so예를 들어 우분투 미리 컴파일 한 아래) BLAS / LAPACK의 메이크업 사용
리카르도 Cárdenes

6
_dotblas.so더 이상 numpy v1.10 이상에 존재하지 않지만multiarray.so 대신 링크를 확인할 수 있습니다.
ali_m

이 솔루션은 Linux 전용 이며 취약합니다. 실제로 numpy.__config__런타임에 정식 객체에 액세스하려고합니다 . ( davost 의 훌륭한 답변을 참조하십시오 .)
Cecil Curry

실제로 Linux마다 다르며 @davost 방법이 더 낫다는 데 동의합니다. 왜 대답이 계속 올라가는 지 모르겠습니다.
Ricardo Cárdenes

8

링크 로더 종속성 도구를 사용하여 빌드의 C 레벨 후크 구성 요소를보고 구성 요소가 선택한 Blas 및 Lapack에 대한 외부 종속성이 있는지 확인할 수 있습니다. 나는 지금 리눅스 박스 근처에 있지 않지만 OS X 머신에서는 설치를 보유한 site-packages 디렉토리 에서이 작업을 수행 할 수 있습니다.

$ otool -L numpy/core/_dotblas.so 
numpy/core/_dotblas.so:
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1)

$ otool -L scipy/linalg/flapack.so 
scipy/linalg/flapack.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/flapack.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

$ otool -L scipy/linalg/fblas.so 
scipy/linalg/fblas.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/fblas.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

대체 ldd대신에 otoolGNU / 리눅스 시스템에 당신은 당신이 필요로하는 답을 얻어야한다.


1
파일이 없으면 numpy/core/_dotblas.so어떻게합니까? (Ricardos 답변 아래 주석 참조)
Woltan

@Woltan : 심각한 문제가 발생했거나 잘못된 장소를 찾고 있습니다. 내가 본 모든 Linux 및 OS X numpy 설치 _dotblas.so에는 배포를 빌드하는 데 사용 된 모든 blas에 대한 인터페이스 래퍼가 있습니다. Windows에서는이라고 _dotblas.pyd하지만 함수는 동일합니다.
talonmies 2012 년

3
섹션 (및 CBLAS 가능 BLAS 라이브러리)을 _dotblas.so사용하는 경우에만 빌드 된 것처럼 보입니다 . 따라서 ATLAS를 사용하지 않더라도 Intel MKL을 사용하는 경우를 제외하고는 전용 섹션이 있습니다. [atlas]site.cfg
Kenneth Hoste

실제로 NumPy를 빌드 할 때 사용할 수있는 BLAS가 없으면 자체 도트 제품 루틴을 빌드합니다. ATLAS보다 2 배 느릴 수 있습니다.
Fred Foo

5
_dotblas.so더 이상 numpy v1.10 이상에 존재하지 않지만multiarray.so 대신 링크를 확인할 수 있습니다.
ali_m

6

다음을 사용하여 BLAS, LAPACK, MKL 링키지를 표시 할 수 있습니다 show_config().

import numpy as np
np.show_config()

나에게 출력을 제공합니다.

mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
blas_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
blas_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
lapack_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']
lapack_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/my/environment/path/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/my/environment/path/include']

1
어떻게 해석 ('HAVE_CBLAS', None)]합니까?
seralouk

@serafeim 링크를 참조 하십시오 . 그것은 본질적으로 그것이 HAVE_CBLAS정의되고 있지만 가치가 없다는 것을 의미합니다 (C : 생각 #define HAVE_CBLAS). 플래그로만 사용되므로 값이 필요하지 않습니다. 로 해석합니다 HAVE_CBLAS=True. CBLAS가 없다면 튜플이 전혀 없을 것입니다.
MT

선형 대수 계산이 충분히 빠르도록 numpy가 blas에 연결되어 있는지 알고 싶습니다. 나는 이것을 얻는다 : imgur.com/a/SsrDqg5 . 이것을 어떻게 해석합니까?
seralouk

@makis numpy는 openblas와 연결되어 있습니다
MT

0

anaconda-navigator를 설치 한 경우 (리눅스, Windows 또는 macOS의 경우 www.anaconda.com/anaconda/install/)-blas, scipy 및 numpy가 모두 설치되며 네비게이터 홈 왼쪽의 환경 탭을 클릭하여 볼 수 있습니다. 페이지 (알파 순으로 각 디렉토리를 찾습니다). 전체 아나콘다 (miniconda 또는 개별 패키지와 달리)를 설치하면 데이터 과학에 필요한 많은 필수 패키지를 설치하게됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.