ATLAS + NumPy + SciPy + Theano 的Python科学计算环境搭建

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               
lapack    3.2.2      lapack.tgz              #_previous_release
ATLAS      3.8.4      atlas3.8.4.tar.bz2     
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  #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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14716.html