1. 程式人生 > >Ubuntu-安裝-theano+caffe-超詳細教程

Ubuntu-安裝-theano+caffe-超詳細教程

長期招聘計算機視覺/深度學習等方向的工程師或實習生。感興趣的話,請傳送郵件,可以內推

一、說明

  • 本文是繼《Ubuntu-安裝-cuda7.0-單顯示卡-超詳細教程》 之後的續篇。theano和caffe是深度學習庫,對運算能力需求很大,最好使用cuda進行加速。所以,請先閱讀《Ubuntu-安裝-cuda7.0-單顯示卡-超詳細教程》,成功安裝cuda之後,再來安裝theano和caffe。

二、安裝Theano

1. 安裝各種包

  • 安裝gfortran, numpy, scipy, sklearn, blas, atlas等包

    
    # 安裝gfortran,後面編譯過程中會用到
    sudo apt-get install gfortran # 安裝blas,Ubuntu下對應的是libopenblas,其它作業系統可能需要安裝其它版本的blas——這是個OS相關的。 sudo apt-get install libopenblas-dev # 安裝lapack,Ubuntu下對應的是liblapack-dev,和OS相關。 sudo apt-get install liblapack-dev # 安裝atlas,Ubuntu下對應的是libatlas-base-dev,和OS相關。 sudo apt-get install libatlas-base-dev # 安裝pip
    sudo apt-get install python-pip sudo apt-get install python-dev sudo apt-get install python-nose sudo apt-get install g++ sudo apt-get install git

2. 安裝numpy和scipy

  • 安裝這兩個python庫有點問題,如果使用apt-get安裝,後面的test不能通過。如果使用pip安裝,有得考慮各種依賴關係。

  • 所以,先使用apt-get安裝,然後再解除安裝,最後再使用pip安裝。這樣,既能不考慮依賴關係,又能通過後面的test()測試。

    
    #安裝numpy和scipy
    
    sudo apt-get install python-numpy
    sudo apt-get install python-scipy
    sudo apt-get install python-sklearn
    
    #解除安裝numpy和scipy
    
    sudo apt-get remove python-numpy
    sudo apt-get remove python-scipy
    
    # 安裝numpy
    
    sudo pip install numpy
    
    # 測試numpy
    
    
    # 如果沒有安裝python-nose,測試會出錯!
    
    python -c "import numpy;numpy.test()"
    
    # 安裝scipy
    
    sudo pip install scipy
    
    # 測試scipy
    
    python -c "import scipy;scipy.test()"

3. 安裝Theano

  • 前面的操作如果沒有出現錯誤,就可以開始安裝Theano了。命令如下所示。

    
    # 安裝Theano
    
    sudo pip install Theano
    
    # 測試Theano
    
    python -c "import theano;theano.test()"

4. 安裝pyCUDA

  • 測試Theano時,提示PyCUDA import錯誤,因此需要安裝pyCUDA。而PyCUDA需要以Boost為基礎,所以應該先安裝Boost。
  • 使用pip安裝pyCUDA。

    
    #安裝boost
    
    sudo apt-get install libboost-all-dev
  • git clone --recursive http://git.tiker.net/trees/pycuda.git
    cd pycuda
    sudo ./configure.py --cuda-root=/usr/local/cuda --cudadrv-lib-dir=/usr/lib/x86_64-linux-gnu --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python --boost-thread-libname=boost_thread --no-use-shipped-boost
    make -j 4 #電腦核數
    sudo python setup.py install

5. 解決cuda_ndarray.cu錯誤

  • 如果出現錯誤:ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.6.5 cannot open shared object file: No such file or directory,需要執行以下命令:

    sudo ldconfig /usr/local/cuda-7.0/lib64

6. 配置Theano

  • 在主目錄下新建.theanorc檔案

    cd ~
    vi .theanorc
  • 在.theanorc中輸入下面的內容

    [cuda]
    root=/usr/local/cuda/bin/
    [global]
    floatX = float32
    device = gpu0
    [nvcc]
    fastmath = True

7. 測試Theano是否在使用GPU

  • 將下列python程式碼複製到useGPU.py,並執行。

    from theano import function, config, shared, sandbox
    import theano.tensor as T
    import numpy
    import time
    
    vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
    iters = 1000
    
    rng = numpy.random.RandomState(22)
    x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
    f = function([], T.exp(x))
    print f.maker.fgraph.toposort()
    t0 = time.time()
    for i in xrange(iters):
        r = f()
    t1 = time.time()
    print 'Looping %d times took' % iters, t1 - t0, 'seconds'
    print 'Result is', r
    if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
        print 'Used the cpu'
    else:
        print 'Used the gpu'
  • 假定上面已經設定檔案.theanorc,執行命令如下所示:

    python useGPU.py
  • 如果出現下面的錯誤資訊,請執行命令sudo ldconfig /usr/local/cuda-7.0/lib64參考

    
    #錯誤資訊
    
    ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.7.0: cannot open shared object file: No such file or directory

Theano相關資料

  • CUDA Toolkit預設安裝在/usr/local/cuda/,含有bin, lib, include等子資料夾。/usr/local/cuda/bin/資料夾稱為cuda root資料夾。
  • 使用Theano時,必須告訴它CUDA root資料夾,有3種方法:

    • 定義$CUDA_ROOT環境變數。例如, CUDA_ROOT=/usr/local/cuda/bin/
    • 在THEANO_FLAGS中新增cuda.root標識。例如,THEANO_FLAGS='cuda.root=/usr/local/cuda/bin/'
    • 在.theanorc資料夾中新增[cuda]

      [cuda]
      root=/usr/local/cuda/bin/
      
  • 還需要更改裝置選項(gpu or gpu0 or gpu1),設定預設的浮點計算型別(float32)

    • 方法一:THEANO_FLAGS=’cuda.root=/usr/local/cuda/bin/,device=gpu,floatX=float32’
    • 方法二:設定.theanorc檔案的[global]選項:

      [cuda]
      root=/usr/local/cuda/bin/
      [global]
      device = gpu
      floatX = float32
      
  • 注意:
    • 如果電腦有多個GPU,而配置是‘device=gpu’,驅動會選擇其中一個使用(一般是 gpu0)。可以使用 nvida-smi 改變這一規則。
    • 可以通過指定 ‘device=gpuX’來選擇一個特定的GPU。
    • 預設使用GPU計算。如果GPU有問題,Theano會退回使用CPU。可以通過設定標識‘force_device=True’,當GPU不能使用時,彈出錯誤資訊。

安裝OpenCV

下載OpenCV

#切換路徑
cd ~/Downloads/Install-OpenCV-master/Ubuntu
#安裝OpenCV的依賴項
sudo ./dependencies.sh
  • 修改opencv2_4_9.sh
  • 如果不新增CUDA_GENERATION,編譯過程會失敗 參考文章
#切換路徑
cd 2.4
#修改opencv2_4_9.sh, 新增CUDA_GENERATION
#根據顯示卡支援Fermi或Kepler做相應的修改。此處以Fermi為例。
sudo gedit opencv2_4_9.sh

將以下內容

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ..

修改為:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CUDA_GENERATION=Fermi ..

即在最後的..前面新增CUDA_GENERATION=Fermi

  • 安裝最新版opencv2_4_9
#新增執行許可權
sudo chmod +x opencv2_4_9.sh
#安裝OpenCV
sudo ./opencv2_4_9.sh

等待…..,直到安裝完成。如下圖所示。
這裡寫圖片描述

安裝其它依賴項

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler protobuf-c-compiler python-pandas

安裝glog

  1. Google Logging Library(glog),下載地址:https://code.google.com/p/google-glog/,然後解壓安裝:
    tarzxvfglog0.3.3.tar.gz ./ configure
    make sudo make install

安裝caffe

下載caffe

編輯Makefile.config

unzip caffe-master.zip #本地解壓caffe-master
cd /caffe-master #切換路徑
vi Makefile.config #編輯Makefile.config
  • 開始編輯Makefile.config
    • 取消第5行的註釋,即將 #USE_CUDNN=1 改為 USE_CUDNN=1
    • BLAS=atlas 改為 BLAS=open

執行以下命令,

配置Python相關選項

  • 安裝python依賴庫
cd python #切換到./caffe-master/python/路徑下
for req in $(cat requirements.txt); do sudo pip install $req; done
  • 設定Python環境變數
sudo vi /etc/profile # 編輯profile檔案
#在最後面新增以下語句,注意將path換成你的系統下的路徑
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

安裝Matlab

選擇Mathworks.Matlab.R2014a.Unix.iso - 右鍵 - 使用磁碟映像掛載器開啟”
進入裝載的虛擬光碟,拷貝全部檔案至home/Matlab 資料夾
3. 授權安裝資料夾
$ chmod a+x Matlab -R
4. 安裝
$ sudo ./install
拷貝 libmwservices.so 至 /usr/local/MATLAB/R2014a/bin/glnxa64
sudocplibmwservices.so/usr/local/MATLAB/R2014a/bin/glnxa64/ sh /usr/local/MATLAB/R2014a/bin/matlab

參考文章