首頁 > 軟體

ATLAS + NumPy + SciPy + Theano 的Python科學計算環境搭建

2020-06-16 17:27:39

Theano是一個Python庫,提供了定義、優化以及評估數學表示式的庫,尤其適合處理高維陣列。使用Theano能獲得和C差不多的處理速度,並且當利用GPU進行計算時,效率要優於CPU上執行的C語言程式。利用Theano能快速驗證各種演算法模型。

但是在Linux上安裝theano是一件非常痛苦的事情,從theano的文件中看到,其依賴條件非常多:
(1) 64-bit Linux(最佳)
(2) python 2.4以上
(3) g++ 4.2以上
(4) NumPy 1.5.0以上
(5) SciPy 0.8以上
(6) BLAS支援Level-3
事實上,在安裝過程中發現,如果要安裝NumPy,還需要安裝ATLAS,而ATLAS則又依賴於lapack ……

這其中涉及到:
ATLAS是python下的一個線性代數庫,是基於另外兩個線性代數庫BLAS和lapack的;
NumPy提供了一個在python中做科學計算的基礎庫,它重在數值計算,甚至可以說是用於多維陣列處理的庫;
SciPy是基於numpy,提供了一個在python中做科學計算的工具集,也就是說它是更上一個層次的庫;
Theano則是基於NumPy以及SciPy的一個更高階的用於科學計算的庫。

這裡假設python和g++已經按要求裝好,並且符合版本要求,以下根據安裝的步驟來進行說明:

首先介紹下環境,多核伺服器,cpu時脈頻率2668MHz,Linux-64bit,非root許可權。所有原始碼放在/data4/open_src中

各開發包的版本為:

開發包    版本      檔名                  下載地址
-----------------------------------------------------------------------------------------------
BLAS                  blas.tgz                http://www.netlib.org/blas/
lapack    3.2.2      lapack.tgz              http://www.netlib.org/lapack/#_previous_release
ATLAS      3.8.4      atlas3.8.4.tar.bz2      http://sourceforge.net/projects/math-atlas/files/Stable/
NumPy      1.7.1      numpy-1.7.1.tar.gz      https://pypi.python.org/pypi/numpy
SciPy      0.12.0    scipy-0.12.0.tar.gz      https://pypi.python.org/pypi/scipy
Theano    0.6.0      Theano-0.6.0rc3.tar.gz  http://deeplearning.net/software/theano/#download

以下是安裝步驟:

step 1. 編譯BLAS

  (1) 解壓:tar -xvzf blas.tgz
  (2) cd BLAS
  (3) 修改 make.inc 中的編譯選項:
        PLAT = _LINUX
        FORTRAN  = gfortran
        OPTS    = -O2 -m64 -fPIC
        NOOPT    = -O0 -m64 -fPIC
        LOADER  = gfortran
  (4) 編譯BLAS:make
        編譯完成後,會生成blas_LINUX.a檔案

step 2. 設定ATLAS

在安裝ATLAS之前需要先編譯lapack,但是為了能使得編譯成功,需要保證lapack的編譯選項與ATLAS一致。因此首先設定ATLAS,然後將相關編譯設定拷貝到lapack中

  (1) 解壓:tar -xvjf atlas3.8.4.tar.bz2
  (2) cd ATLAS
  (3) 建立一個build目錄,用於存放ATLAS的編譯設定:mkdir atlas_build
  (4) cd atlas_build
  (5) 執行configure進行設定:../configure -b 64 -D c -DPentiumCPS=2668 -Fa alg -fPIC --with-netlib-lapack=/data4/open_src/lapack-3.2.2/lapack_LINUX.a --prefix=~/.local
      其中的引數說明如下:
      -b 指定編譯出庫的型別(32位元庫還是64位元庫)
      -D c -DPentiumCPS 是指定你的CPU的時脈頻率,可以通過 grep MHz /proc/cpuinfo 得到
      -Fa alg -fPIC 得到與位置無關的程式碼,生成動態的共用庫
      --prefix 為安裝路徑
      --with-netlib-lapack 則是制定lapack庫檔案(此時lapack庫檔案還沒有生成,先隨便指定一個)
  (6) 完成設定後,在Make.inc檔案中找到F77和F77FLAGS的引數設定,這兩個設定將會賦給lapack的FORTRAN和OPTS
 
  ps:對於ATLAS 3.10及以上版本,設定--with-netlib-lapack會出錯,需要直接指定lapack的壓縮包(--with-netlib-lapack-tarfile=),它在編譯過程中會自動解壓和編譯lapack,最終生成的so檔案也由之前的6個整合成兩個。ATLAS 3.10以上版本對後續安裝NumPy沒有影響,但是在使用的時候會造成有些庫檔案找不到的現象。因此這裡使用的是ATLAS 3.8.4版本。

step 3. 編譯lapack

  (1) 解壓:tar -xvzf lapack.tgz
  (2) cd lapack-3.2.2
  (3) 拷貝生成make.inc: cp make.inc.example make.inc
  (4) 修改make.inc:
      將其中FORTRAN和OPTS的值設定得跟 ATLAS/atlas_build/Make.inc 中的F77和F77FLAGS一致
      同時設定
      PLAT = _LINUX
      BLASLIB = /data4/open_src/BLAS/blas$(PLAT).a
  (5) 編譯:make build
  (6) 編譯成功後,會在根目錄生成兩個庫檔案:lapack_LINUX.a 和 tmglib_LINUX.a

step 4. 編譯並安裝ATLAS

  (1) cd ATLAS
  (2) 刪除原設定:rm -rf atlas_build
  (3) 重新設定ATLAS:參考 step 2,並設定 --with-netlib-lapack=/data4/open_src/lapack-3.2.2/lapack_LINUX.a
  (4) 在atlas_build中進行編譯:make build
      ps:這個過程相當漫長,耐心等待!!
  (5) check編譯結果:
      make check
      make ptcheck (對於多核伺服器)
      make time
      ps:如果check過程中沒有報錯,則可以放心進行以後的步驟;如果出現報錯,也可以嘗試進行後續步驟,是否成功就要靠人品了。
  (6) 編譯動態庫:
      cd lib
      make shared
      make ptshared (對於多核伺服器)
      cd ..
      如果在 lib 下面出現libatlas.so, libcblas.so, libf77blas.so, liblapack.so, libptcblas.so, libptf77blas.so 這6個動態庫檔案,則表示編譯成功
  (7) 安裝ATLAS:make install
      由於之前設定了--prefix=~/.local 因此ATLAS將被安裝到 ~/.local/lib 中
  (8) cp ./lib/*.so ~/.local/lib
  (9) 設定環境變數:在~/.bashrc中新增 export LD_LIBRARY_PATH=~/.local/lib:$LD_LIBRARY_PATH 並執行 source ~/.bashrc

step 5. 安裝NumPy

  (1) 解壓 tar -xvzf numpy-1.7.1.tar.gz
  (2) cd numpy-1.7.1
  (3) 拷貝生成sit.cfg: cp site.cfg.example site.cfg
  (4) 設定site.cfg:
      1> 開啟[DEFAULT],並設定 library_dirs 和 include_dirs ,使得在編譯的時候能夠找到atlas庫
          library_dirs = ~/.local/lib
          include_dirs = ~/.local/include
      2> 開啟[blas_opt],並設定 libraries
          libraries = ptf77blas, ptcblas, atlas
      3> 開啟[lapack_opt],並設定 libraries
          libraries = lapack, ptf77blas, ptcblas, atlas
      ps:如果在ATLAS安裝過程中,沒有生成libptf77blas和libptcblas,則需要設定兩個libraries為
          libraries = f77blas, cblas, atlas
          libraries = lapack, f77blas, cblas, atlas
  (5) 利用python構建NumPy:python setup.py build
  (6) 利用python安裝NumPy:python setup.py install --prefix=~/.local
  (7) 安裝完成後,NumPy被安裝在 ~/.local/lib/python2.7/site-packages/numpy
  (8) 設定環境變數:在~/.bashrc中新增 export PYTHONPATH=~/.local/lib/python2.7/site-packages:$PYTHONPATH 並執行 source ~/.bashrc

step 6. 安裝SicPy

  (1) 解壓: tar -xvzf scipy-0.12.0.tar.gz
  (2) cd scipy-0.12.0
  (3) 設定site.cfg: 可以直接將NumPy的site.cfg拷貝到當前目錄中
  (4) 利用python構建SciPy:python setup.py build
  (5) 利用python安裝SciPy:python setup.py install --prefix=~/.local
  (6) 安裝完成後,SciPy被安裝在 ~/.local/lib/python2.7/site-packages/scipy
 
step 7. 安裝Theano

  有了以上的準備後,安裝Theano就是一個非常簡單的過程了。直接利用python就可以完成安裝:
  (1) 解壓:tar -xvzf Theano-0.6.0rc3.tar.gz
  (2) cd Theano-0.6.0rc3
  (3) python setup.py install --prefiex=~/.local
  (4) 安裝完成後,SciPy被安裝在 ~/.local/lib/python2.7/site-packages/Theano-0.6.0rc3-py2.7.egg

至此,完成了ATLAS + NumPy + SciPy + Theano的python科學計算環境的搭建

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-11/137490.htm


IT145.com E-mail:sddin#qq.com