[問題彙總]ubuntu16.04+cuda8.0+cudnn+opencv3.2+caffe+tensorflow+SS搭建
未完待續。。。
ubuntu16.04安裝:
採用映象解壓U盤安裝,在官網下載映象包後解壓拷貝至U盤中,在電腦BIOS設定U盤啟動
顯示卡驅動
NVIDIA MX150驅動安裝(以小米筆記本為例)
安裝完ubuntu kylin16.04後,開機發熱嚴重,風扇狂轉。應該是顯示卡驅動的問題,通過輸入以下程式碼檢視最合適的驅動
sudo ubuntu-drivers devices
如圖:
顯示卡驅動版本應該選擇nvidia-384
下面有三種方法:
- 方法一
在NVIDIA驅動下載官網下載對應的run檔案
首先解除安裝系統中的nvidia驅動:
sudo apt-get purge nvidia*
由於系統自帶的開源驅動與nvidia不相容,要遮蔽掉nouveau
新建blacklist-nouveau.conf檔案,輸入命令:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
往檔案中寫入:
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
再更新一下
sudo update-initramfs -u
儲存並退出。這一步是為了禁掉Ubuntu自帶開源驅動nouveau。之後sudo reboot
lsmod | grep nouveau
如果沒有feedback則已經禁用了nouveau。
下面我們找到驅動的存放目錄,開啟終端,為檔案新增可執行許可權:
sudo chmod a+x NVIDIA-Linux-x86_64-384.69.run
用這種方法安裝有一個弊端,就是不能在GUI中執行.run檔案。
首先輸入:
sudo /etc/init.d/lightdm stop
按下ctrl+alt+F1進入tty1,按下ctrl+alt+F7回到桌面
然後
sudo ./NVIDIA-Linux-x86_64-384.69.run -- no-opengl-files
sudo /etc/init.d/lightdm start
一定不要裝opengl。
ok後重啟電腦
輸入nvidia-smi
檢視安裝是否完成
(我用該方法時遇到一個問題,驅動貌似是裝了,但是開啟nvidia-settings後沒有選擇驅動的地方,也不能檢視當前驅動的狀態,經過多次解除安裝sudo apt-get purge nvidia*
重灌也無濟於事。。。)
於是換到了方法2
- 方法二
使用ppa安裝(此處感謝Linux公社的教程)
解除安裝之前的驅動,和法一一樣
1:sudo add-apt-repository ppa:mamarley/nvidia
2:輸入你的root密碼
3:sudo apt-get update
4:sudo apt-get install nvidia-版本號 nvidia-prime
5:等待安裝完成,重啟之後,你的電腦應該就是在用nvidIa顯示卡驅動了,可以使用這個進行顯示卡切換,切換之後必須登出登陸一次才行。
用這個方法時我也遇到了問題,就是下載卡在24%不動了,後來連結手機熱點才完成下載安裝,總體來說,這個方法最好用。
輸入nvidia-smi
驗證驅動安裝
顯示卡快速切換
開啟終端,輸入以下命令:
sudo add-apt-repository ppa:nilarimogard/webupd8 #新增PPA更新源
sudo apt-get update #重新整理更新源列表
sudo apt-get install prime-indicator #安裝雙顯示卡切換指示器
cuda8.0
- 1.安裝
sudo sh cuda_*****.run
執行後會有一系列的Y/n選擇,其中選擇顯示卡驅動的一項一定選n。其他的隨意,一般預設即可。
ubuntu的gcc編譯器是5.4.0,然而cuda8.0不支援5.0以上的編譯器,因此需要降級,把編譯器版本降到4.9:
在terminal中執行:
sudo apt-get install gcc-4.9 gcc-5 g++-4.9 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
配置cuda8.0之後主要加上的一個環境變數宣告
gedit ~/.bashrc
在檔案~/.bashrc之後加上:
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然後設定環境變數和動態連結庫,在命令列輸入
sudo gedit /etc/profile
在開啟的檔案裡面加上(注意等號兩邊不能有空格)
export PATH=/usr/local/cuda/bin:$PATH
儲存之後,建立連結檔案
sudo gedit /etc/ld.so.conf.d/cuda.conf
在開啟的檔案中新增如下語句:
/usr/local/cuda/lib64
儲存退出執行命令列:
sudo ldconfig
- 2.測試
測試cuda的Samples
命令列輸入(注意cuda-8.0是要相對應自己的cuda版本)
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery
返回GPU資訊:表示配置成功
cudnn
cd進入cudnn7.0解壓之後的include目錄,在命令列進行如下操作:
sudo cp cudnn.h /usr/local/cuda/include/ #複製標頭檔案
再cd進入lib64目錄下的動態檔案進行復制和連結:(7.0.1為對應版本具體可修改)
sudo cp lib* /usr/local/cuda/lib64/ #複製動態連結庫
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.7 #刪除原有動態檔案
sudo ln -s libcudnn.so.7.0.1 libcudnn.so.7 #生成軟銜接
sudo ln -s libcudnn.so.7 libcudnn.so #生成軟連結
Opencv3.2.0
linux下檢視opencv版本
pkg-config --modversion opencv
在github上下載程式碼並將其解壓到你要安裝的位置,(下載的位置還是在home/ubuntu、Downloads資料夾下)
首先安裝Ubuntu系統需要的依賴項,雖然我也不知道有些依賴項是幹啥的,但是隻管裝就行,也不會佔據很多空間的。
sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
然後安裝opencv需要的一些依賴項,一些檔案編碼解碼之類的東東。
sudo apt-get install build-essential cmake git
sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
在終端中cd到OpenCV資料夾下(解壓的那個資料夾),然後
mkdir build #新建一個build資料夾,編譯的工程都在這個資料夾裡
cd build/
- 問題
cmake opencv 時遇到nvcc warning : The ‘compute_20’, ‘sm_20’, and ‘sm_21’ ……
解決辦法如下:
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_ARCH_BIN="5.0" ..
CUDA_ARCH_BIN代表你當前顯示卡的計算能力。具體能力值可在nvidia官網下載cuda的地方查閱。新增CUDA計算能力值後即可正常編譯通過。
cmake成功後,會出現如下結果,提示配置和生成成功:
– Configuring done
– Generating done
– Build files have been written to: /home/ise/software/opencv-3.2.0/build
使用checkinstall:
使用checkinstall的目的是為了更好的管理我安裝的opencv,因為opencv的安裝很麻煩,解除安裝更麻煩,其安裝的時候修改了一大堆的檔案,當我想使用別的版本的opencv時,將當前版本的opencv解除安裝就是一件頭疼的事情,因此需要使用checkinstall來管理我的安裝。執行了checkinstall後,會在build檔案下生成一個以backup開頭的.tgz的備份檔案和一個以build開頭的.deb安裝檔案,當你想解除安裝當前的opencv時,直接執行dpkg -r build即可。
在install時,執行下面程式碼後出現錯誤
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
在sudo ldconfig時遇到:/sbin/ldconfig.real: /usr/local/cuda/lib64/libcudnn.so.6 不是符號連線
解決辦法:
建立硬連結
首先找到usr/local/cuda-8.0/lib64/目錄,搜尋 libcudnn 然後發現
兩個檔案
libcudnn.so.6 和libcudnn.so.6.0.21
理論上只有一個libcudnn.so.6.0.21
sudo ln -sf /usr/local/cuda/lib64/libcudnn.so.6.0.21 /usr/local/cuda/lib64/libcudnn.so.6
- 完成
caffe
- 在make py的時候,遇到了這個錯誤:
/usr/bin/ld: cannot find -lhdf5_hl
/usr/bin/ld: cannot find -lhdf5
collect2: error: ld returned 1 exit status
這說明聯結器找不到 hdf5_hl和hdf5這兩個庫,沒法進行連結。
我的解決方案是更改makefile:在makefile中作如下更改:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
把第一行註釋,然後改成第二行的內容就可以了。
- 問題2
/usr/bin/ld:/usr/local/cuda/lib64/libcudnn.so: file format not recognized; treating as linker script
/usr/bin/ld:/usr/local/cuda/lib64/libcudnn.so:1: syntax error
collect2: error: ld returned 1 exit status
Makefile:573: recipe for target ‘.build_release/lib/libcaffe.so.1.0.0’ failed
make: * [.build_release/lib/libcaffe.so.1.0.0] Error 1
解決方法:
移除除libcudnn.so.7.0.1以外的libcudnn.so檔案
/usr/local/cuda/lib64$ sudo rm -rf libcudnn.so libcudnn.so.7
重新生成
sudo ln -s libcudnn.so.7.0.1 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
然後
make clean
make all -j10
之後執行sudo make runtest
測試是否裝好
如果出現錯誤:
error while loading shared libraries: ×××.so.3.2: cannot open shared object file: No such file or directory
參考:
http://blog.chinaunix.net/uid-26212859-id-3256667.html
在root模式下(×××#)表示root模式,按ctrl+D切換出root使用者
sudo su
×××# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
×××# echo "/usr/local/lib" >> /etc/ld.so.conf
×××# ldconfig
tensorflow
theano
fanQ篇
設定終端的全域性代理:
安裝polipo軟體
sudo apt-get install polipo
修改配置檔案
config檔案是隻讀的,要想修改裡面的資料,需要獲得最高許可權。
cd /etc/polipo/
sudo chmod 777 config # 為config檔案申請最高許可權
vi /etc/polipo/config # 開啟進行編輯
原檔案中已經有了兩句話,那麼需要新加入3句話:
socksParentProxy = "localhost:1080"
socksProxyType = socks5
logLevel=4
ps:這裡建議修改檔案後恢復其本來的許可權,這算是個好習慣。
關閉和啟動polipo
關閉軟體,讓配置生效,然後重啟。
sudo service polipo stop
sudo service polipo start
驗證和使用
$ http_proxy=http://localhost:8123 curl ip.gs
Current IP / 當前 IP: 160.16..
ISP / 運營商: sakura.a***
City / 城市: Tokyo Tokyo
Country / 國家: Japan
IP.GS is now IP.SB, please visit https://ip.sb/ for more IP information, ip.gs will only use for curl purpose. / IP.GS 已更新至 IP.SB 請訪問 https://ip.sb/ 獲取更多資訊, ip.gs 域名僅作 curl 使用
如有問題,請加入 Telegram 群 https:// t me sbfans
設定別名
每一次都輸入這麼一串命令實在太不人性化,解決方法就是給這個命令一個縮寫的別名,比如“hp”。
vi .bashrc
開啟配置檔案,在最後面加上一句:
alias hp="http_proxy=http://localhost:8123"
關閉檔案,執行下面程式碼:
source ~/.bashrc
這樣,hp就可以代表之前很長的命令,試驗一下:
hp curl ip.gs
為當前會話設定全域性代理
難道要在每條聯網命令前面都加上“hp”?當然不會,以下操作可以讓當前終端視窗的所有聯網命令都經過代理,一條命令,接管所有:
$export http_proxy=http://localhost:8123 # 當前終端使用代理
$ unset http_proxy # 當前終端取消代理
更為長久的代理設定
如果我想Ubuntu終端一直處於代理狀態,能不能做到呢?這也是可以的,以下設定可以讓本機的終端一直擁有代理能力,設定好後就完全不用操心了,類似於寫入環境變數的操作。
方法很簡單,將以下語句:
export http_proxy=http://localhost:8123
加入.bashrc檔案末尾,再執行source ~/.bashrc
即可。
軟體源問題
sudo apt-get update