2012年05月09日(水)
Install OpenBLAS + Matplotlib on Ubuntu 10.04 server amd64
新年度になって計算して結果を可視化する機会が増えそう(なんじゃそりゃ)だったので,Matplotlibをインストールしてみました.せっかくなので,OpenBLASも導入してみました.
導入方法に関しては,こちらのサイトを参考にしました.
これまで BLAS には、高速な GotoBLAS を使ってきましたが、
開発が終了していることから、移行先を検討していました。
GotoBLAS の後継であり、開発が続いていることから、OpenBLAS を使うことにしました。
研究室では Debian GNU/Linux を使用しており、作業当時のバージョンは squeeze です。
当方はUbuntu 10.04 Server amd64への導入だったので,上記のサイトと多少違うところがあったので,上記サイトと重複する部分が多いですが,備忘録を兼ねてメモしておきます.
まず,必要なパッケージのインストール.この作業以前に入っていたパッケージも多数あるので,ここに書いてあるだけでは足りないかもしれないので,注意.
$ sudo aptitude install build-essential libreadline6-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev $ sudo aptitude install gfortran git-core swig $ sudo aptitude install libsuitesparse-dev libatlas-base-dev $ sudo aptitude install libfreetype6-dev libpng12-dev
次いで,作業用ディレクトリを定義して,作成.
$ export TMP_DIR=~/tmp
$ mkdir -p ${TMP_DIR}
まず,Python 2.7.3をインストール.今回インストールするものを固めたかったので,/opt/python/2.7.3にインストールしてます.
$ cd ${TMP_DIR}
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar zvxf Python-2.7.3.tgz
$ cd Python-2.7.3
$ sudo mkdir -p /opt/python/2.7.3
$ ./configure --prefix=/opt/python/2.7.3 --with-threads --enable-shared
$ sudo make install
$ sudo vi /etc/ld.so.conf.d/python-2.7.3.conf
/opt/python/2.7.3/lib
$ sudo /sbin/ldconfig
続いてOpenBLASをインストール.同じく/opt/OpenBLASにインストールしてます.
$ cd ${TMP_DIR}
$ git clone git://github.com/xianyi/OpenBLAS
$ cd OpenBLAS
$ vi Makefile.rule
...
NO_CBLAS = 1
NO_LAPACK = 1
...
$ sudo mkdir -p /opt/OpenBLAS
$ sudo make install PREFIX=/opt/OpenBLAS install
$ sudo vi /etc/ld.so.conf.d/OpenBLAS.conf
/opt/OpenBLAS/lib
$ sudo /sbin/ldconfig
続いてCBLASのインストール.Makefile.inの編集は前述のサイトの通り.一方,上記のOpenBLASインストール後,ldconfigを実行しているのに,/usr/bin/ld: cannot findなエラーが出たので,OpenBLASのlibディレクトリをgfortranを実行する際に-Lで検索対象に追加してます.
$ cd ${TMP_DIR}
$ wget http://www.netlib.org/blas/blast-forum/cblas.tgz
$ tar zvxf cblas.tgz
$ cd CBLAS
$ vi Makefile.in
...
BLLIB = /opt/OpenBLAS/lib/libopenblas.a
CBLIB = ../lib/libcblas.a
...
LOADER = $(FC) -lpthread
...
CFLAGS = -O2 -march=native -m64 -fomit-frame-pointer -fPIC -DADD_
FFLAGS = -O2 -march=native -m64 -fomit-frame-pointer -fPIC
...
$ make
$ cd lib
$ ar -x libcblas.a
$ gfortran -lopenblas -L/opt/OpenBLAS/lib -shared -o libcblas.so *.o
$ sudo cp libcblas.* /opt/OpenBLAS/lib/
/opt/OpenBLAS/lib
$ sudo /sbin/ldconfig
続いてLAPACKのインストール.やはりldがご立腹だったので,make.inc内とgfortran実行時に-Lで指定.
$ cd ${TMP_DIR}
$ wget http://www.netlib.org/lapack/lapack-3.4.0.tgz
$ tar zvxf lapack-3.4.0.tgz
$ cd lapack-3.4.0
$ cp make.inc.example make.inc
$ vi make.inc
...
OPTS = -O2 -march=native -m64 -fomit-frame-pointer -fPIC
...
NOOPT = -O0 -fPIC
...
LOADOPTS = -lopenblas -lcblas -L/opt/OpenBLAS/lib
...
LAPACKLIB = liblapack.3.4.0.a
...
$ make lapacklib
$ mkdir tmp
$ cd tmp
$ cp ../liblapack.3.4.0.a ./
$ ar -x liblapack.3.4.0.a
$ gfortran -lopenblas -lcblas -L/opt/OpenBLAS/lib -shared -o liblapack.3.4.0.so *.o
$ sudo cp liblapack.3.4.0.* /opt/OpenBLAS/lib/
$ sudo ln -sn /opt/OpenBLAS/lib/liblapack.3.4.0.a /opt/OpenBLAS/lib/liblapack.a
$ sudo ln -sn /opt/OpenBLAS/lib/liblapack.3.4.0.so /opt/OpenBLAS/lib/liblapack.so
$ sudo ln -sn /usr/lib64/liblapack_atlas.a /opt/OpenBLAS/lib/liblapack_atlas.a
$ sudo ln -sn /usr/lib64/liblapack_atlas.so /opt/OpenBLAS/lib/liblapack_atlas.so
$ sudo /sbin/ldconfig
続いて,NumPyのインストール.
$ cd ${TMP_DIR}
$ wget -O numpy-1.6.1.tar.gz http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/numpy-1.6.1.tar.gz/download
$ tar xzf numpy-1.6.1.tar.gz
$ cd numpy-1.6.1/
$ vim site.cfg
[DEFAULT]
library_dirs = /opt/OpenBLAS/lib:/opt/python/2.7.3/lib:/usr/local/lib:/usr/lib
include_dirs = /opt/python/2.7.3/include:/usr/local/include:/usr/include
[atlas]
libraries = lapack_atlas,openblas,cblas
$ /opt/python/2.7.3/bin/python setup.py config
$ /opt/python/2.7.3/bin/python setup.py build
$ sudo /opt/python/2.7.3/bin/python setup.py install
そして,SciPyのインストール.umfpackのところを書いておいた.
$ cd ${TMP_DIR}
$ wget -O scipy-0.10.1.tar.gz http://sourceforge.net/projects/scipy/files/scipy/0.10.1/scipy-0.10.1.tar.gz/download
$ tar xzf scipy-0.10.1.tar.gz
$ cd scipy-0.10.1
$ vi site.cfg
[umfpack]
library_dirs = /usr/lib
include_dirs = /usr/include/suitesparse:/usr/include
umfpack_libs = umfpack
$ /opt/python/2.7.3/bin/python setup.py config
$ /opt/python/2.7.3/bin/python setup.py build
$ sudo /opt/python/2.7.3/bin/python setup.py install
最後に行く前に,noseのインストール.
$ cd ${TMP_DIR}
$ wget http://pypi.python.org/packages/source/n/nose/nose-1.1.2.tar.gz
$ tar zvxf nose-1.1.2.tar.gz
$ cd nose-1.1.2
$ /opt/python/2.7.3/bin/python setup.py build
$ sudo /opt/python/2.7.3/bin/python setup.py install
で,NumPyとSciPyのテスト.
$ /opt/python/2.7.3/bin/python -c "import numpy; numpy.test(verbose=2)" ... OK (KNOWNFAIL=3, SKIP=4) $ /opt/python/2.7.3/bin/python -c "import scipy; scipy.test(verbose=2)" ... OK (KNOWNFAIL=13, SKIP=30)
そして,いよいよ最後,Matplotlibのインストールです.
$ cd ${TMP_DIR}
$ wget -O matplotlib-1.1.0.tar.gz http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.0/matplotlib-1.1.0.tar.gz/download
$ tar zvxf matplotlib-1.1.0.tar.gz
$ cd matplotlib-1.1.0
$ /opt/python/2.7.3/bin/python setup.py build
$ sudo /opt/python/2.7.3/bin/python setup.py install
以上です.

