ubuntu下100%成功安裝torch,同時配置cuda和cudnn(不成功,則成仁)

總說

這些更新不影響主體。所有更新附加在文章最後。
第一次更新: 內容:添加一些Torch7常用庫的安裝,時間:2017.3.20
第二次更新:內容:某些torch庫無法在線安裝,轉成離線安裝的方法,時間:2017.3.31
第三次更新:內容:針對安裝”cutorch”時出錯的問題修復。時間:2017.5.11
第四次更新:內容:加入cudnn6.0的安裝。 時間:2017.5.19
第五次更新:內容:解決Missing dependencies for nn:moses >= 1. 問題。 時間:2017.6.4
第六次更新: 內容:解決g++依賴包問題。時間:2017.6.25
第七次更新:內容:爲什麼有時候luarocks明明安裝了包,但是還是出現類似Missing dependencies for nn:moses >= 1的錯誤??。時間:2017.6.26
第八次更新:內容:如果你的顯卡是Jetson Tegra 或是Jeston TK1之類的,或是用到linux是32位的(超級不推薦)跑程序時出現Segmentation fault (core dumped)問題,一種可能可以解決的辦法。。。時間:2017.8.10
第九次更新:紀念逝去的Torch7.。。時間:2017.9.8

三個前提:
1. ubuntu別太老,最好14.04或以上吧,本人採用14.04
2. cuda別太老,本人試過cuda7.5和cuda8.0。都完美運行。值得注意的是compute6.1之類的顯卡必須是cuda8.0或者更高。反正往高的裝沒問題。
3. cudnn一定要和cuda版本對應。這是最關鍵的。比如我以前是普通的泰坦X,就是計算能力5.1的,隨便裝7.5還是8.0。但是如果是新泰坦X或是1080之類的,計算能力是6.1的, cuda最低是8.0。 版本對應指,如果cuda是7.5的,即cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64,採用的cudnn就要cudnn-7.5-linux-x64-v5.0-ga.tgz,是爲cuda7.5準備的cudnn5.0版本。 現在裝的是cuda8.0,即cuda-repo-ubuntu1404-8-0-local_8.0.44-1_amd64.deb。採用的是
cudnn-8.0-linux-x64-v5.1.tgz。

安裝與測試

用一個例子來跑,從而驗證torch以及cuda和cudnn是否安裝成功。
我推薦這個。
參考:鏈接:https://github.com/jcjohnson/neural-style/blob/master/INSTALL.md
neural-style

安裝torch7

直接用torch自帶腳本

git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch; bash install-deps;
./install.sh
  • 1
  • 2
  • 3

這裏可能會出現的問題,在 坑一中。
如果出現Missing dependencies for nn:moses >= 1. ,請參照博客的附加部分
接下來,它會提示是否吧torch加入bashrc中,有”….(yes|no)”提示,輸入yes,即可。
爲了保險,可以看看bashrc文件

vim ~/.bashrc
  • 1

查看文檔末尾是不是有類似

./home/xxx/torch/install/bin/torch-activate
  • 1

上面是你torch安裝的路徑。
然後跟新一下環境變量。

source ~/.bashrc
  • 1

然後

th
  • 1

會出現
這裏寫圖片描述
現在來說,基本的torch就安裝好了!!!就是這麼簡單。但是你可能還想裝cuda,其實也很簡單。

下載配置neural style(僅僅用於測試cpu和GPU的對比程序,真心可以省略。。)

安裝其他依賴庫

sudo apt-get install libprotobuf-dev protobuf-compiler
luarocks install loadcaffe
  • 1
  • 2

下載neural style代碼

cd ~/
git clone https://github.com/jcjohnson/neural-style.git
cd neural-style
  • 1
  • 2
  • 3

安裝VGG模型

sh models/download_models.sh

CPU版本的測試
th neural_style.lua -gpu -1 -print_iter 1
  • 1
  • 2
  • 3
  • 4

若出現

[libprotobuf WARNING google/protobuf/io/coded_stream.cc:505] Reading dangerously large protocol message.  If the message turns out to be larger than 1073741824 bytes, parsing will be halted for security reasons.  To increase the limit (or to disable these warnings), see CodedInputStream::SetTotalBytesLimit() in google/protobuf/io/coded_stream.h.
[libprotobuf WARNING google/protobuf/io/coded_stream.cc:78] The total number of bytes read was 574671192
Successfully loaded models/VGG_ILSVRC_19_layers.caffemodel
conv1_1: 64 3 3 3
conv1_2: 64 64 3 3
conv2_1: 128 64 3 3
conv2_2: 128 128 3 3
conv3_1: 256 128 3 3
conv3_2: 256 256 3 3
conv3_3: 256 256 3 3
conv3_4: 256 256 3 3
conv4_1: 512 256 3 3
conv4_2: 512 512 3 3
conv4_3: 512 512 3 3
conv4_4: 512 512 3 3
conv5_1: 512 512 3 3
conv5_2: 512 512 3 3
conv5_3: 512 512 3 3
conv5_4: 512 512 3 3
fc6: 1 1 25088 4096
fc7: 1 1 4096 4096
fc8: 1 1 4096 1000
WARNING: Skipping content loss  
Iteration 1 / 1000  
  Content 1 loss: 2091178.593750    
  Style 1 loss: 30021.292114    
  Style 2 loss: 700349.560547   
  Style 3 loss: 153033.203125   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

表示如果這一步都到不了的話,難度挺大。

安裝cuda

這個如果你以前裝過就不用再裝了,其實就是個環境嘛,默認是安裝在類似/usr/local/cuda-8.0的。安裝的時候它會創建一個軟鏈接,類似windows的快捷方式。
直接從官網上下載對應版本的cuda 。然後deb文件直接雙擊安裝。你別以爲這個deb安裝完了,cuda就安裝好了,其實還有附加的庫,也是要安裝的。這些要通過命令行來進行。

sudo apt-get update
sudo apt-get install cuda
  • 1
  • 2

上面的apt-get安裝的cuda會根據你的deb的cuda的版本的不同,而安裝相應的庫。比如你如果是採用cuda8.0的deb,那麼此時上面會出現一堆cuda8.0-之類的文件名的庫。

最後再試試是否安裝好了cuda

nvidia-smi
  • 1

出現你的顯卡配置信息的話,就ok。
這裏寫圖片描述

安裝torch的cuda支持

剛纔裝的cuda是通用的,是所有的程序框架都可以用的啊。但是你讓torch用cuda的話,還要安裝2個庫cutorch和cunn。cutorch是讓torch能用GPU,而cunn是專門針對神經網絡,讓神經網絡運行於GPU之上。其實torch安裝相應的其他庫還是很簡單的,直接一條命令搞定。

luarocks install cutorch
luarocks install cunn
  • 1
  • 2

注意:安裝cutorch可能會出錯。方法見博文最後面

測試一下

th -e "require 'cutorch'; require 'cunn'; print(cutorch)"
  • 1

這裏寫圖片描述
此時到這裏應該還是妥妥的.

安裝cudnn

其實cudnn就是一些鏈接庫,怎麼安裝呢。把cudnn的頭文件放入和相應的鏈接庫放入cuda路徑的相應位置就行了。顯然頭文件是放入include文件夾中,而鏈接庫是放入lib64文件夾中。因此有
下面先安裝cudnn5.1的,然後直接luarocks install cudnn,現在默認的是cudnn5.x。如果想要安裝cudnn6.0的,請看文章附加。

tar -xzvf  cudnn-8.0-linux-x64-v5.1.tgz
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
  • 1
  • 2
  • 3

最後在安裝torch的cudnn支持

luarocks install cudnn
  • 1

測試一下:

th neural_style.lua -gpu 0 -backend cudnn
  • 1

幾乎是百分百成功的,妥妥的,可能會出現坑二

測試一下

(注意:沒通過可能是由於特定誤差閾值設置的問題,如今他們也不更新了,所以你就當沒問題用就行,否則建議能轉則轉啊,順帶說一句,,用了快2年了,貌似還沒發現哪個函數有問題。)

cd ~/torch
./test.sh
  • 1
  • 2

這裏寫圖片描述
只有一個錯誤,在VolumetricFullConvolution_pair_test中,但是我應該用不到這個卷積,所以問題不大。
嚇人的是,半天后再測試一下時,又詭異的沒錯誤了。。這麼不穩定,退torch,保平安。
這裏寫圖片描述

坑1:torch的依賴庫很多!!

curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
  • 1

運行這個時,一定會經過較長時間的安裝!!!!由於我這裏的網很差,所以如果你的也有類似的情況,那麼可能會出現:“xxx 校驗和不符”。這時說明完全沒有安裝依賴庫好吧!!我以前以爲已經裝好了,直接下完neural-style,然後./install.sh。我擦,結果出現什麼cmake not found之類的。然後我還傻乎乎的去 sudo apt-get install cmake。結果又出現其他亂七八糟的,現在就是一句話:bash install-dep是把所有的依賴庫都會安裝好!!並且安裝完之後會有類似提示:“torch dependencies have already installed.”。 如果一致出現什麼校驗和不符這類問題,那麼就更換源,最靠譜的方法不是根據網上所說的從“網易源”或是“搜狐源”加入到sudo vim /etc/apt/source.list之類的,這都不靠譜!最有效的方法是,右上角–>系統設置–>軟件和更新—>Ubuntu軟件—>下拉選擇框–>其他站點—>選擇最佳服務器,過段時間,測試結束後,就會顯示最好的服務器,然後選擇確定。關閉時會讓你重新載入源,點擊確定即可。

坑2 可能出現’libcudnn not found in library path’的情況

截取其中一段錯誤信息:

Please install CuDNN from https://developer.nvidia.com/cuDNN
Then make sure files named as libcudnn.so.5 or libcudnn.5.dylib are placed in your library load path (for example /usr/local/lib , or manually add a path to LD_LIBRARY_PATH)
  • 1
  • 2

LD_LIBRARY_PATH是該環境變量,主要用於指定查找共享庫(動態鏈接庫)時除了默認路徑之外的其他路徑。由於剛纔已經將
“libcudnn*”複製到了/usr/local/cuda-8.0/lib64/下面,因此需要
方法一:
1. sudo gedit /etc/ld.so.conf.d/cudnn.conf 就是新建一個conf文件。名字隨便
2. 加入剛纔的路徑/usr/local/cuda-8.0/lib64/
3. 反正我還添加了/usr/local/cuda-8.0/include/,這個估計不要也行。
4. 保存後,再sudo ldconfig來更新緩存。(可能會出現libcudnn.so.5不是符號連接的問題,不過無所謂了!!若要解決這個問題,可以看哈哈
方法二(這個簡單):
直接

 vim ./.bashrc
  • 1

然後在最後添加

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBARARY_PATH
  • 1

此時運行

th neural_style.lua -gpu 0 -backend cudnn
  • 1

成功了!!!!

發現用cudnn時,變成50個50個一顯示了,速度快了些。剛纔但存用cuda只是1個1個顯示的。不說了,歇會兒。

總結

一定要版本對應!!cuda和cudnn的版本一定要對應,對應!!!!

HDF5安裝

torch中如果直接

luarocks install hdf5
  • 1

是會出錯的。要這樣:

sudo apt-get install libhdf5-serial-dev hdf5-tools
git clone https://github.com/deepmind/torch-hdf5
cd torch-hdf5
luarocks make hdf5-0-0.rockspec LIBHDF5_LIBDIR="/usr/lib/x86_64-linux-gnu/"
  • 1
  • 2
  • 3
  • 4

具體的一些用法參照
DeepMind

各種問題彙總方案

記錄一下裝了n遍torch,總結出來的各種問題解決方案。

其他一些可能會用到的庫

下面三個分別是加載caffe的model要用到的庫, 自動求導的庫,以及自定義初始化參數的庫。

luarocks install loadcaffe
luarocks install autograd
luarocks install nninit
  • 1
  • 2
  • 3

安裝loadcaffe前要先安裝

sudo apt-get install libprotobuf-dev protobuf-compiler
  • 1

其中loadcaffe可能會因爲人品不好,直接這樣安裝不成功!此時查看下文的離線安裝torch庫。
還有就是可能希望將loss或是圖片在瀏覽器中顯示出來的庫display

luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
  • 1

你可能還需要將torch的tensor轉換成numpy的數組,以便利用Python的庫進行操作。這時候你需要

luarocks install npy4th
  • 1

值得注意的是,由於Torch的table是從1開始的,而python是從0開始的。它是會自動轉換的,所以無需擔心。

最後抱怨一下,都多少年沒更新了啊。。
這裏寫圖片描述
看看別人TF。。
這裏寫圖片描述
最後的最後,再次強調!退Torch,保平安。。

離線安裝torch庫

我們知道torch安裝庫還是很簡單的。直接luarocks install xxx。但是有時候怎麼都安裝不了某些庫。比如luarocks install loadcaffe
這時候直接找github的源碼,下載離線安裝

git clone https://github.com/szagoruyko/loadcaffe.git
cd loadcaffe
luarocks make loadcaffe-xxx
  • 1
  • 2
  • 3

搞定了。

cutorch安裝出錯解決方法

以前是不會錯的,但是如今他們更新了THCTensor後,就會出錯了。
The problem is the latest commit these guys have pushed into master in THCTensor file.
I made a local copy of the repo. Took out the problem some code and installed
it using luarocks. Worked for me

這個問題是因爲:distro安裝的各種包的穩定版本,會滯後於各個包幾個月時間。如果要單獨更新某個包可以用下面的
解決方法:先要用luarocks安裝一下torch,這會更新distro的torch7的包。

luarocks install torch
luarocks install cutorch
  • 1
  • 2

cudnn6.0

首先當然安裝類似cudnn-8.0-linux-x64-v6.0.tgz,然後

git clone https://github.com/soumith/cudnn.torch -b R6
cd cudnn.torch
luarocks make
  • 1
  • 2
  • 3

另外,現在貌似是torch.cudnn沒優化好??畢竟還不是master分支,關鍵是你裝上之後,跑我那個程序速度好像沒提升啊。說好的2x速度提升呢。。。

執行./install.sh時出現Moses>=1.錯誤

Missing dependencies for nn:moses >= 1.,有時候執行./install.sh時,會出現這個問題。
一句話:網速差啊網速差!你可能會說自己網速不差,這個問題當且僅當網速出問題時纔會出現
解決辦法

luarocks install moses
  • 1

是沒有用的!你得單獨下載
Moses,然後參照博客前面提到的離線安裝torch庫的辦法,安裝完Moses後,就可以正確安裝torch了。

g++依賴包問題

這個問題很可能是因爲改了源造成的。直接用Ubuntu14.04的官方源就行,其他版本的也用對應的源即可。

更改/etc/apt/source.list,再末尾加上下面的源,然後update

deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

爲什麼有時候luarocks明明安裝了包,但是還是出現類似Missing dependencies for nn:moses >= 1的錯誤??

以前我直接是講distro包放在主目錄下的torch文件夾內的,然後進行安裝。一般這樣安裝就是luarocks安裝的所有的包,默認在/home/xxx/torch/install內的。然而詭異的是,有時候離線安裝mose包,會出現
這裏寫圖片描述
這說明luarocks竟然安裝在/usr/lib下面了。所以我們需要指定mose的安裝路徑!否則./install是從/home/xxx/torch/install找已經安裝的包的。
解決方案:

luarocks make --tree /home/xxx/torch/install rockspec/moses-1.6.1-1.rockspec
  • 1

其中–tree是指定moses的安裝路徑。

Segamentation Fault錯誤的可能解決辦法

如果你的顯卡是**Jetson Tegra 或是Jeston TK1之類的,或是用到linux是32位的(超級不推薦)跑程序時出現Segmentation fault (core dumped)。
辦法:使用Lua5.2而不是默認的LuaJIT, 然而令人頭大是是如果模型超過2GB,就會出錯~~
使用Lua5.2的方法見官網 http://torch.ch/docs/getting-started.html

逝去的Torch7

前幾天,傳來噩耗!突然出現Torch的distro的Readme更新,一看:
這裏寫圖片描述
這標誌着Torch正式進入維護模式。額,其實也無所謂了,自從pytorch出來後,就幾乎沒有更新。。所以,你還看torch博客幹嘛啊,趕緊轉啊!!!!

發佈了49 篇原創文章 · 獲贊 97 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章