AWS GPU 인스턴스에 Caffe(py-faster-rcnn) 설치

2016-09-16 00:00:00
aws gpu caffe

AWS의 GPU 인스턴스 g2.2xlarge에 CUDA와 OpenCV, Caffe(py-faster-rcnn)를 차례로 설치하는 과정입니다.

전체적으로 2시간 이상 정도 소요됩니다.

저도 시행착오를 많이 겪은 만큼 중간에 제대로 설치 되었는지 체크하는 과정이 중요합니다.

Caffe 설치시 CUDA 7.5버전과 cuDNN 5.1버전을 이용했습니다.

기본적인 패키지 설치는 대부분 비슷합니다. CUDA 설치 시에 대부분이 의존성 설치로 되었으므로 항목을 놓치는 것만 주의하시면 되겠습니다.

저는 프로젝트마다 인스턴스를 생성하기에 virtualenv를 구성하지 않았습니다.

pip과 matplotlib가 caffe 컴파일 시 충돌이 일어나는 것 같아서 패키지 설치를 진행하였습니다.

2016년 9월 16일에 설치하였습니다.


전체적으로 설치가 오래 걸리므로 screen을 이용하시는 것이 좋습니다. 세션이 중간에 끊겨도 설치가 이어집니다.

screen -ls
screen -d -R newname

SFTP 등을 이용하여 CUDA 다운로드 패키지를 EC2로 전송합니다.

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb

패키지 업데이트 & 업그레이드를 진행하여 CUDA 패키지를 추가합니다.

sudo apt-get update
sudo apt-get upgrade

Git과 개발 도구를 설치합니다.

sudo apt-get install git
sudo apt-get install python-pip python-dev
sudo apt-get install gcc g++ gfortran

드라이버가 포함된 패키지입니다. 이 과정을 건너뛸 경우 CUDA 설치가 제대로 안될 수 있습니다. linux-image, linux-headers는 인스턴스에 미리 설치되어 있었습니다.

sudo apt-get install linux-image-extra-`uname -r`

Caffe Prerequisite

Caffe에 필요한 라이브러리 설치를 진행합니다.

http://caffe.berkeleyvision.org/install_apt.html

sudo apt-get install opencl-headers build-essential \
  protobuf-compiler libprotoc-dev libboost-all-dev libleveldb-dev \
  hdf5-tools libhdf5-serial-dev \
  libopencv-core-dev libopencv-highgui-dev \
  libsnappy-dev libsnappy1 libatlas-base-dev cmake libstdc++6-4.8-dbg \
  libgoogle-glog0 libgoogle-glog-dev libgflags-dev liblmdb-dev

CUDA 7.5 설치

sudo apt-get install cuda
sudo apt-get clean

cuDNN v5.1 설치

GPU를 이용한 딥러닝을 위한 cuDNN을 설치합니다. NVIDIA 멤버십 가입이 필요합니다.

tar xvzf cudnn-7.5-linux-x64-v5.1.solitairetheme8
sudo cp -v cuda/include/* /usr/local/cuda/include
sudo cp -v cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo ldconfig /usr/local/cuda/lib64

sudo ldconfig 를 진행했을 때 아래의 메시지가 나타나는 것은 영향이 없습니다.

/usr/local/cuda/lib64/libcudnn.so.5 is not a symbolic link

CUDA 환경변수 설정

vi ~/.bashrc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

sudo -i
reboot

Caffe와 py-faster-rcnn/caffe-fast-rcnn을 둘다 컴파일 할 경우 cuDNN 호환 에러가 발생합니다.

이 문제의 해결방법은 두 프로젝트 모두 Caffe 기반이므로 caffe-fast-rcnn에서 caffe master branch와 프로젝트 merge를 하는 방법입니다.

https://github.com/rbgirshick/py-faster-rcnn/issues/237

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

cd py-faster-rcnn/caffe-fast-rcnn
git remote add https://github.com/BVLC/caffe.git
git fetch caffe
git merge caffe/master

위 링크를 보시면 merge 한 후 충돌이 일어난 부분을 주석처리합니다.

vi include/caffe/layers/python_layer.hpp

# 주석처리
// self_.attr("phase") = static_cast<int>(this->phase_);

아래 경로의 requirements.txt에 따른 python 모듈을 모두 설치합니다.

# sudo -H pip install --upgrade setuptools
cd py-faster-rcnn/caffe-faster-rcnn/python
for req in $(cat requirements.txt); do sudo -H pip install $req | cut -d ">" -f1; done

OpenCV GPU 설치

OpenCV를 사용하려면 Caffe 설치 전에 먼저 설치 해야 합니다.

그렇기 때문에 먼저 필요한 pip 설치를 먼저 진행 한 후에 OpenCV를 설치합니다.

순서대로 하지 않으면 Prerequisite 조건이 만족되지 않아 컴파일 시 오류가 발생할 수 있습니다.

OpenCV는 현재 git master branch인 3.1.0-dev 버전을 설치했습니다.

또한 GPU를 사용하여 컴파일했으므로 이전에 포스팅했던 OpenCV와 Tensorflow를 설치 했던 경우와 차이가 있습니다.

Prerequisite

라이브러리 대부분이 CUDA 설치 시에 설치 되었습니다.

# sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev (설치되어 있음)
sudo apt-get install libv4l-dev
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D WITH_CUDA=ON \
  -D WITH_CUBLAS=1 \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D BUILD_EXAMPLES=ON ..

make -j8
sudo make -j8 install
sudo ldconfig

http://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394

# sudo apt-get install libdc1394-22 libdc1394-22-dev(설치되어 있음)
sudo apt-get install libdc1394-utils
sudo ln /dev/null /dev/raw1394

버전이 제대로 설치 되었는지 확인합니다.

python
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'

py-faster-rcnn - caffe 설치

build cython

Caffe를 설치 한 후에 EC2 인스턴스의 GPU 장치가 올바르지 않다는 오류가 발생합니다. 이 오류를 해결하는 링크가 아래에 있습니다.

cd py-faster-rcnn/lib
# https://github.com/rbgirshick/py-faster-rcnn/issues/2
vi fast_rcnn/config.py
__C.USE_GPU_NMS = False

make -j8

build caffe, pycaffe

주석을 읽어보시고 환경에 맞게 설정하셔야 합니다.

cd py-faster-rcnn/caffe-faster-rcnn
cp -v Makefile.config.example Makefile.config
vi Makefile.config

#### 주석 해제 ####
# CUDNN 활성화
USE_CUDNN := 1
# OpenCV 3.0.0 이상 버전
OPENCV_VERSION := 3
# 로컬 경로 numpy 추가
PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib/python2.7/dist-packages/numpy/core/include \
                /usr/local/lib/python2.7/dist-packages/numpy/core/include
# caffe installation 조건
WITH_PYTHON_LAYER := 1
# sudo apt-get install pkg-config가 설치되어 있음
USE_PKG_CONFIG := 1
mkdir build
cd build
cmake ..
make -j8 all
make -j8 pycaffe
make -j8 install
make -j8 runtest

Caffe 환경 변수 설정

이 설정을 하지 않으면 설치를 해도 import 에러가 발생합니다.

vi ~/.bashrc
export CAFFE_ROOT=/home/ubuntu/py-faster-rcnn/caffe-fast-rcnn
export PYTHONPATH=/home/ubuntu/py-faster-rcnn/caffe-fast-rcnn/python:$PYTHONPATH

X Windows

EC2의 X Windows를 이용하여 사진이나 동영상을 원격으로 볼 수 있게 합니다.

Windows의 경우 Xmanager나 Xming이 설치 되어 있어야 합니다.

드라이버 설치 시 GTK가 설치 되어 있기 때문에 열려있는 포트번호를 확인하고 DISPLAY 환경 변수를 추가합니다.

netstat -an | grep "LISTEN "
# 60xx port일 경우
export DISPLAY=localhost:xx.0

Caffe 설치를 완료하였습니다.

설치가 제대로 되었는지 확인합니다.

python
>>> import caffe
>>> caffe.__version__
'1.0.0-rc3'

Test

https://github.com/rbgirshick/py-faster-rcnn

sudo -H pip install easydict

# https://github.com/jflesch/paperwork/issues/283 python-gi-cairo or python-gobject-cairo
sudo apt-get install python-gi-cairo

sh py-faster-rcnn/data/scripts/fetch_faster_rcnn_models.sh

py-faster-rcnn/tools/demo.py

demo.py를 실행했을 때 아래와 같은 화면이 뜨면 성공입니다!

aws_caffe