ubuntu16.04下安裝配置深度學習環境(Ubuntu 16.04/16.10+ cuda7.5/8+cudnn4/5+caffe)


主要參照以下兩篇博文:http://blog.csdn.net/g0m3e/article/details/51420565   http://blog.csdn.net/xuzhongxiong/article/details/52717285

我先做個說明,我曾經在兩種環境下搭建過,下面說一下軟硬件配置。

1)y480筆記本,GPU為GT650,軟件環境為ubuntu16.04+cuda7.5+cudnn v4,后來因為編譯caffe的時候報了一個包含“computer_64”的錯,就把cuda換成8了,以(1)的配置安裝為例

2)thinkstation p510+gtx1080,因為Ubuntu16.04裝帶有1080顯卡的時候一點擊安裝就黑屏提示信號超出范圍,所以選擇了16.10,這個裝的時候會鼠標失靈,用鍵盤裝完,裝上1080驅動就好了,另外要說明的是Ubuntu16.10的gcc版本太高為6,要為他降級為5,然后安裝過程和在16.04下一樣,另一個特別重要的是1080的GPU用cudnn一定要用v5的,否則runtest的時候會報錯。

1.下載所需要的軟件

      cuda7.5下載(8自己去百度搜或者官網下載),cudnn4.0下載(切記1080顯卡用v5版本)

2.安裝NVIDIA驅動。

   一般有兩種方法:1)一種方法是利用“軟件和更新”來安裝,依次選擇 系統設置->軟件和更新->附加驅動->選擇最新的驅動->應用更改

   安裝時可能遇到的問題:點擊完應用更改一段時間后並沒有成功安裝,再次點擊卻出現閃退的現象,這個問題困擾了我一晚上,最后發現是因為依賴的問題,通過在終端輸入以下命令:sudo apt-get install -f  sudo apt-get update后 再次安裝問題就解決了

  2)方法二就是下載安裝包后通過命令行安裝,因為這個比較麻煩,我沒有嘗試,看網上其他教程說需要關了xwindows安裝才行。

3.安裝cuda和cudnn

  (1)在終端cd到所下載的安裝包所在的目錄,輸入sh cuda_7.5.18_linux.run  --override

     跑起來后一路空格完那些協議,然后輸入accept,除了有一個是讓安裝驅動的選擇N外,其他的一路Y下去

  (2)安裝cudnn(這個是GPU加速用的)

     解壓下載好的安裝包,在終端輸入以下命令:

  sudo cp cudnn.h /usr/local/cuda/include/
cd ~/cuda/lib64
sudo cp lib* /usr/local/cuda/lib64/

cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.4
sudo ln -s libcudnn.so.4.0.7 libcudnn.so.4
sudo ln -s libcudnn.so.4 libcudnn.so

然后設置環境變量

sudo gedit /etc/profile
在末尾加入
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

保存之后創建鏈接文件
sudo vim /etc/ld.so.conf.d/cuda.conf
鍵盤按i進入編輯狀態,添加文字
/usr/local/cuda/lib64
然后按esc,輸入:wq保存退出。
終端下接着輸入
sudo ldconfig 使鏈接生效

(注意:如果安裝的cuda8,要把以上路徑中的cuda變成cuda-8)

3.生成Cuda Sample測試

(1)首先在此之前先把需要的依賴包都安裝好,為接下來make caffe做准備
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

(2)更改gcc版本(我一開始沒有更改,直接make沒有報錯,但make玩后測試出錯,所以這里最好是改一下,如果報報錯“unsupported GNU version! gcc versions later than 4.9 are not supported!”錯誤,那就一定得改了)原因就是這個cuda不支持gcc5.0以上

解決一:

cd /usr/local/cuda-7.5/include
cp host_config.h host_config.h.bak
sudo gedit host_config.h
Ctrl+F尋找有”4.9”的地方,應該是只有一處,在其上方的
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)將兩個4改成5,保存退出,繼續

解決二:

方案就是給gcc降級為4.8,具體做法參照http://blog.csdn.net/linzhaolover/article/details/45023361(注意此處降級后,在編譯caffe的時候要再次升級為5,否則編譯報錯)

(3)正式開始make example了

cd 切換到 /home/gomee/NVIDIA_CUDA-8.0_Samples

終端輸入  make all -j4 (j4代表開多少個線程,一般你的電腦是幾核的就開幾個)

這就應該開始make了,此處大約有4,5分鍾。完成之后
cd /home/gomee/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/realease
./deviceQuery

如果出現如下信息

CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GT 650M"
  CUDA Driver Version / Runtime Version          8.0 / 7.5
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 1999 MBytes (2096300032 bytes)
  ( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
  GPU Max Clock rate:                            885 MHz (0.88 GHz)
  Memory Clock rate:                             2000 Mhz
  Memory Bus Width:                              128-bit
  L2 Cache Size:                                 262144 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GT 650M
Result = PASS
證明cuda安裝成功。

4.caffe的安裝

(1)下載caffe安裝包 到https://github.com/BVLC/caffe里下載

(2)用unzip命令解壓

(3)Python的配置

    sudo apt-get install python-pip 安裝pip

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

cd 到你解壓caffe下的python目錄下

sudo su
for req in $(cat requirements.txt); do pip install $req; done(可使用清華大學的源提高下載速度for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

(4)opencv的安裝

  這個可以安裝也可以不安裝,我首次安裝caffe的時候並沒有安裝這個也成功運行了,后來又裝上了,這個庫是視覺庫,也就是你要處理圖片時應該是要使用這個庫的。下面寫一下opencv的安裝過程

從官網(http://opencv.org/downloads.html)下載OpenCV,並將其解壓到你要安裝的位置,假設解壓到了/home/opencv。
安裝前准備,創建編譯文件夾:

cd ~/opencv mkdir build cd build

配置:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

編譯:

make -j4

以上只是將opencv編譯成功,還沒將opencv安裝,需要運行下面指令進行安裝:

sudo make install
安裝時可能遇到下面這個錯誤:
fata error: LAPACKE_H_PATH-NOTFOUND when building OpenCV 3.2
解決方案:sudo apt-get install liblapacke-dev checkinstall

(5)配置caffe

   (1)目錄切換到caffe-master(你解壓的caffe安裝包目錄)下輸入一下命令:

cp Makefile.config.example Makefile.config
gedit Makefile.config

將USE_CUDNN := 1 取消注釋,在
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include后面打上一個空格 然后添加/usr/include/hdf5/serial 如果沒有這一句可能會

 若使用了opencv並且版本是3的,則

#OPENCV_VERSION := 3 修改為: OPENCV_VERSION := 3
注:如果安裝了opencv並修改了這個,在make all 和 make test之后執行make runtest 的時候可能會出現如下的錯誤
libopencv_shape.so.3.0: cannot open shared object file: No such file or directory
解決筆記 :

進入目錄:/etc/ld.so.conf.d

創建:OpenCV.conf

添加:/opt/opencv-3.0.0/build/lib

執行:ldconfig


(2)打開Makefile並編輯

搜索並替換
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
保存退出

(3)編輯/usr/local/cuda/include/host_config.h

將其中的第115行注釋掉:

將
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported! 改為 //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

(4)再次切換到caffe目錄下執行如下命令
make all -j4
make test -j4
make runtest
如果執行后沒有報錯並在執行runtest的時候終端出現類似如下的代碼就是配置成功了
[----------] 10 tests from EltwiseLayerTest/2 (408 ms total)

[----------] 6 tests from CuDNNConvolutionLayerTest/1, where TypeParam = double
[ RUN      ] CuDNNConvolutionLayerTest/1.TestSimpleConvolutionCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestSimpleConvolutionCuDNN (2 ms)
[ RUN      ] CuDNNConvolutionLayerTest/1.TestSobelConvolutionCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestSobelConvolutionCuDNN (2 ms)
[ RUN      ] CuDNNConvolutionLayerTest/1.TestGradientGroupCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestGradientGroupCuDNN (529 ms)
[ RUN      ] CuDNNConvolutionLayerTest/1.TestSetupCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestSetupCuDNN (3 ms)
[ RUN      ] CuDNNConvolutionLayerTest/1.TestGradientCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestGradientCuDNN (1448 ms)
[ RUN      ] CuDNNConvolutionLayerTest/1.TestSimpleConvolutionGroupCuDNN
[       OK ] CuDNNConvolutionLayerTest/1.TestSimpleConvolutionGroupCuDNN (2 ms)
[----------] 6 tests from CuDNNConvolutionLayerTest/1 (1986 ms total)


*******************************************************************************************************************************
1.安裝時坑爹的過程:先是驅動怎么也安裝不了 后來發現是軟件依賴問題 需要執行 sudo apt-get install -f 最好也更新一下軟件 執行 sudo apt-get update
2.在cuda和Python等都安裝好后編譯caffe的時候報了一個包含什么“computer_64”還有什么“nvcc fetal”啥的錯,然后各種百度谷歌沒找到解決方案,我突然注意到是nvcc報的錯,那不就是
cuda的問題嗎?但是cuda make example時沒有問題啊,我想是不是n卡驅動太新了,cuda7.5不能支持啊,然后卸載了他裝了個cuda8,重新配置一遍果然這個錯誤解決了但是又報cudnn的錯誤
坑爹啊,都快郁悶了。哈,糾結了好長時間發現配置cudnn的時候cuda變成cuda-8.0了,那就是cudnn沒配成功唄。問題終於解決了,編譯也成功了。實踐證明不能一味的照着教程敲命令啊,有時候
需要知道這個命令到底是干嘛的。

此時只能在caffe-master/python下打開Python import caffe才不報錯。

Ubuntu環境下,打開python解釋程序,輸入import caffe時:出現以下錯誤

>>>import caffe

   Traceback (most recent call last):

    File "<stdin>", line 1, in <module>

   ImportError: No module named caffe

解決思路

基本思路是把caffe中的python導入到解釋器中

解決方法

第一種方法:設置環境變量

在終中輸入:

export PYTHONPATH=~/下載/caffe/python   #caffe的路徑下面的python

 

則該終端起作用,關掉終端后或重新打開一終端,則失效。

放到配置文件中,可以永久有效果,命令操作如下:
A.把環境變量路徑放到 ~/.bashrc文件中

sudo echo export PYTHONPATH="~/下載/caffe-master/python" >> ~/.bashrc

 

B.使環境變量生效

source ~/.bashrc

 

第二種方法:通過代碼來實現

在每個python代碼中使用以下代碼: (這個方法在寫python代碼時有用)

 

caffe_root = '~/下載/caffe-master/python '  

import sys  

sys.path.insert(0, caffe_root + 'python')  

import caffe

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM