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
以上です.