安装准备
- 环境
配置 | 版本 |
---|---|
操作系统 | 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
安装成功!!!