2012年05月09日(水)

Install OpenBLAS + Matplotlib on Ubuntu 10.04 server amd64

コンピュータに関するりばにしの記事

新年度になって計算して結果を可視化する機会が増えそう(なんじゃそりゃ)だったので,Matplotlibをインストールしてみました.せっかくなので,OpenBLASも導入してみました.

導入方法に関しては,こちらのサイトを参考にしました.

Atsushi TATSUMA Web Page » OpenBLAS を使った Numpy/Scipy のビルド

これまで BLAS には、高速な GotoBLAS を使ってきましたが、
開発が終了していることから、移行先を検討していました。
GotoBLAS の後継であり、開発が続いていることから、OpenBLAS を使うことにしました。
研究室では Debian GNU/Linux を使用しており、作業当時のバージョンは squeeze です。

from www.kde.cs.tut.ac.jp at 2012年05月08日23時45分

当方は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

以上です.

2012年05月09日00時09分 | Permalink
Trackback URL
Comment Form

▶次の記事:宇治散策
◀前の記事: