레이블이 caffe인 게시물을 표시합니다. 모든 게시물 표시
레이블이 caffe인 게시물을 표시합니다. 모든 게시물 표시

2018년 1월 31일 수요일

Tyan server에 Ubuntu server 16.04.03 LTS설치, 그래픽드라이버, docker, deep learning 이미지 설치하기

목록
- 1. Ubuntu server 설치
- 2. 그래픽드라이버 설치(NVIDIA)

- 3. docker 설치
- 4. Nvidia docker 설치
- 5. Deep Learning용 image설치

1. Ubuntu server
1. ubuntu 사이트(https://ubuntu.com/download/server)에 서버버전 iso파일 다운로드하여 DVD에 굽기(16.04.3-server amd64 bit 사용함)
2. BIOS화면에서 F2/Del을 눌러 BIOS진입 -> 부팅순서를 DVD로 변경 후, 재부팅
3. ubuntu설치하기
  a. 언어는 English.
  b. network의 경우, enp13s0f0과 0f1이 있었는데, 0f0은 부팅용이라서 0f1을 LAN 케이블에 물리고 작업함.

  c. Hostname은 컴퓨터의 이름, User name은 사용자 이름이므로 주의해서 입력.
  d. Partition disk는 디스크를 지우고, auto로 할당함.
  e. 자동업데이트는 No automatic updates선택
  f. Server유형은 OpenSSH만 추가설치 (총 2개가 선택됨)
  g. 나머지는 모두 default값 사용함.
4. network 설정하기
  a. ifconfig -a로 네트워크 이름 확인(우리의 경우는 3.b.의 것 2개)
  b. sudo vi /etc/network/interfaces를 열고
    auto <네트워크이름>
    iface <네트워크이름> inet static
    address <IP주소입력>
    netmask <서브넷마스크>
    gateway <게이트웨이>
    dns-nameservers <DNS, 두개 이상은 공백으로, 주로 168.126.63.1 168.126.63.2 8.8.8.8 씀>
  c. /etc/init.d/networking restart 입력 후, 네트워크 적용안되면 reboot입력하여 재부팅
  d. ping 8.8.8.8로 동작확인
5. 프로그램 설치
  sudo apt-get update
  sudo apt-get install openssh-server

6. 원격접속용 컴퓨터에 putty설치(https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 후, IP넣고 접속.

2. 그래픽드라이버 설치(NVIDIA)
<참고: http://www.linuxandubuntu.com/home/how-to-install-latest-nvidia-drivers-in-linux>
1. 기존 NVIDIA 드라이버 삭제
 sudo apt-get purge nvidia*
2. 최신 그래픽 드라이버  버전 확인
 https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
 위 사이트에서 nvidia-graphics-drivers-*** 의 숫자 확인 (ctrl+f활용)
 http://www.nvidia.com/object/unix.html 에서 소유한 GPU가 위 버전 지원하는지 확인(해당버전 클릭 후, Supported Product tab누르면 됨.
  ex) TITAN Xp는 390가능
3. repository update
  sudo add-apt-repository ppa:graphics-drivers (시간 오래 걸림, 약 10분)
  sudo apt-get update
4. 그래픽카드 다운로드 및 설치
  sudo apt-get install nvidia-390 (390대신 2에서 찾은 번호 입력, 시간 오래 걸림, 약 1시간)
  * 만약, Unable to locate package nvidia-390이 나온다면,https://hiseon.me/linux/ubuntu/install_nvidia_driver/의 방법을 따라함.
5. reboot 후, 버전 확인
  reboot 혹은 sudo reboot(putty로 원격 접속한 경우)
  lsmod | grep nvidia 혹은 lsmod | grep nouveau
  위 명령어로 뭐라도 뜨면 됨.
6. 그래픽 드라이버 자동 업데이트 방지
  sudo apt-mark hold nvidia-390

3. docker 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-3.html>
o docker 이해하기
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html>
- docker란 container가 동작하게끔 하는 가상화 플랫폼
- 가상화 방식
  -- OS가상화 - VMware나 VirtualBox; host OS위에 guest OS를 돌리기에 편하지만 느림.
  -- 프로세스 격리를 통한 가상화 - linux container; host OS위에 docker platform이 존재하고, 그 위에 library와 app이 개별적으로 돌아감. OS별도 설치는 불가능하지만 빠름.
- container: 이 안에서 실행하는 프로세스 들은 서로 영향을 주지 않고 동작. apt-get, yum등 자유롭게 설치가능. 설치시간도 매우 빠름(~10초).
- image: 특정 시점의 상태를 저장해놓은 변하지 않는 상태(가상CD의 image같은 것), image는 그것만으로 동작가능함(즉, 다운받아서 쓰면 돌아감)
- layer: image A에서 특정 lib B설치시 image C = A + B로 구성되어 효율적으로 동작하도록 만든 체계.
- client와 server(host): client에서 명령어 실행 -> docker daemon이 받아서 container에 toss -> 실행 결과 docker daemon에 toss -> client에 출력

o docker 다운로드 및 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html>
1. docker 설치 및 버전확인 - 너무 최신버전이면 nvidia-docker가 설치되지 않기에 다음을 추천
  <참고: https://docs.docker.com/install/linux/docker-ce/ubuntu/>
  a. 옛날꺼 지우기
  sudo apt-get remove docker docker-engine docker.io

  b. repository를 이용한 설치
  sudo apt-get update
  apt가 HTTPS사용토록 허락
  sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  c. docker GPG키 추가
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  d.
  sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  sudo apt-get update

  e. 그냥 최신버전을 설치하고프면(비추)
  sudo apt-get install docker-ce

  e. 만약 특정버전을 설치하고프다면
  sudo apt-get install docker-ce=17.12.0~ce-0~ubuntu
  apt-cache madison docker-ce
  으로 가능 버전 확인(nvidia-docker2는 docker 17.09.0까지만 지원)

  f. 버전확인
  sudo docker run hello-world
  docker version

  g. root아닌 user로 docker실행하기
  sudo usermod -aG docker 현재사용자ID

3. nvidia-docker설치
   <참고: https://github.com/NVIDIA/nvidia-docker>
    # 기존 nvidia-docker삭제
  docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
  sudo apt-get purge -y nvidia-docker

# repo설정
  curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
  curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  sudo apt-get update

# 설치
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

** 만약 위에 것을 하다가 nvidia-docker2가 docker-ce 버전이 맞지않아 설치안된다고 나오면, docker와 nvidia-docker 버전이 서로 맞지않기에 이전 docker를 삭제, 재설치해야됨.
아래는 설치한 docker 삭제방법
<참고: https://stackoverflow.com/questions/31313497/how-to-remove-docker-installed-using-wget>
sudo apt-get purge -y docker-engine
sudo apt-get autoremove -y --purge docker-engine
sudo apt-get autoclean
sudo apt-get purge -y docker-engine docker docker.io docker-ce
sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce

sudo rm -rf /var/lib/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo apt-get autoclean
** 잘되면 위의 것은 넘어가기

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

4. Deep Learning용 image설치
a. CUDA, cudnn, tensorflow, caffe, theano, pytorch, keras, opencv가 설치된 image
  https://github.com/ufoym/deepo << CUDA, cudnn, tf, caffe, theano, pytorch, keras, opencv

- image 다운로드
docker pull ufoym/deepo 혹은
docker pull ufoym/deepo:py27

- 동작테스트
nvidia-docker run --rm ufoym/deepo:py27 nvidia-smi
==> nvidia-smi결과인 GPU상태들이 나옴.
nvidia-docker run -it ufoym/deepo:py27 bash
python
import tensorflow
import keras
==> 문제없이 되면 사용하면 됨.

참고:
pyTorch의 경우 shared memory를 사용함. 이 경우 늘려줘야 됨.
nvidia-docker run -it --ipc=host ufoym/deepo:py27 bash

참고: 저장공간 share between host machine and container
nvidia-docker run -it -v /host/data:/data - /host/config:/config ufoym/deepo:py27 bash
container의 /data 에서 host의 /host/data가 보이게 됨.

참고:
python commandline에서 Ctrl+D <== exit from python commandline

참고:
--rm 옵션으로 container가 종료 후, 삭제됬음.
interactive하게 쓰는 건 다음과 같이 입력
nvidia-docker run -it ufoym/deepo:py27 bash

b. caffe, opencv만 설치하고싶다면
https://github.com/w102060018w/caffe-opencv-cuda8.0-docker 의 이미지 사용

2016년 12월 2일 금요일

caffe, multi gpu 사용시 batch size 문제와 속도 저하 문제

의문
single GPU일 때, 만약 batch size로 10을 썼더니 GPU 효율이 99%였다고하자. GPU가 두개라면 batch size를 20으로, GPU가 4개라면 batch size를 40으로 바꾸어주어야 모든 GPU의 효율이 99%가 될까? 아니면 그냥 10으로 두어도 caffe가 알아서 활용할까?

교과서 답
참고: https://github.com/BVLC/caffe/blob/master/docs/multigpu.md
현재 multi-gpu는 training에만 지원함.
실행 옵션으로 --gpu=0,1 혹은 --gpu=all로 설정여부를 선택함.
하지만 solver에서 혹은 caffe가 batch사이즈를 보고 잘라서 넣지는 않음.
즉, train_val의 batch size를 늘려주고, 이에따라 solver도 수정하여야 함.
참고로 GPU를 두개달면 최고 ~1.8배까지 빨라지고 4개를 달면 ~3.5배까지 빨라짐.

그런데 실제로는?
그런데... 그냥 돌려도 활용을 한다(사실 하는 것처럼 보인다). 하지만 실제로 학습속도를 확인하면 느리다.
그래서 batch를 2배(혹은 1.5배)로 해서 돌리면 out of memory가 난다.
개인적으로 NVCC를 enable하지 않았다면 gpu하나로 돌리는 것이 더 빠르다고 생각한다.

추후 업데이트
이후 여러 환경에서 실험을 다시함.
실험 PC2: TITANX, caffe0.14.0, cuda7.5, cudnn4.1:
    23초 / 49 images train
실험 PC3: TITANX, caffe1.0.0, cuda8.0, cudnn5.1:
    20초 / 49 images train
실험 PC4: TITANXx2, SLI, PCI1/3에 설치, caffe1.0.0, cuda8.0, cudnn5.1, nvcc:
    22초 / 49 images train
즉, SW는 최신으로 업데이트하면 빨리지지만 multi-gpu는 시키는대로 HW 및 SW를 설치하고 실험해도 느려짐.

실제로 이와 관련된 질문이 꽤 있음.
https://groups.google.com/forum/#!topic/digits-users/gn3MQ9QcxMY

2016년 7월 6일 수요일

caffe, blob size exceeds INT_MAX

caffe 사용시 만날 수 있는 에러
<참조: https://github.com/BVLC/caffe/issues/3084>에 따르면 HDF5 Layer에 나타난다고 하는데, 나한테는 일반 conv. layer에서 나타남.

의미는 shape[i] <= 2147483647 (INT_MAX인듯) 이하여야 된다는 이야기이다.

=> shape[i]를 줄이는 가장 쉬운 방법은 batch size를 줄이는 방법이다.


2016년 6월 26일 일요일

caffe, Iteration loss vs Train/Test output loss

caffe에 loss를 하나만 output으로 한 경우에도 Iteration의 loss와 Train net output의 loss가 다른 경우가 있다.
예:
I0627 09:46:44.733276 19844 solver.cpp:236] Iteration 3020, loss = -4.39805e+12
I0627 09:46:44.733402 19844 solver.cpp:252]     Train net output #0: loss = 7973.01 (* 1 = 7973.01 loss)
I0627 09:46:44.733418 19844 sgd_solver.cpp:106] Iteration 3020, lr = 0.001

왜그럴까?
<참조: https://groups.google.com/forum/#!topic/caffe-users/WEhQ92s9Vus>
The `net output #k` result is the output of the net for that particular iteration / batch while the `Iteration T, loss = X` output is smoothed across iterations according to the `average_loss` field. Here is the relevant solver code:

즉, net output #k: 의 결과는 해당 iteration의 batch의 결과이고, Iteration T, loss의 결과는 한번의 epoch 정도에 대한 smoothing된 결과로써 Iteration T를 더 믿으면 될 것 같다.

2016년 2월 26일 금요일

python exit code 139

caffe를 사용해서 모델을 학습할 때, 중간중간에 snapshot을 찍도록 되어있다.

그런데 snapshot을 찍을 때, Process finished with exit code 139를 띄우며 죽는 경우가 있는데, 이때 snapshot으로 생긴 파일크기는 0.

참고: http://stackoverflow.com/questions/23704040/exit-code-139-when-perfroming-image-subtraction

이 문제의 원인은...
"attempt to access a virtual address which is not in your address space" 이라고 한다.
즉, out of memory.

해결책은...
메모리 사용량을 줄이는 수 밖에 없다.


2016년 2월 16일 화요일

pycaffe로 logging하기

https://github.com/BVLC/caffe/pull/89 참고

1. 러닝시 발생하는 log를 파일로 가도록 redirection.
GLOG_logtostderr=1 ./build/examples/train_net.bin solver.prototxt 2> caffe.log
혹은 python 창에 뜨는 log를 copy & paste하여 파일에 저장함.(caffe.log)
단 이때, 저장되어야 할 log는 'I0217 ~~~'로 시작하는 caffe에서 발생한 log여야함. 다른 print로 발생한 log는 삭제해야됨.

2. 파일을 parsing하여 tr data의 loss와 vl data의 acc로 별도 파일로 만들어 냄.
parse_log.sh caffe.log [init_iter=0] [test_interval=1000]
위의 것을 써도 되고 혹은 python버전을 사용
https://github.com/BVLC/caffe/blob/master/tools/extra/parse_log.py

아님 caffe/tools/extra에 있음.

3. 각 파일을 draw
plot_training_log.py.example을 사용하면 됨.

결론:
1.번을 수행 후, caffe/tools/extra/plot_training_log.py.example을 사용하면 됨.

2015년 12월 21일 월요일

linux, caffe, opencv, tensorflow 설치하기(DIGITS 설치제외)

문제
linux, caffe, opencv, tensorflow를 설치하자.

<참고: http://thebeautifulfuture.tistory.com/68>
<참고: https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide>
<참고: 이전 정리한 내용(old), 새롭게 업데이트한 내용(new)>

해결 (updated on 2018.04.20)
0. linux를 설치(new), 약 30분 소요.
그냥 설치하면 될 것 같지만, linux version에 따라 caffe, tensorflow, opencv를 설치할 수 있는 버전이 달라지는 것 같다. 물론 최신 버전이면 좋을 듯하다.
-> linux 16.04.xx LTS를 설치
-> Install 보단 Try Ubuntu로 집입 후 Install Ubuntu를 추천
-> Download updates, Install third-party software는 uncheck후 진행.

->필요한 옵션 설치 및 세팅
- network 커넥션: IP, netmask등 세팅 -> 인터넷 열어서 확인하기(혹은 ifconfig로 확인)
- 한글 사용: 참고: http://luckeex.tistory.com/289
  -- System Settings -> Language Support -> 언어탭에서 한국어를 맨위로 올린다.
  -- System Settings -> Language Support -> 맨 아래 Keyboard input method system: IBus로 선택
  -- System Settings -> Text Entry -> + -> ibus 입력해서 한국어(ibus)를 추가함.
  -- Win키+space로 우상단 En->한국어 바뀜을 확인.
  -- (안해도 됨) System Settings -> Keyboard -> Typing -> Alter. Char. Key -> Alt Left

-> 기타 설치 추천 소프트웨어: Meld(winmerge같은 프로그램)

* 혹시 ubuntu설치 후, PCIe Bus Error: severity=Corrected 와 같은 에러가 생긴다면
<https://unix.stackexchange.com/questions/327730/what-causes-this-pcieport-00000003-0-pcie-bus-error-aer-bad-tlp>
sudo gedit /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 찾아서 아래와 같이
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nommconf" 밑줄부분 추가
저장.

1. 그래픽 드라이버를 설치(new)
그냥 설치하지 않아도 기본적으로 설치가 된다. 혹은 아래를 따라하면 설치가 된다.
System Settings->Software&Updates->Additional Drivers -> choose Using NVIDIA binary driver -> apply change
만약 여러개의 드라이버가 보인다면, 하나만 남겨두고 제거한 후, 아래를 수행하자(동시에 여러개가 떠 있는 경우, 경우에 따라 원치않은 드라이버를 선택하여 설치될 수 있다).

혹은 그냥 설치하고 싶다면,
 >> http://www.linuxandubuntu.com/home/how-to-install-latest-nvidia-drivers-in-linux
 sudo apt-get purge nvidia*
 sudo add-apt-repository ppa:graphics-drivers
 sudo apt-get update

 sudo apt-get install nvidia-375

 lsmod | grep nvidia

2.3.4의 다운로드를 한번에 걸면 효율적.

2. CUDA install(new)
https://developer.nvidia.com/cuda-downloads 에 접속하기.

Linux->x86_64->Ubuntu0>16.04->deb(local)->download
최근에는 CUDA 9.1까지 나왔기에 8.0은 우하단 Legacy에 가야 받을 수 있음.

다운받은 폴더에서
`sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb`
`sudo apt-get update`
`sudo apt-get install cuda`

https://docs.nvidia.com/deploy/cuda-compatibility/index.html
CUDA-GPU compatibility check.
Pascal - 1080TI, 1080
Maxwell - TitanX

* 만약 dependency 에러가 생기면서 막줄이 안된다면 아래 참고
https://askubuntu.com/questions/598607/package-dependency-problem-while-installing-cuda-on-ubuntu-14-04
* sudo apt-get update -> Invalid 'Date' entry in Release file /var/lib/apt/lists/_var_cuda-repo-~~_Release
-> change date format to UTC
ex:) Date: 2016-09-23T15:09:35-07:00
If still get error, no solution.

-끝-
version check는 
'ls /usr/local/cuda/lib64'
입력하여 확장자를 볼 경우, ~~~.so.8.0 식이라면 cuda 8.0이 설치된 것임.
3. CUDNN install(new)
https://developer.nvidia.com/cudnn

Download -> Log in -> Survey (pass) -> Download cuDNN v5.1 for CUDA 8.0 -> cuDNN v5.1 Library for Linux

'tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz' (later version is not verified)
'sudo cp ./cuda/include/* /usr/local/cuda-8.0/include/'
'sudo cp ./cuda/lib64/* /usr/local/cuda-8.0/lib64/'

-끝-
version check는
'ls /usr/local/cuda/lib64/libcudnn*'
후 확장자를 봐서, ~~.so.5.1.5이면 5.1 버전임.

the path of CUDA and CUDNN will be set at 7.

4. NCCL install(new)
https://github.com/NVIDIA/nccl
master가 아닌 8.0으로 받을 것.

제약조건은 CUDA7.0 + Kepler GPU 이상이야 함.
(TITAN X Maxwell, TITAN 1080 Pascal, TITAN X Pascal이라면 여기에 해당됨.)

'unzip nccl-8.0.zip'
'cd nccl-8.0'
'make CUDA_HOME=/usr/local/cuda-8.0 test -j28'
'sudo make /usr/local/lib install'

확인하는 방법은.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./build/lib

./build/test/single/all_reduce_test 10000000
후 테이블처럼 숫자들이 나오면 성공.
 
=> 만약에 여기까지 설치 후, nvidia-smi시 failed to initialize nvml driver/library version mismatch 이 나온다면,
그냥 reboot하면 보통 해결됨. 



If you will use Anaconda, then install below in Conda environment.


5. OpenCV 3.1 설치 (new)
5.1 or 5.2
5.1 Just download and use it on python. (easy)
sudo apt-get install libopencv-dev python-opencv

5.2 Download and compile
opencv는 ubuntu의 경우 apt-get으로 설치가능하다.
귀찮으니 sudo su로 root로 실행하자.
sudo su

// 업데이트 및 다운로드
a.'apt-get update' and 'apt-get upgrade'
b.'apt-get install --assume-yes build-essential cmake git build-essential pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev v4l-utils'

h.'apt-get install gtk2.0'

i.'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'

// 다운로드 폴더로 이동
'cd ~/Downloads'
'cd OpenCV'
'wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip'

'unzip opencv.zip'
'cd opencv-3.2.0'
'mkdir release'
'cd release'

// make 전 cmake로 conf를 설정함(아래 명령어 따라하면 됨).
// QT가 off임.
'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 ..'

* 만약 linux/videodev.h 파일이 없다고 하면
sudo apt-get install libv4l-dev
cd /usr/include/linux
sudo ln -s ../libv4l1-videodev.h videodev.h
* 만약 sys/videoio.h 파일이 없다고 하면
위의 옵션에 WITH_V4L=OFF 으로 수정 and use below instead of upper cmake command.
'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=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=OFF -D WITH_OPENGL=OFF ..'

// make 후, 설치
grep ^processor /proc/cpuinfo | wc -l CPU의 물리적 코어 수를 확인 후, make시에 make -j core수를 적어주면 빠르다.



'make -j8' // use cpu's 8 cores 활용 2h~

'sudo make install -j8'
// 다음 라인은 끝에 '를 포함하여야 함.
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'
버전이 나옴.

6. DIGITS 설치 및 사용(old)
 - 1.1. 설치
    -- https://developer.nvidia.com/digits 사이트보고 그냥하면 됨. 쉬움.
    -- install link
     --- https://github.com/NVIDIA/DIGITS/blob/master/docs/UbuntuInstall.md
 - 1.2. 사용
    -- https://github.com/NVIDIA/DIGITS/blob/master/docs/GettingStarted.md 에 가면, 사용 설명서가 있음.
    -- ./runme.sh 서버 실행하기
    -- 1.2.1 DIGITS 서버에 접속하기
       --- http://localhost/ 혹은 http://localhost:5000/ 혹은 http://localhost:34448/
    -- 1.2.2 데이터 셋 선택
    -- 1.2.3 모델 선택
    -- 1.2.4 학습

1.5 Anaconda install

7. 환경변수 설정

/etc/profile 파일의 맨 위에 다음을 추가하고 저장 후, 재로그인하면 된다.
sudo gedit /etc/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  

# nccl  
export NCCL_ROOT_DIR=/usr/local/nccl  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/nccl/lib  

# digits  
export DIGITS_HOME=~/digits
________________________________________________________________  


8. caffe 설치(new)

// BVLC/caffe에서 복사해옴. 먼저 관련 라이브러리 업데이트

sudo apt-get update

sudo apt-get upgrade
<yochin>
sudo apt-get install -y build-essential cmake git pkg-config

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install -y libatlas-base-dev 

sudo apt-get install -y --no-install-recommends libboost-all-dev

sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

# (Python general)
sudo apt-get install -y python-pip

# (Python 2.7 development files)
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

# (or, Python 3.5 development files)
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-numpy python3-scipy

# (OpenCV 2.4)
sudo apt-get install -y libopencv-dev

(or, OpenCV 3.1 - see the instructions below --> skip)
 
// caffe 다운로드 
'git clone https://github.com/BVLC/caffe'

 
// 사용자권한을 바꿈.
chown -R ID:ID caffe (ID is yourid)
cd caffe
cp Makefile.config.example Makefile.config
복사한 후, 아래와 같이 되어있는지 확인한다. 없으면 추가하거나 수정한다. 앞부분에 아래와 같이 #이 없어야 함.

USE_CUDNN := 1
USE_NCCL := 1
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
OPENCV_VERSION := 3
// \ 다음에 space 없어야 됨.
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/

// hdf5용 링크 교체
cd /usr/lib/x86_64-linux-gnu
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so 

터미널창 새로 열고
cd caffe/python
for req in $(cat requirements.txt); do pip install $req; done

cd ..
// Makefile 수정 for Ubuntu16.04
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)을
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)으로 교체
 
# LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf leveldb snappy \
  lmdb boost_system boost_filesystem hdf5_hl hdf5 m \
  opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio 
으로 교체
 
// caffe build
cd /caffe
make all -j8
make test
make runtest
make pycaffe
make distribute


에러없이 완료되면 성공한 것!
 
이후, caffe 폴더를 ~/caffe로 이동. 

caffe -version을 입력하면 버전을 확인할 수 있다.
 
9. PyCharm설치 및 module연결
https://www.jetbrains.com/pycharm/
Download -> Community -> Save -> 원하는 곳에 압축풀기(~/)
./bin/pycharm.sh
로 실행 
간단한 테스트 프로젝트 및 python코드 생성 
-Test Code-
____________________________________________________________________
# coding=utf-8
__author__ = 'yochin'
import sys
sys.path.append('/usr/lib/python2.7/dist-packages')
import numpy as np
import caffe

if __name__ == "__main__":
  caffe.set_device(0)
  caffe.set_mode_gpu()
____________________________________________________________________________________________

 - ImportError: No module named caffe가 뜬다면  caffe모듈을 python이 읽을 수 있도록 설정해야 됨.

/caffe에 _caffe.so가 있는지 확인 후,
/etc/profile 에 
PYTHONPATH에 caffe 경로가 추가되어있는지 바르게되어있는지 확인

아니면
export CAFFE_HOME=~/caffe
export PYTHONPATH=$CAFFE_HOME/python:$PYTHONPATH
과 같이 설정함.

10. Tensorflow 설치하기
tensorflow는 source부터가 아닌 binary를 그냥 사용하기로 함.
https://www.tensorflow.org/get_started/os_setup 에 접속하여 Pip install을 따라하면 되는데 다음과 같다.

'sudo apt-get install python-pip python-dev'
'sudo pip install tensorflow-gpu'

if you want to install a specific version of tensorflow, use below commnad
'sudo pip install tensorflow-gpu==1.2.0.rc0'

if you want to install by compiling, link below
http://goodtogreate.tistory.com/entry/TensorFlow-GPU-%EB%B2%84%EC%A0%84-%EC%9A%B0%EB%B6%84%ED%88%AC-1604%EC%97%90-%EC%84%A4%EC%B9%98-%ED%95%98%EA%B8%B0?category=620143

11. PyCharm에서 TF연결 및 테스트하기

https://www.tensorflow.org/get_started/os_setup#test_the_tensorflow_installation
를 따라하자
$ python...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>>


8. caffe 설치/업데이트(old)
 - a. https://github.com/BVLC/caffe 에서 우측 [Clone or download]를 눌러 zip파일로 다운로드 및 압축풀기 (단 설치경로는 DIGIT내의 caffe와 다른 곳에 함, 만약에 이전에 설치한 caffe가 있다면, 그 caffe는 압축하여 백업으로 보관하고 아래 작업하기).
 - b. ubuntu에서 설치하는 법 보고 따라하기
     http://caffe.berkeleyvision.org/install_apt.html (일반적인 인스톨)
     http://caffe.berkeleyvision.org/install_apt.html (ubuntu에서 인스톨)

     -- 먼저 관련 라이브러리들 다운받기(업데이트하는 경우는 패스)
       .sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
       .sudo apt-get install --no-install-recommends libboost-all-dev   (BOOST library)
       .sudo apt-get install libatlas-base-dev   (ATLAS BLAS library)
       .sudo apt-get install python-dev     (Python interface library)

     -- CUDA도 설치/업데이트
       .CUDA는 홈페이지에서 다운받기 및 설치(https://developer.nvidia.com/cuda-downloads)
         .. 버전체크는 콘솔창에 nvcc --version
         .. 다운로드시 cudnn과의 버전 매칭은 다음과 같음.
                   * CUDA 7.5 & cudnn 4
                   * CUDA 8 & cudnn 5
         ..Ubuntu 14.04 deb(local) download(in my case)
         .. installation command
  1. 'sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb` 혹은 `sudo dpkg -i cuda-repo-ubuntu1404-8-0-rc_8.0.27-1_amd64-deb`
  2. `sudo apt-get update`
  3. `sudo apt-get install cuda`

       .cuDNN은 (https://developer.nvidia.com/cudnn)에서 다운로드 후, copy만 해주면 됨.  (include -> /usr/local/cuda/include, lib64 -> /usr/local/cuda/lib64)
       .sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev (14.04는 다음도 추가)

  - http://caffe.berkeleyvision.org/installation.html#compilation
      Makefile.config.example을 Makefile.config파일로 복사한 후, 열어서 자신의 컴퓨터에 맞게 경로등을 바꾸어준다.
-> uncomment: USE_CUDNN
-> CUDA_Path
->Anaconda path
        .make all
        .make test
        .make runtest
 (한참 기다려야 됨)
        .make pycaffe
        .make matcaffe
        .make distribute <외부에 배포시 필요함.안해도 됨>
3. Python에서 caffe 테스트하기
 - ImportError: No module named caffe
 - caffe모듈을 python이 읽을 수 있도록 설정해야됨.

PYTHONPATH=caffe/python:$PYTHONPATH 하면 됨. /caffe에 _caffe.so가 있으면 됨.

ex) /etc/profile 맨 위에 아래 추가-----------
export ANACONDA_HOME=${HOME}/anaconda2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/lib64
export CAFFE_HOME=${HOME}/caffe
export PATH=/usr/local/cuda-7.5/bin:$PATH
export PYTHONPATH=${HOME}/caffe/python:$PYTHONPATH
---------------------------------------

-Test Code-
# coding=utf-8__author__ = 'yochin'
import sys
sys.path.append('/usr/lib/python2.7/dist-packages') import numpy as np import caffe import caffe.draw
if __name__ == "__main__":
    caffe.set_device(0)
    caffe.set_mode_gpu()
* error case
>>> error: ‘CUDNN_PROPAGATE_NAN’ was not declared in this scope cudnn header의 path체크. 맞다면 cudnn버전 문제일수 있음.
>>> fatal error: python.h: no such file or directory
빌드시에 python 경로설정문제로 Makefile.config에서 PYTHON_INCLUDE의 경로가 맞는지 확인할 것.
>>> error while loading shared libraries: libhdf5_hl.so.10: cannot open shared object file: No such file or directory
LD_LIBRARY_PATH가 제대로인지 체크할 것.