DNN

Install Caffe on Ubuntu 16.04 with GTX 1080, CUDA8.0, CUDNN5.1, NCCL, OPENCV3.1

Small Octopus 2016. 11. 24. 19:57

cudnn v5 이상을 사용해야지 GeForce GTX 1080 Pascal 아키텍쳐을 돌릴 수 있다고 한다.

Ubuntu 16.04.x에 GTX1080 graphic driver, CUDA 8.0, cudnn5.1, nccll, opencv3.1, caffe을 설치해보자.


0. 가장 도움이 된 싸이트는 아래와 같다 Caffe 공식 설치 Wiki다.

아래 싸이트를 따라하면 잘 설치가 된다. 아래 글에서는 아래 설치과정과 다른점 및 부족한 점을 포스팅한다.

https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide


1.우분투 설치

- 부팅 usb 만들기

http://sergeswin.com/1178


-그래픽드라이버문제로 설치로 안넘어갈때 nouveau 라는 기본드라이버가 현 GPU를 지원못해서 orgx..

설치페이지로 못넘어간다.

installing 선택에서 e누르고 nomodeset 설정 아래 링크에 젂혀있음

http://blog.neonkid.xyz/66

grub을 이용해서 recovery mode로 부팅, shift + esc를 한번누르면 grub으로 진입 recovery mode를 선택 할 수 있고

nouveau 를 무시하는 파일을 작성.


- internet 설정

/etc/networking/interfaces 문서에 랜카드 아이디를 젂어줌



2. 그래픽드라이버 설치

몇몇 지인으로 부터 아래방법으로 드라이버가 잘 안깔린다는 소리를 들었다.

이유는 이미 드라이버가 자동으로 깔린 경우가 있다고 한다.

--- 자동으로 깔려있는 경우 설정 방법

https://www.youtube.com/watch?v=-mWl1zJu_hw


--- 직접설치하는 방법

아래 링크에서 설치된 GPU에 맞는 드라이버를 다운 받는다.

http://www.nvidia.com/Download/index.aspx?lang=kr

GEFORCE GTX 1080의 경우는 

GeForce, GeForce 10 Series, GeForce GTX 1080, Linux 64-bit, English(US) 로 검색

375.20 번전이였고 다운 받은 파일은 NVIDIA-Linux-x86_64-375.39.run 이였다.

기존 NVIDIA 드라이버 제거

$ sudo apt-get purge nvidia*

CTRL+ALT+F1~F6 로 커멘드창모드로 진입, 그래픽모드로 돌아올때는 CTRL+ALT+F7

커멘트 창 모드에서 로그인한다.

끊현재동작되고 있는 그래픽 인터페이스를 끊다.

$ sudo service lightdm stop

$ sudo service gdm stop

드라이버 다운 받은 폴더로 이동

$ sudo chmod 755 NVIDIA-Linux-x86_64-375.20.run

$ sudo ./NVIDIA-Linux-x86_64-375.20.run

$ reboot

만약 설치된 드라이버를 지우고 싶다면 

$ sudo ./NVIDIA-Linux-x86_64-375.20.run --uninstall


3. CUDA8.0 설치

https://developer.nvidia.com/cuda-downloads 접속

Linux > x86_64 > Ubuntu > 16.04 > deb(local) > Download

cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb 을 다운 받았다.

$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb

$ sudo apt-get update

$ sudo apt-get install cuda


cuda 제거

https://askubuntu.com/questions/530043/removing-nvidia-cuda-toolkit-and-installing-new-one


4. CUDNN 설치

https://developer.nvidia.com/cudnn 접속 

Download > Log in > Survey > cuDNN v5.1 for Linux

cudnn-8.0-linux-x64-v5.1.tgz 을 다운 받았다.

$ tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz

$ sudo cp ./cuda/include/* /usr/local/cuda-8.0/include/

$ sudo cp ./cuda/lib64/* /usr/local/cuda-8.0/lib64/

version check

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

5. NCCL 설치 - 여러 GPU을 동시에 같이 쓸수 있게 해준단다.

https://github.com/NVIDIA/nccl에서 cuda 8.0 버전을 다운로드 압축 풀고 

$ cd nccl

$ make /usr/local/cuda-8.0 test

$ sudo make /usr/local/nccl/lib install

$ sudo cp ./build/include/* /usr/local/cuda-8.0/include/

$ sudo cp ./build/lib/* /usr/local/cuda-8.0/lib64/

cuda 디렉토리에 추가해주었어다.

PATH 설정을 해주고 nccl/build/test/singles에서 

$ ./all_reduce_test 10000000

을 실행해서 경로가 잘 설정 되었는지 확인 하자.


6. OpenCV 3.1 설치

우분투에 기본으로 설치되있던 opencv를 안지우는게 좋다 . 지우다 그래픽드라이버를 날릴 수 있다.

컴파일 중 오류가 많이 나서 여러 블로그에 나온 내용을 합쳐서 성공한 방법이다.

$ sudo apt-get update

$ sudo apt-get install --assume-yes build-essential cmake git

$ sudo apt-get install --assume-yes build-essential pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy

$ sudo apt-get install --assume-yes libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev

$ sudo apt-get install --assume-yes libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

$ sudo apt-get install --assume-yes libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev

$ sudo apt-get install --assume-yes libvorbis-dev libxvidcore-dev v4l-utils

$ sudo apt-get install gtk2.0

$ sudo apt-get install libopencv-dev build-essential checkinstall cmake pkg-config yasm libtiff5-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg

$ mkdir OpenCV

$ cd OpenCV

$ sudo git clone https://github.com/Itseez/opencv.git

$ cd opencv

$ mkdir release

$ cd release

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=OFF -D WITH_OPENGL=ON ..

Qt가 에러나서 OFF했다.

--- cmake 현재 활성화된 파이썬에 opencv 설치 방법 추가 및 cuda 빌드를 끄니까 빌드 빨라진다

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D UILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=OFF -D WITH_OPENGL=ON  -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") -D PYTHON_EXECUTABLE=$(which python) -D PYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..



$ make -j8

$ sudo make install

$ sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

$ sudo ldconfig

$ sudo apt-get update

버전 확인 

$pkg-config --modversion opencv


7. 환경변수 설정

10번 cmake를 이용한 방법이 더 간단하다.!!!

폴더 익스플로어에서 CTRL+h 을 누르면 숨길 파일이 보인다. .profile 을 연다. 맨 아래 줄에 추가

# cuda & cudnn

export CUDA_HOME=/usr/local/cuda

export PATH=$CUDA_HOME/bin:$PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64

# caffe

export CAFFE_HOME=~/caffe

export PYTHONPATH=$CAFFE_HOME/python:$PYTHONPATH

# digits

export DIGITS_HOME=~/digits


8. CAFFE 빌드

https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide#the-gpu-support-prerequisites

위 홈페이지 내용을 따라하면 된다. 

Make 파일과 Make.config 파일을 수정해줘야한다.  Make.config 만 블로깅 한다. #는 주석 처리 된것은 뺏으며 수정 된 것은 아래와 같다.

USE_CUDNN := 1

USE_NCCL := 1

USE_OPENCV := 1

USE_LEVELDB := 1

USE_LMDB := 1

OPENCV_VERSION := 3

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \

-gencode arch=compute_20,code=sm_21 \

-gencode arch=compute_30,code=sm_30 \

-gencode arch=compute_35,code=sm_35 \

-gencode arch=compute_50,code=sm_50 \

-gencode arch=compute_50,code=compute_50 \

-gencode arch=compute_61,code=compute_61

BLAS := atlas

PYTHON_LIB := /usr/lib

WITH_PYTHON_LAYER := 1

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/share/OpenCV/3rdparty/lib/

위에 홈페이지 내용 잘 읽어보고 Make파일 변경 및 3rdparty 잘 설치! 이제 카페 빌드 하면 끝!!

$ make all -j8

$ make test

$ make runtest

$ make pycaffe      -should be finished already, so you can omit this one

$ make distribute

$ python

>> import caffe


9. ETC

ubuntu 16.04 에서는 컴파일러가 이전 것과 많이 달라져서 이전에 만들어진 패키지와 잘 안 물릴수 있다고 한다.

나는 modprobe 에러가 한번 났었는데 nccl 경로문제였다.

https://github.com/BVLC/caffe/wiki/GeForce-GTX-1080,---CUDA-8.0,---Ubuntu-16.04,---Caffe


10. cmake build 

mkdir build
cd build
cmake ..
make all
make install
make runtest

- options

https://github.com/BVLC/caffe/pull/1667


11네트웍 추가하는법



I've solved the problem adding

# The secondary network interface
auto enp0s8
iface enp0s8 inet dhcp

to /etc/network/interfaces

and restarting the network using sudo service networking restart.

Now, here is the result of

$ ifconfig enp0s3    Link encap:Ethernet  HWaddr 08:00:27:47:52:7b  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe47:527b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6334 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7656 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2741526 (2.7 MB)  TX bytes:10824219 (10.8 MB)

enp0s8    Link encap:Ethernet  HWaddr 08:00:27:3e:1e:bf  
          inet addr:10.0.3.15  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe3e:1ebf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1730 (1.7 KB)  TX bytes:1882 (1.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2143 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:443165 (443.1 KB)  TX bytes:443165 (443.1 KB)