루트(또는 sudo) 액세스 권한이 없는 원격(Debian squeeze) 시스템에 특정(비공개, 디지털) Python 모듈을 설치하고 싶습니다. python-dev 패키지가 설치되지 않았으므로 Python 2.7을 로컬로 컴파일하고 설치했습니다(./configure --prefix=$HOME/rt 사용). 또한 필수이므로 setup.py의 --user 옵션을 사용하여 numpy, scipy 및tinyarray를 설치했습니다. 나중에 아무 문제 없이 모듈을 설치했습니다. 그러나 Python으로 모듈을 가져온 후 다음 메시지가 나타납니다.
RuntimeWarning: SciPy 설치는 UMFPACK을 사용하지 않습니다. 대신 SciPy는 함께 제공되는 SuperLu 버전을 사용합니다. 이 경우 성능이 매우 저하될 수 있습니다.
사실 경기력은 별로였어요. 추가 조사를 통해 이 모듈이 umfpack 및 MUMPS 사용을 지원한다는 사실이 밝혀졌습니다. 둘 다 허용되지만 다른 시스템에서는 MUMPS가 약간 더 나은 성능을 발휘하는 것으로 나타났습니다. 내 설치도 성공하지 못했습니다. umfpack과 관련하여 더 이상 존재하지 않는 scipy의 scipack 외에 설치 방법에 대한 정보를 찾지 못했습니다.
그래서 MUMPS를 설치해 보았습니다.
모듈의 설치 파일에서:
빌드 구성
설치 스크립트는 LAPACK과 BLAS, 선택적으로 MUMPS를 연결하는 방법을 알아야 합니다. 기본적으로 LAPACK 및 BLAS는 일반적인 이름으로 찾을 수 있다고 가정합니다. 기본적으로 MUMPS는
libmumps-scotch-dev
패키지를 설치할 때 Debian 기반 시스템을 제외하고 연결되지 않습니다.
build.conf
이러한 모든 설정은 배포 루트 디렉터리에 파일을 생성/편집하여 구성할 수 있습니다. 구성 파일은 [종속성 이름] 헤더와 이름=값 항목으로 이어지는 각 종속성에 대해 하나씩 여러 섹션으로 구성됩니다. 가능한 이름은 키워드 인수입니다distutils.core.Extension
(this document <http://docs.python.org/distutils/apiref.html>
전체 목록은 위에서 세 번째 표 참조). 해당 값은 공백으로 구분된 문자열 목록입니다.현재 가능한 두 가지 섹션은 [lapack]과 [mumps]입니다. 전자는 LAPACK에 대한 링크를 구성합니다.그리고BLAS, 후자와 MUMPS(LAPACK 및 BLAS 제외).
build.conf
자체 컴파일된 MUMPS,SCOTCH <http://www.labri.fr/perso/pelegrin/scotch/>
_ 및METIS <http://glaros.dtc.umn.edu/gkhome/metis/metis/overview>
_:: 연결 예
[mumps]
libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq
gfortran
Intel MKL과의 연결 예
build.conf
::
[lapack]
libraries = mkl_intel_lp64 mkl_sequential mkl_core mkl_def
library_dirs = /opt/intel/mkl/lib/intel64
extra_link_args = -Wl,-rpath=/opt/intel/mkl/lib/intel64
자세한 구문은 _
build.conf
에 있습니다documentation of Python's configparser module <http://docs.python.org/3/library/configparser.html#supported-ini-file-structure>
.
다음 build.conf를 사용하여 MUMPS를 컴파일하고 모듈을 다시 빌드했습니다.
[mumps]
libraries = zmumps mumps_common pord
library_dirs = /*path_to_mumps_compilation*/lib /*path_to_mumps_compilation*/libseq
include_dirs = /*path_to_mumps_compilation*/include
extra_link_args = -Wl,-rpath=/*path_to_mumps_compilation*/lib
모듈을 다시 설치하고 Python으로 가져온 후 가져오기 오류가 발생합니다.
/*path_to*/_mumps.so: 정의되지 않은 기호: mumps_get_mapping
_mumps.so를 확인한 결과 해당 기호가 실제로 정의되지 않은 것 같습니다. 설치 중에 사용된 _mumps.so에 대한 링크 명령은 다음과 같습니다.
gcc -pthread -shared build/temp.linux-i686-2.7/kwant/linalg/_mumps.o -L/u/fphys/iw386/rt/lib -lmumps_common -lzmumps -lpord -lmetis -lesmumps -lscotch -lscotcherr -lmpiseq -llapack -lblas -o build/lib.linux-i686-2.7/kwant/linalg/_mumps.so -Wl,-rpath=/u/fphys/iw386/rt/lib
libmumps_common.a에서는 mumps_common이 로드되고 mumps_get_mapping은 정의되지 않습니다.
$ nm -g rt/lib/libmumps_common.a |grep mumps_get_mapping
00000000 T mumps_get_mapping
"임시 기호"가 무엇인지 잘 모르겠습니다. 이것도 정의되지 않음을 의미합니까?
그런 다음 소스에서 빌드하고(설치 파일의 예에서 제안한 대로) 다음 build.conf를 사용하여 scotch와 metis를 설치해 보았습니다.
[mumps]
libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq gfortran
library_dirs = /u/fphys/iw386/rt/lib
include_dirs = /u/fphys/iw386/rt/include
extra_link_args = -Wl,-rpath=/u/fphys/iw386/rt/lib
모든 라이브러리가 /u/fphys/iw386/rt/lib로 이동되었으며 모든 헤더 파일이 /u/fphys/iw386/rt/include로 이동되었습니다.
가져올 때 오류 메시지가 이제 다음으로 변경되었습니다.
_mumps.so: 정의되지 않은 기호: for_write_seq_lis
for_write_seq_lis는 포트란 관련 방법인 것 같습니다. 그런데 제가 사용한 gfortran 라이브러리 파일은 gfortran 패키지를 통해 시스템에서 제공하는 것입니다. 나는 소스에서 gfortran과 gcc 및 이들의 종속성을 빌드하는 것을 피하고 싶습니다.
어떤 도움이라도 대단히 감사하겠습니다.