2017년 3월 20일 월요일

Ubuntu 16.04 ppc64le에서, source로부터 Caffe를 build하는 방법


지난 편의 tensorflow 경우처럼, PowerAI 속에 caffe도 들어 있긴 합니다만, 간혹 customizing 때문에 source에서 build할 필요도 있을 수 있습니다.   여기서는 CUDA 8.0과 PowerAI가 이미 다 설치된 상태에서, caffe build를 시작하는 것으로 하겠습니다.  먼저, 기반 OS package를 설치합니다.

test@k8002:~$ sudo apt-get install libopencv-core-dev libopencv-dev libgflags-dev libgoogle-glog-dev libhdf5-dev libleveldb-dev liblmdb-dev libsnappy-dev libboost-python1.58-dev

이어서 github에서 caffe source를 복제합니다.

test@k8002:~$ git clone https://github.com/BVLC/caffe.git
Cloning into 'caffe'...
remote: Counting objects: 37621, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 37621 (delta 11), reused 6 (delta 6), pack-reused 37601
Receiving objects: 100% (37621/37621), 47.93 MiB | 5.27 MiB/s, done.
Resolving deltas: 100% (25123/25123), done.
Checking connectivity... done.

test@k8002:~$ cd caffe

test@k8002:~/caffe$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/device-abstraction
  remotes/origin/gh-pages
  remotes/origin/master
  remotes/origin/opencl
  remotes/origin/parallel
  remotes/origin/tutorial
  remotes/origin/williford-patch-1
  remotes/origin/windows

Caffe는 tensorflow와는 달리 1.0.0-rc5 버전을 최근 계속 유지하고 있습니다.  따라서 git checkout은 하지 않고 그대로 master 버전을 사용합니다.  make를 수행하기 전에, 먼저 Makefile.config.example을 편집하여 Makefile.config를 다음과 같이 일부 수정하여 만듭니다.  openblas는 PowerAI에 포함된 것을 사용하고, 그 이외의 것은 Ubuntu OS에 포함된 package를 사용합니다.

test@k8002:~/caffe$ cp Makefile.config.example Makefile.config

test@k8002:~/caffe$ vi Makefile.config
...
USE_CUDNN := 1   (원래 #으로 comment-out 되어 있는 것을 풀어줍니다.)
...
BLAS := open
#BLAS := atlas
...
BLAS_INCLUDE := /opt/DL/openblas/include
# BLAS_INCLUDE := /path/to/your/blas
BLAS_LIB := /opt/DL/openblas/lib
# BLAS_LIB := /path/to/your/blas
...
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/powerpc64le-linux-gnu/hdf5/serial


다음과 같이 make all을 수행하면 .build_release/tools directory 밑에 caffe가 빌드됩니다.

test@k8002:~/caffe$ make all

이와는 별도로, 다른 POWER8 서버로 배포 가능한 binary를 만드려면 다음과 같이 하면 됩니다.   빌드가 끝나면 distribute 밑에 bin과 include, lib 등의 필요 binary 파일들이 생성되므로, 이것을 tar 등으로 말아서 다른 서버로 가져가면 됩니다.

test@k8002:~/caffe$ make distribute

test@k8002:~/caffe$ ls distribute/
bin  include  lib  proto  python

test@k8002:~/caffe$ ls distribute/bin
caffe.bin               convert_mnist_siamese_data.bin  train_net.bin
classification.bin      device_query.bin                upgrade_net_proto_binary.bin
compute_image_mean.bin  extract_features.bin            upgrade_net_proto_text.bin
convert_cifar_data.bin  finetune_net.bin                upgrade_solver_proto_text.bin
convert_imageset.bin    net_speed_benchmark.bin
convert_mnist_data.bin  test_net.bin

test@k8002:~/caffe$ ls distribute/python
caffe  classify.py  CMakeLists.txt  detect.py  draw_net.py  requirements.txt  train.py

이렇게 생성된 caffe binary를 수행하려면 다음과 같이 openblas의 library path를 지정해주시고 사용하시면 됩니다.


test@k8002:~/caffe$ export LD_LIBRARY_PATH=/opt/DL/openblas/lib:$LD_LIBRARY_PATH

test@k8002:~/caffe$ .build_release/tools/caffe --version
caffe version 1.0.0-rc5




댓글 없음:

댓글 쓰기