Numpy + OpenBLAS + Python3

들어가며

최근 신경컴퓨터를 수강하면서 뉴럴 네트워크를 짜고 있다. 첫 어싸인은 매트랩으로 짰는데, 그래프 출력 기능은 좋지만 문법도 익숙하지 않고 구조화가 어려워서 다음 어싸인은 Numpy로 짜려고 마음먹었다. 사실 마음을 먹었다기보다는 영업을 당했다.

학과 서버 Python2에는 Numpy가 설치되어 있었지만, Python3에는 설치되어 있지 않아서 설치하는 김에 Numpy의 기본 라이브러리보다 성능이 좋다고 알려진 OpenBLAS와 링크해 설치하기로 했다. 설치하는 과정은 여기를 참고했다.

OpenBLAS 빌드

$ git clone https://github.com/xianyi/OpenBLAS.git
$ cd OpenBLAS
$ make NO_AFFINITY=1 FC=gfortran
$ mkdir -p ~/lib/openblas
$ make PREFIX=/home/qwaz/lib/openblas install

make에 여러 옵션이 있는데 USE_THREAD=1 같은 중요한 설정은 기본값으로 되어 있기 때문에 make를 바로 해도 큰 문제는 생기지 않는다. NO_AFFINITY=1 설정을 해 주면 여러 명이 사용하는 서버에서 돌릴 때 성능 향상을 기대할 수 있고, FC는 포트란 컴파일러를 명시적으로 설정해 주는 부분인데 아래에서 동일한 컴파일러를 설정해 주어야 하기 때문에 이 두 개의 옵션을 넣어 컴파일했다. numpy의 경우는 상관 없지만, OpenMP를 사용하는 프로그램과 OpenBLAS를 같이 사용할 예정이라면 USE_OPENMP=1 옵션도 주어야 한다. 내가 돌릴 서버는 Xeon 6개가 달려 있고 하이퍼쓰레딩으로 코어가 12개인 것처럼 인식되는데, 자동으로 최대 쓰레드 수치를 12로 잡은 것을 확인할 수 있었다.

VirtualEnv 설정

$ cd ~
$ virtualenv --python=python3.4 venv
$ source venv/bin/activate
$ mkdir venv/download
$ pip install -d venv/download numpy
$ mkdir venv/build
$ cd venv/build
$ tar xzf ../download/numpy-1.11.0.tar.gz
$ cd numpy-1.11.0
$ cp site.cfg.example site.cfg

이제 site.cfg를 수정하자. openblas로 시작하는 다음 부분의 주석 처리를 해제하고 경로를 수정한다.

[openblas]
libraries = openblas
library_dirs = /home/qwaz/lib/openblas/lib
include_dirs = /home/qwaz/lib/openblas/include
runtime_library_dirs = /home/qwaz/lib/openblas/lib

Numpy 설치하기

$ unset CPPFLAGS
$ unset LDFLAGS
$ python setup.py build --fcompiler=gfortran
$ python setup.py install

make에서 사용된 포트란 컴파일러와 동일한 컴파일러를 명시해 주어야 하는데, 서버에는 g77은 없고 gfortran만 설치되어 있어서 이거려니 섶어서 gfortran으로 설정했다. unset은 명시하지 않은 다른 설정이 끼어드는 것을 막기 위함이라고 한다.

확인

댓글 남기기