安裝準備
- 環境
配置 | 版本 |
---|---|
操作系統 | 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
安裝成功!!!