ubuntu16.04在cuda10.0的環境下安裝torch7

安裝準備

  • 環境
配置 版本
操作系統 16.04
cuda 10.0
  • 碰到的困難
    因爲操作系統安裝的cuda版本爲cuda10.0,但是torch7所支持的版本是cuda7.5,因此,安裝過程跟官網有很大的不同,這裏給官網torch7的安裝步驟:
    http://torch.ch/docs/getting-started.html

開始安裝cmake

  • 刪除原先的cmake
sudo apt-get purge cmake
  • 從源碼安裝cmake
git clone https://github.com/Kitware/CMake.git
cd CMake
./bootstrap; make; sudo make install
  • 安裝過程中碰到的問題
    問題1:
The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libEGL.so"

排查問題,先執行該命令:

ls /usr/lib/x86_64-linux-gnu | grep -i libegl
libEGL.so 
libEGL.so.1 
libEGL.so.346.59

然後執行

ls -l /usr/lib/x86_64-linux-gnu/libEGL.so
lrwxrwxrwx 1 root root 18 mar 30 17:10 /usr/lib/x86_64-linux-gnu/libEGL.so -> mesa-egl/libEGL.so
ls -l /usr/lib/x86_64-gnu/mesa-egl/libEGL.so
lrwxrwxrwx 1 root root 15 mar 30 17:10 /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so -> libEGL.so.1.0.0

由上面可以發現,libEGL.so/mesa-egl/libEGL.so文件都是鏈接文件,而真正指向的文件libEGL.so.1.0.0文件卻不存在,因此,我們可以直接讓libEGL.so這個鏈接文件鏈接到一個存在的文件,先刪除本身的文件,然後再新建一個鏈接文件,命令如下:
解決辦法:

sudo rm /usr/lib/x86_64-linux-gnu/libEGL.so; sudo ln -sf /usr/lib/x86_64-linux-gnu/libEGL.so.1 /usr/lib/x86_64-linux-gnu/libEGL.so

問題2:

The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libGL.so"

原因跟問題1一樣,此時我們可以通過locate libGL命令來尋找真正存在的libGL.so文件,然後執行下面的命令:

sudo rm /usr/lib/x86_64-linux-gnu/libGL.so; sudo ln -sf /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so

解決上面的問題之後,執行:

./bootstrap; make; sudo make install

安裝torch

刪除FindCUDA.cmake.

cd ~/torch
rm -fr cmake/3.6/Modules/FindCUDA*
cd extra/cutorch
vim atomic.patch

將下面的內容複製進去:

diff --git a/lib/THC/THCAtomics.cuh b/lib/THC/THCAtomics.cuh
index 400875c..ccb7a1c 100644
--- a/lib/THC/THCAtomics.cuh
+++ b/lib/THC/THCAtomics.cuh
@@ -94,6 +94,7 @@ static inline __device__ void atomicAdd(long *address, long val) {
 }
 
 #ifdef CUDA_HALF_TENSOR
+#if !(__CUDA_ARCH__ >= 700 || !defined(__CUDA_ARCH__) )
 static inline  __device__ void atomicAdd(half *address, half val) {
   unsigned int * address_as_ui =
       (unsigned int *) ((char *)address - ((size_t)address & 2));
@@ -117,6 +118,7 @@ static inline  __device__ void atomicAdd(half *address, half val) {
    } while (assumed != old);
 }
 #endif
+#endif
patch -p1 < atomic.patch
./clean.sh
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
./install.sh

使用luarocks編譯cudnn,按照下面的命令執行:

git clone https://github.com/soumith/cudnn.torch.git -b R7
cd cudnn.torch
luarocks make cudnn-scm-1.rockspec

安裝成功!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章