지난 편의 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
댓글 없음:
댓글 쓰기