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

安装成功!!!

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