Ubuntu 16.04 환경에서 딥러닝 프레임워크인 Caffe를 소스 코드로부터 빌드할 때, 가장 중요한 단계 중 하나는 Makefile.config 파일을 현재 시스템 및 Python 환경에 맞게 정확히 수정하는 것입니다. 특히 Anaconda 가상 환경을 사용할 경우, 시스템 기본 Python 경로 대신 Anaconda의 include 및 lib 경로를 명시해야 컴파일 오류를 방지할 수 있습니다.
본 가이드에서는 Anaconda2(Python 2.7)와 Anaconda3(Python 3.5) 환경을 대상으로 Caffe 빌드를 성공적으로 수행하기 위한 핵심 설정 값을 재구성한 Makefile.config 예제를 제공합니다. 참고로 2017년 기준의 Caffe 레거시 소스 코드는 Python 3.6 이상을 공식적으로 지원하지 않으므로, Python 3 환경 구축 시 3.5 버전을 사용하는 것이 안정적입니다.
1. 공통 핵심 설정 및 CUDA/cuDNN 활성화
GPU 가속을 위해 cuDNN을 활성화하고, 사용 중인 CUDA 아키텍처에 맞게 CUDA_ARCH를 설정합니다. 불필요한 구형 아키텍처(compute_20 등)는 제거하여 컴파일 시간을 단축하는 것을 권장합니다.
# cuDNN 가속 활성화
USE_CUDNN := 1
# CUDA 디렉토리 설정
CUDA_DIR := /usr/local/cuda
# CUDA 아키텍처 설정 (최신 GPU에 맞게 최적화)
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
2. Anaconda2 (Python 2.7) 환경 설정
Anaconda2를 사용할 경우, Python 관련 include 및 library 경로를 Anaconda 설치 디렉토리로 재지정해야 합니다. 또한 Python 레이어 지원을 위해 WITH_PYTHON_LAYER를 활성화합니다.
# Python 인터페이스 빌드 활성화
BUILD_PYTHON := 1
WITH_PYTHON_LAYER := 1
# Anaconda2 경로 설정 (사용자 환경에 맞게 /opt/anaconda2 등으로 수정 가능)
ANACONDA_HOME := /home/developer/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib
# BLAS 설정 (Atlas 사용)
BLAS := atlas
BLAS_INCLUDE := /usr/include
BLAS_LIB := /usr/lib
3. Anaconda3 (Python 3.5) 환경 설정
Python 3 환경을 사용한다면 Boost Python 라이브러리 이름과 Python include 경로가 달라집니다. Python 3.5m을 타겟으로 경로를 수정합니다.
# Python 3 라이브러리 링크 설정
PYTHON_LIBRARIES := boost_python3 python3.5m
# Anaconda3 경로 설정
ANACONDA_HOME := /home/developer/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.5m \
$(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include
PYTHON_LIB := $(ANACONDA_HOME)/lib
4. HDF5 및 링커 경로 수정 (Ubuntu 16.04 필수)
Ubuntu 16.04에서는 HDF5 라이브러리가 직렬(serial) 버전으로 설치되는 경우가 많아, 기본 경로 외에 직렬 라이브러리 경로를 명시적으로 추가해주지 않으면 링킹 단계에서 hdf5.h 또는 관련 라이브러리를 찾지 못하는 오류가 발생합니다.
# Include 및 Library 디렉토리 확장
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
# HDF5 직렬 라이브러리 명시적 링크
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial