본문 바로가기

개발

CUDA 10 + TORCH 설치 방법

728x90

2080 RTX 장비를 가지고 CUDA + TORCH를 설치하다보면 GPU 아키텍쳐가 바뀌어서 CUDA 9 이상을 설치 하라는 에러 메세지가 나타난다. 이런 경우 물론 CUDA 9이나 10 을 설치하고 TORCH를 설치 하면 되는데, 지난번에 CUDA 9 + TORCH 설치 방법을 정리 했으니, 이번에는 CUDA 10 + TORCH 설치 방법을 정리하려고 합니다.

CUDA 10+ TORCH 설치 방법
(참고: https://github.com/torch/cutorch/issues/834)

CUDA 10 + TORCH 는 CUDA 9 + TORCH 보다는 조금 복잡합니다.
CUDA10 의 TORCH 설치는 아래와 같은 2가지 이슈가 존재한다고 합니다.

  1. cmake/3.6/Modules/FindCUDA.cmake is outdated.
  2. atomicAdd(__half *address, __half val) is defined in /usr/local/cuda/include/cuda_fp16.h(duplicated).

이 문제를 해결 하기 위해서 아래의 6단계의 작업을 진행하게 됩니다.
  1) cmake 를 새로 설치
  2) torch 에 포함된 FindCUDA 삭제
  3) cutorch 패치
  4) install.sh 패치
  5) cudnn v7 지원 되는 cuDNN 설치
  6) torch 설치

 

1) cmake 설치

sudo apt purge cmake
git clone https://github.com/Kitware/CMake.git
cd CMake
./bootstrap; make; sudo make install

 

2) torch 에 포함된 FindCUDA 삭제

cd ~/torch
rm -fr cmake/3.6/Modules/FindCUDA*

 

3) cutorch패치

보통 3) 의 atomic 패치만 진행 하여도 CUDA 10 + TORCH 설치가 잘 되는 경우도 있지만, 이것많으로 안되는 경우도 있으므로 3) 까지 진행하고 6) 의 설치 단계를 진행해보는 것도 좋습니다.

 

3–1) torch 의 atomic 패치 파일을 아래와 같이 생성합니다.

cd ~/torch/extra/cutorch/
vi atomic.patch

 

3–2) atomic.patch 파일에 입력할 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

 

3–3) atomic.patch 패치 실행

patch -p1 < atomic.patch

 

4) install.sh 패치

4) 의 install 패치를 하지 않아도 설치가 되는 경우도 있습니다. 안되는 경우도 있으므로 4) 까지 진행하고 5) 의 설치 단계를 진행하는게 좋습니다.

 

4–1) torch 의 install 패치 파일을 아래와 같이 생성합니다.

cd ~/torch/
vi install.patch

 

4–2) install.patch 파일에 입력할 install.patch 파일 내용을 아래와 같습니다.

diff --git a/install.sh b/install.sh
index ad65434..65a0163 100755
--- a/install.sh
+++ b/install.sh
@@ -99,9 +99,6 @@ fi
 if [ -x "$path_to_nvcc" ] || [ -x "$path_to_nvidiasmi" ]
 then
     echo "Found CUDA on your machine. Installing CMake 3.6 modules to get up-to-date FindCUDA"
-    cd ${THIS_DIR}/cmake/3.6 && \
-(cmake -E make_directory build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX="${PREFIX}" \
-        && make install) && echo "FindCuda bits of CMake 3.6 installed" || exit 1
 fi

 

4–3) install.patch 패치 실행

patch -p1 < install.patch

 

5) torch 설치

cd ~/torch ./clean.sh
export TORCH_NVCC_FLAGS="-D__CUDA_NO_HALF_OPERATORS__"
./install.sh

 

6) cudnn v7 지원 되는 cuDNN 설치

cuDNN.torch의 마스터 브랜치는 cuDNN v7을 지원하지 않으니, R7 브랜치를 설치하면 됩니다.

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

 

 

여기까지 진행하면 아래와 같이 CUDA 10 + TORCH 가 깔끔하게 설치가 됩니다.