이런 건 정리해 두지 않으면 나중에 꼭 처음부터 다시 삽질하게 된다.


여기 적혀있는 내용은 2017년 12월 19일 기준이며, Anaconda로 Python 3.6을 깔아놓은 윈도우 7 시스템에 CUDA를 지원하는 그래픽 카드가 설치된 경우를 기준으로 한다. 그리고 텐서플로우 1.4를 깔아서 사용하기로 했다.


혹시 방화벽 때문에 프록시 설정이 필요하다면 conda, pip, git 등에 대해 각각의 프록시 지정 방법을 숙지하고 작업해야 한다.

(conda나 pip는 설정 파일에서 지정해도 되고 아니면 --proxy=https://proxyUsername:proxyPassword@proxy.server.com:port 같은 식으로 명령행 옵션을 줘도 된다. git의 경우는 git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port 같은 식으로 프록시를 설정하면 된다.)


1. CUDA Toolkit 설치

현재 CUDA 툴킷 최신 버전은 9.1이지만, 텐서플로우 1.4에서는 8.0만 지원하므로 (9.1이 깔려있다고 하더라도) 8.0이 안 깔려 있는 컴퓨터라면 8.0을 깔아줘야 한다.

다운로드 주소: https://developer.nvidia.com/cuda-80-ga2-download-archive 여기서 자기 시스템을 클릭클릭하면 다운로드 적합한 버전에 대한 링크가 뜬다.


2. cuDNN 설치

cuDNN도 최신 버전은 7이지만 텐서플로우 1.4에서는 6만 지원하므로 (7이 깔려있다고 하더라도) 6이 안 깔려 있다면 6도 깔아줘야 한다.

다운로드 주소: https://developer.nvidia.com/rdp/cudnn-download 이건 그냥 다운받을 수 없고 nVidia 개발자 프로그램에 가입해야 한다. 뭐 돈 들고 그러는 거 아니니까 잽싸게 가입하고 나서 다운로드 받으면 된다.

설치 방법: zip 파일을 받으면 디렉토리 안에 파일이 몇 개 들어있다. bin 디렉토리에 있는 건 CUDA 툴킷의 bin 디렉토리에 (보통은 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin)에 넣고, include, lib 디렉토리에 있는 것도 마찬가지로 해당되는 디렉토리로 복사해 주면 끝난다.


3. Tensorflow 설치 (https://www.tensorflow.org/install/install_windows 참조)

우선 텐서플로우용 환경을 하나 만든다. 파이썬 3.6을 쓰고 환경 이름은 tensorflow라고 하면 다음과 같은 명령을 쓰면 된다.

conda create -n tensorflow python=3.6

다음과 같이 하여 tensorflow 환경을 활성화한다. (프롬프트 바뀌는 것 확인)

activate tensorflow

그리고 나서 gpu 버전의 텐서플로우를 설치한다.

pip install --ignore-installed --upgrade tensorflow-gpu


4. HDF5, h5py 설치

이건 꼭 필요한 건 아니지만 Keras에서 디스크에 데이터를 저장고 싶다면 설치해야 한다. 그냥 conda 프롬프트나 Anaconda 내비게이터에서 설치하면 된다.

conda install hdf5

conda install h5py


5. graphviz, pydot 설치

이건 시각화에 필요한 모듈인데, 아나콘다에서 바로 설치가 되진 않는다.

pip install graphviz 명령으로 graphviz를 설치한다. 그리고 나서 시스템 PATH에 graphviz의 bin 디렉토리를 추가해야 한다. (그냥 별 옵션 없이 설치하면 C:\Program Files (x86)\Graphviz2.38\bin 이다.)


pydot도 파이썬 3.6에서는 기본 conda로 설치는 안 되고, 대신 pip install git+https://github.com/pydot/pydot-ng.git 라는 명령을 써서 설치해야 한다.


설치가 잘 되었는지 확인하고 싶다면 https://pythonhaven.wordpress.com/tag/pydot/ 여기에 있는 간단한 예제를 실행시켜보자.


6. scipy, matplotlib, PIL, pyyaml 설치

이것저것 하다 보면 PIL이 없어서 에러가 나는 경우가 있다. scipy, matplotlib 같은 건 거의 필수 아이템이니까 설치해야 하고...

scipy, pyyaml은 pip로 케라스를 설치하면 의존성 때문에 자동으로 깔아주는데, 혹시 케라스 설치할 때 UnicodeDecodeError가 나면서 설치가 제대로 되지 않는 문제가 생긴다면 따로 먼저 깔아보자. 나도 UnicodeDecodeError가 나서 잠시 고민했으나, 따로 깔아주니 괜찮았다. 

conda scipy

conda matplotlib

conda install pillow

conda pyyaml


7. Keras 설치

여기까지 하면 케라스 설치를 할 준비가 끝난다. 케라스 설치는 다음과 같은 명령을 내리면 된다.


pip install keras


끝.

이렇게라도 기록을 해 두지 않으면 잊어버리기에...
블로그가 랩노트는 아니지만 이렇게 기록해 둡니다.

초기에는 CUDA에서 정식으로 Ubuntu linux를 (물론 Debian도) 지원하지 않았는데 요즘은 어느 정도 정식 지원이 됩니다. 하나 안타까운 건 비교적 업데이트가 빠른 Ubuntu 리눅스 특성상 CUDA에서 지원하는 Ubuntu 버전이 조금씩 느리다는 문제가 있어요.

현재 CUDA 사이트에서 공식으로 지원해주고 있는 Ubuntu linux 버전은 9.10입니다. 그래서 10.04에서는 약간 문제가 생기죠.

CUDA를 설치할 때는 다음과 같이 세 단계를 거치면 됩니다.

  1. Device Driver 설치
  2. CUDA Toolkit 설치
  3. GPU Computing SDK code sample 설치
우선 저렇게 세 가지 설치할 파일을 받습니다. 나중에 버전이 달라지면 링크가 또 달라질 것 같긴 하지만, 이 글은 구체적으로 "64-bit 버전의 Ubuntu 10.04에 CUDA 3.1을 설치할 때" 생기는 문제점에 대한 해결책을 적기 위해 쓰고 있는 것이므로 그냥 CUDA 3.1 현재 링크를 그대로 쓰도록 하겠습니다. http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux 이 링크 가서 받으시면 됩니다.

그 링크를 보시면 복잡하게 이것저것 많은데, distro에 따라 다른 걸 받을 수 있게 해 놔서 복잡할 뿐, 딱 세 개만 받으면 됩니다.
Developer Drivers for Linux (256.40), 64-bit 버전
CUDA Toolkit for Ubuntu Linux 9.10, 64-bit 버전
GPU Computing SDK code samples

저렇게 세 개 받아 두세요. 한글 버전으로 깔아둔 파이어폭스에서 다운로드 받으면 아마 홈 디렉토리의 "다운로드"라는 디렉토리에 받게 될 텐데, 나중에 좀 귀찮아질 수 있으니 경로에 한글이 들어가지 않는 다른 디렉토리로 복사해 주세요.

다 받고 나면 터미널을 여시고 다음과 같은 명령을 실행해 주세요.

sudo apt-get purge nvidia-*

그리고 sudo 명령으로 vi나 gedit 같은 편집기를 써서 /etc/modprobe.d/blacklist.conf 파일 맨 뒤에 다음과 같은 내용을 추가해 주세요.
blacklist vga16fb
blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current
blacklist nvidiafb

이제 시스템을 리부팅하고 grub에서 복구 모드(recovery mode)를 선택해서 부팅해 주세요.

그리고 나서 다음과 같은 명령을 실행시켜 주세요.
telinit 3
sudo sh devdriver_3.1_linux_64_256.40.run

이러면 메뉴가 몇 개 뜨면서 설치 과정이 진행됩니다. 깔끔하게 설치가 끝나고 나면 시스템을 리부팅해 주시면 됩니다.

자, 이제 두 번째 툴킷 설치.
이 부분이 젤 쉬워요. 그냥 다음 명령을 내리면 설치가 됩니다.
sudo sh cudatoolkit_3.1_linux_64_ubuntu9.10.run

설치 다 되고 나면 홈 디렉토리의 .bashrc 파일을 열어서 맨 뒤에 다음과 같은 두 행을 추가해 주세요.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH

이제 마지막, SDK 설치 부분이 남았습니다.
SDK 설치 자체는 별로 안 어려워요. 그냥 (이번에는 sudo 하지 말고)
sh gpucomputingsdk_3.1_linux.run
라고 쳐서 실행시키면 끝

근데 문제는 실제 GPU computing 예제들을 컴파일할 때 생깁니다.

홈 디렉토리 밑의 NVIDIA_GPU_Computing_SDK/C 디렉토리로 들어가서
make
라고 치기만 하면 여러 예제 파일이 컴파일이 돼야 하는데 실제로는 그렇게 잘 안 돼요.

몇 가지 문제가 생길 수 있는데, 우선 cannot find -lXi -lXmu -lglut 이런 에러 메시지가 나올 가능성이 높습니다. 패키지가 없는 게 좀 있어서 그런데, 다음과 같은 명령을 내리면 이 문제는 해결됩니다.
sudo apt-get install libxext-dev libxi-dev x11proto-xext-dev libice-dev libsm-dev libxt-dev libxmu-headers libxmu-dev freeglut3-dev libglut3-dev

그리고 cannot find -lGL 이런 에러가 생길 수 있는데, 이건 libGL.so라는 라이브러리 링크 파일이 잘못돼 있어서 그래요. 이 문제는 다음과 같은 명령으로 해결됩니다.
sudo rm /usr/lib/libGL.so; sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so

마지막으로, 컴파일할 때 errors in surface_functions.h 이런 에러가 나올 가능성이 높아요. 이건 g++ 4.4 버전에서 오류를 철저하게 확인하면서 생기는 문제인데, NVIDIA_GPU_Computing_SDK/C/common/common.mk 파일을 열어서 처음 등장하는 NVCCFLAGS 부분을 다음과 같이 수정하면 됩니다.

NVCCFLAGS       := --compiler-options -fpermissive

위와 같은 과정을 거치고 나면 아마 잘 될 겁니다.

혹시 나중에 그냥 nvcc로 cuda 소스코드 컴파일할 때도 errors in surface_functions.h 오류가 발생하면 명령행에서 nvcc --compiler-options -fpermissive 옵션을 주면 문제가 해결될 겁니다.

참고문헌:
http://forums.nvidia.com/index.php?showtopic=172997
http://forums.nvidia.com/index.php?s=&showtopic=171590&view=findpost&p=1080631

P.S. 별 것 아닌 내용이지만 토요일 오후, 집에서 황금같은 3-4 시간을 삽질하면서 배운 비싼 내용입니다. 나 같은 삽질을 할 사람이 얼마나 있을지 모르겠지만, 삽질한 시간이 아까워서 nvidia 포럼에도 올려야 되겠어요.

+ Recent posts