{"id":4514,"date":"2012-05-09T00:09:20","date_gmt":"2012-05-08T15:09:20","guid":{"rendered":"http:\/\/nao.river24.net\/blog\/?p=4514"},"modified":"2012-07-19T11:29:44","modified_gmt":"2012-07-19T02:29:44","slug":"20120509000920","status":"publish","type":"post","link":"https:\/\/nao.river24.net\/blog\/entry\/20120509000920\/","title":{"rendered":"Install OpenBLAS + Matplotlib on Ubuntu 10.04 server amd64"},"content":{"rendered":"<p>\u65b0\u5e74\u5ea6\u306b\u306a\u3063\u3066\u8a08\u7b97\u3057\u3066\u7d50\u679c\u3092\u53ef\u8996\u5316\u3059\u308b\u6a5f\u4f1a\u304c\u5897\u3048\u305d\u3046\uff08\u306a\u3093\u3058\u3083\u305d\u308a\u3083\uff09\u3060\u3063\u305f\u306e\u3067\uff0cMatplotlib\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u305b\u3063\u304b\u304f\u306a\u306e\u3067\uff0cOpenBLAS\u3082\u5c0e\u5165\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<p><!--more--><\/p>\n<p>\u5c0e\u5165\u65b9\u6cd5\u306b\u95a2\u3057\u3066\u306f\uff0c\u3053\u3061\u3089\u306e\u30b5\u30a4\u30c8\u3092\u53c2\u8003\u306b\u3057\u307e\u3057\u305f\uff0e<\/p>\n<div class=\"quote\">\n<div class=\"quotetitle\">Atsushi TATSUMA Web Page \u00bb OpenBLAS \u3092\u4f7f\u3063\u305f Numpy\/Scipy \u306e\u30d3\u30eb\u30c9<\/div>\n<blockquote cite=\"http:\/\/www.kde.cs.tut.ac.jp\/~atsushi\/?p=493\" title=\"Atsushi TATSUMA Web Page \u00bb OpenBLAS \u3092\u4f7f\u3063\u305f Numpy\/Scipy \u306e\u30d3\u30eb\u30c9\"><p>\u3053\u308c\u307e\u3067 BLAS \u306b\u306f\u3001\u9ad8\u901f\u306a GotoBLAS \u3092\u4f7f\u3063\u3066\u304d\u307e\u3057\u305f\u304c\u3001<br \/>\u958b\u767a\u304c\u7d42\u4e86\u3057\u3066\u3044\u308b\u3053\u3068\u304b\u3089\u3001\u79fb\u884c\u5148\u3092\u691c\u8a0e\u3057\u3066\u3044\u307e\u3057\u305f\u3002<br \/>GotoBLAS \u306e\u5f8c\u7d99\u3067\u3042\u308a\u3001\u958b\u767a\u304c\u7d9a\u3044\u3066\u3044\u308b\u3053\u3068\u304b\u3089\u3001OpenBLAS \u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<br \/>\u7814\u7a76\u5ba4\u3067\u306f Debian GNU\/Linux \u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001\u4f5c\u696d\u5f53\u6642\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f squeeze \u3067\u3059\u3002<\/p><\/blockquote>\n<div class=\"cite\"><cite>from <a href=\"http:\/\/www.kde.cs.tut.ac.jp\/~atsushi\/?p=493\" target=\"_blank\">www.kde.cs.tut.ac.jp<\/a> at 2012\u5e7405\u670808\u65e523\u664245\u5206<\/cite><\/div>\n<\/div>\n<p>\u5f53\u65b9\u306fUbuntu 10.04 Server amd64\u3078\u306e\u5c0e\u5165\u3060\u3063\u305f\u306e\u3067\uff0c\u4e0a\u8a18\u306e\u30b5\u30a4\u30c8\u3068\u591a\u5c11\u9055\u3046\u3068\u3053\u308d\u304c\u3042\u3063\u305f\u306e\u3067\uff0c\u4e0a\u8a18\u30b5\u30a4\u30c8\u3068\u91cd\u8907\u3059\u308b\u90e8\u5206\u304c\u591a\u3044\u3067\u3059\u304c\uff0c\u5099\u5fd8\u9332\u3092\u517c\u306d\u3066\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\uff0e<\/p>\n<p>\u307e\u305a\uff0c\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e\u3053\u306e\u4f5c\u696d\u4ee5\u524d\u306b\u5165\u3063\u3066\u3044\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u591a\u6570\u3042\u308b\u306e\u3067\uff0c\u3053\u3053\u306b\u66f8\u3044\u3066\u3042\u308b\u3060\u3051\u3067\u306f\u8db3\u308a\u306a\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u306e\u3067\uff0c\u6ce8\u610f\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ sudo aptitude install build-essential libreadline6-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev\r\n$ sudo aptitude install gfortran git-core swig\r\n$ sudo aptitude install libsuitesparse-dev libatlas-base-dev\r\n$ sudo aptitude install libfreetype6-dev libpng12-dev<\/pre>\n<p>\u6b21\u3044\u3067\uff0c\u4f5c\u696d\u7528\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5b9a\u7fa9\u3057\u3066\uff0c\u4f5c\u6210\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ export TMP_DIR=~\/tmp\r\n$ mkdir -p ${TMP_DIR}<\/pre>\n<p>\u307e\u305a\uff0cPython 2.7.3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e\u4eca\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3082\u306e\u3092\u56fa\u3081\u305f\u304b\u3063\u305f\u306e\u3067\uff0c\/opt\/python\/2.7.3\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307e\u3059\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ wget http:\/\/www.python.org\/ftp\/python\/2.7.3\/Python-2.7.3.tgz\r\n$ tar zvxf Python-2.7.3.tgz\r\n$ cd Python-2.7.3\r\n$ sudo mkdir -p \/opt\/python\/2.7.3\r\n$ .\/configure --prefix=\/opt\/python\/2.7.3 --with-threads --enable-shared\r\n$ sudo make install\r\n$ sudo vi \/etc\/ld.so.conf.d\/python-2.7.3.conf\r\n\/opt\/python\/2.7.3\/lib\r\n$ sudo \/sbin\/ldconfig<\/pre>\n<p>\u7d9a\u3044\u3066OpenBLAS\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e\u540c\u3058\u304f\/opt\/OpenBLAS\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307e\u3059\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ git clone git:\/\/github.com\/xianyi\/OpenBLAS\r\n$ cd OpenBLAS\r\n$ vi Makefile.rule\r\n...\r\nNO_CBLAS = 1\r\nNO_LAPACK = 1\r\n...\r\n$ sudo mkdir -p \/opt\/OpenBLAS\r\n$ sudo make install PREFIX=\/opt\/OpenBLAS install\r\n$ sudo vi \/etc\/ld.so.conf.d\/OpenBLAS.conf\r\n\/opt\/OpenBLAS\/lib\r\n$ sudo \/sbin\/ldconfig<\/pre>\n<p>\u7d9a\u3044\u3066CBLAS\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0eMakefile.in\u306e\u7de8\u96c6\u306f\u524d\u8ff0\u306e\u30b5\u30a4\u30c8\u306e\u901a\u308a\uff0e\u4e00\u65b9\uff0c\u4e0a\u8a18\u306eOpenBLAS\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5f8c\uff0cldconfig\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u306e\u306b\uff0c\/usr\/bin\/ld: cannot find\u306a\u30a8\u30e9\u30fc\u304c\u51fa\u305f\u306e\u3067\uff0cOpenBLAS\u306elib\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092gfortran\u3092\u5b9f\u884c\u3059\u308b\u969b\u306b-L\u3067\u691c\u7d22\u5bfe\u8c61\u306b\u8ffd\u52a0\u3057\u3066\u307e\u3059\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ wget http:\/\/www.netlib.org\/blas\/blast-forum\/cblas.tgz\r\n$ tar zvxf cblas.tgz\r\n$ cd CBLAS\r\n$ vi Makefile.in\r\n...\r\nBLLIB = \/opt\/OpenBLAS\/lib\/libopenblas.a\r\nCBLIB = ..\/lib\/libcblas.a\r\n...\r\nLOADER = $(FC) -lpthread\r\n...\r\nCFLAGS = -O2 -march=native -m64 -fomit-frame-pointer -fPIC -DADD_\r\nFFLAGS = -O2 -march=native -m64 -fomit-frame-pointer -fPIC\r\n...\r\n$ make\r\n$ cd lib\r\n$ ar -x libcblas.a\r\n$ gfortran -lopenblas -L\/opt\/OpenBLAS\/lib -shared -o libcblas.so *.o\r\n$ sudo cp libcblas.* \/opt\/OpenBLAS\/lib\/\r\n\/opt\/OpenBLAS\/lib\r\n$ sudo \/sbin\/ldconfig<\/pre>\n<p>\u7d9a\u3044\u3066LAPACK\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e\u3084\u306f\u308ald\u304c\u3054\u7acb\u8179\u3060\u3063\u305f\u306e\u3067\uff0cmake.inc\u5185\u3068gfortran\u5b9f\u884c\u6642\u306b-L\u3067\u6307\u5b9a\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ wget http:\/\/www.netlib.org\/lapack\/lapack-3.4.0.tgz\r\n$ tar zvxf lapack-3.4.0.tgz\r\n$ cd lapack-3.4.0\r\n$ cp make.inc.example make.inc\r\n$ vi make.inc\r\n...\r\nOPTS     = -O2 -march=native -m64 -fomit-frame-pointer -fPIC\r\n...\r\nNOOPT    = -O0 -fPIC\r\n...\r\nLOADOPTS = -lopenblas -lcblas -L\/opt\/OpenBLAS\/lib\r\n...\r\nLAPACKLIB    = liblapack.3.4.0.a\r\n...\r\n$ make lapacklib\r\n$ mkdir tmp\r\n$ cd tmp\r\n$ cp ..\/liblapack.3.4.0.a .\/\r\n$ ar -x liblapack.3.4.0.a\r\n$ gfortran -lopenblas -lcblas -L\/opt\/OpenBLAS\/lib -shared -o liblapack.3.4.0.so *.o\r\n$ sudo cp liblapack.3.4.0.* \/opt\/OpenBLAS\/lib\/\r\n$ sudo ln -sn \/opt\/OpenBLAS\/lib\/liblapack.3.4.0.a \/opt\/OpenBLAS\/lib\/liblapack.a\r\n$ sudo ln -sn \/opt\/OpenBLAS\/lib\/liblapack.3.4.0.so \/opt\/OpenBLAS\/lib\/liblapack.so\r\n$ sudo ln -sn \/usr\/lib64\/liblapack_atlas.a \/opt\/OpenBLAS\/lib\/liblapack_atlas.a\r\n$ sudo ln -sn \/usr\/lib64\/liblapack_atlas.so \/opt\/OpenBLAS\/lib\/liblapack_atlas.so\r\n$ sudo \/sbin\/ldconfig<\/pre>\n<p>\u7d9a\u3044\u3066\uff0cNumPy\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ 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\r\n$ tar xzf numpy-1.6.1.tar.gz\r\n$ cd numpy-1.6.1\/\r\n$ vim site.cfg\r\n[DEFAULT]\r\nlibrary_dirs = \/opt\/OpenBLAS\/lib:\/opt\/python\/2.7.3\/lib:\/usr\/local\/lib:\/usr\/lib\r\ninclude_dirs = \/opt\/python\/2.7.3\/include:\/usr\/local\/include:\/usr\/include\r\n[atlas]\r\nlibraries = lapack_atlas,openblas,cblas\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py config\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py build\r\n$ sudo \/opt\/python\/2.7.3\/bin\/python setup.py install<\/pre>\n<p>\u305d\u3057\u3066\uff0cSciPy\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0eumfpack\u306e\u3068\u3053\u308d\u3092\u66f8\u3044\u3066\u304a\u3044\u305f\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ 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\r\n$ tar xzf scipy-0.10.1.tar.gz\r\n$ cd scipy-0.10.1\r\n$ vi site.cfg\r\n[umfpack]\r\nlibrary_dirs = \/usr\/lib\r\ninclude_dirs = \/usr\/include\/suitesparse:\/usr\/include\r\numfpack_libs = umfpack\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py config\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py build\r\n$ sudo \/opt\/python\/2.7.3\/bin\/python setup.py install<\/pre>\n<p>\u6700\u5f8c\u306b\u884c\u304f\u524d\u306b\uff0cnose\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ wget http:\/\/pypi.python.org\/packages\/source\/n\/nose\/nose-1.1.2.tar.gz\r\n$ tar zvxf nose-1.1.2.tar.gz\r\n$ cd nose-1.1.2\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py build\r\n$ sudo \/opt\/python\/2.7.3\/bin\/python setup.py install<\/pre>\n<p>\u3067\uff0cNumPy\u3068SciPy\u306e\u30c6\u30b9\u30c8\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ \/opt\/python\/2.7.3\/bin\/python -c &quot;import numpy; numpy.test(verbose=2)&quot;\r\n...\r\nOK (KNOWNFAIL=3, SKIP=4)\r\n$ \/opt\/python\/2.7.3\/bin\/python -c &quot;import scipy; scipy.test(verbose=2)&quot;\r\n...\r\nOK (KNOWNFAIL=13, SKIP=30)<\/pre>\n<p>\u305d\u3057\u3066\uff0c\u3044\u3088\u3044\u3088\u6700\u5f8c\uff0cMatplotlib\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u3059\uff0e<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false\">$ cd ${TMP_DIR}\r\n$ 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\r\n$ tar zvxf matplotlib-1.1.0.tar.gz\r\n$ cd matplotlib-1.1.0\r\n$ \/opt\/python\/2.7.3\/bin\/python setup.py build\r\n$ sudo \/opt\/python\/2.7.3\/bin\/python setup.py install<\/pre>\n<p>\u4ee5\u4e0a\u3067\u3059\uff0e<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u65b0\u5e74\u5ea6\u306b\u306a\u3063\u3066\u8a08\u7b97\u3057\u3066\u7d50\u679c\u3092\u53ef\u8996\u5316\u3059\u308b\u6a5f\u4f1a\u304c\u5897\u3048\u305d\u3046\uff08\u306a\u3093\u3058\u3083\u305d\u308a\u3083\uff09\u3060\u3063\u305f\u306e\u3067\uff0cMatplotlib\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u305b\u3063\u304b\u304f\u306a\u306e\u3067\uff0cOpenBLAS\u3082\u5c0e\u5165\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[37],"tags":[],"_links":{"self":[{"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/posts\/4514"}],"collection":[{"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/comments?post=4514"}],"version-history":[{"count":19,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/posts\/4514\/revisions"}],"predecessor-version":[{"id":4809,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/posts\/4514\/revisions\/4809"}],"wp:attachment":[{"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/media?parent=4514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/categories?post=4514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nao.river24.net\/blog\/wp-json\/wp\/v2\/tags?post=4514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}