caffe2与Detectron已经放出很久,但由于相关教程较少,并且代码不稳定,一直没有使用,但伴随着相关开源代码增多,不得已安装与学习,做个简要的教程。
step1:
caffe2安装(caffe2的安装比较麻烦,有可能会出现各种问题):
主要环境要求:python2,cuda-8.0,cudnn6.0,Ubuntu16.04 ,按照装caffe的传统方式安装显卡驱动,cuda8与cudnn6即可。
安装官网:
https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile
安装官网中提供了具体的安装步骤,其中在Install with GPU Support一节中提供了安装cuda以及cudnn的方法。
安装依赖:
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
libgoogle-glog-dev \
libgtest-dev \
libiomp-dev \
libleveldb-dev \
liblmdb-dev \
libopencv-dev \
libopenmpi-dev \
libsnappy-dev \
libprotobuf-dev \
openmpi-bin \
openmpi-doc \
protobuf-compiler \
python-dev \
python-pip
sudo pip install \
future \
numpy \
protobuf
sudo apt-get install -y --no-install-recommends libgflags-dev
下载代码并安装:
git clone --recursive https://github.com/pytorch/pytorch.git && cd pytorch
这个过程会比较长,会下载很多东西在third_party文件夹下。
git submodule update --init
mkdir build && cd build
cmake ..
sudo make install
Tips :在cmake之前以及cmake .. 之后,可利用ccmake . 指令查看编译选项,利用sudo apt-get install cmake-curses-gui 安装
ccmake指令,然后利用ccmake . 查看编译选项以及路径是否正确。
如果不想或没有超级用户权限,可在将sudo make install 变为 make 指令,然后在~/.bashrc里添加必要的路径信息
在 ~/.bashrc里添加如下内容:
export PYTHONPATH=/path_to_pytorvh/pytorch/build:$PYTHONPATH
export PATH=/path_to_pytorch/pytorch/build/bin:$PATH
export LIBRARY_PATH=$LIBRARY_PATH:/path_to_pytorvh/pytorch/build/lib:$LIBRARY_PATH
注意修改上面的路径,之后 source ~/.bashrc使其生效。
可能会出现的错误:
安装过程中有可能会报出以下错误:
/usr/local/cuda/include/crt/common_functions.h:64:24: error: token ""__CUDACC_VER__ is no longer supported. Use __CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, and __CUDACC_VER_BUILD__ instead."" is not valid in preprocessor expressions
报这个错误的原因是eigen的版本的问题,编译的过程中会首先寻找系统中的eigen,但系统中的版本有可能不合适,其实在third_party中已经有了,解决这个问题,只需要修改相关的cmake文件即可。
进入cmake文件夹,打开Dependencies.cmake文件,修改以下部分:
if(BUILD_CAFFE2)
# Due to license considerations, we will only use the MPL2 parts of Eigen.
set(EIGEN_MPL2_ONLY 1)
message(STATUS "Did not find system Eigen. Using third party subdirectory.")
set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/eigen)
##$$$$$$$$$%%%%CHANGED$%$%$%$%$^$
#find_package(Eigen3)
#if(EIGEN3_FOUND)
# message(STATUS "Found system Eigen at " ${EIGEN3_INCLUDE_DIR})
#else()
# message(STATUS "Did not find system Eigen. Using third party subdirectory.")
# set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/eigen)
#endif()
include_directories(${EIGEN3_INCLUDE_DIR})
endif()
如果在编译的过程中报里nccl与libcudart.so.8的错误,在 ~/.bashrc里添加如下内容:
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-8.0/lib64
之后source ~/.bashrc 使其生效。到这里基本没有什么问题了。
检查是否安装正确,打开python,执行 from caffe2.python import core, 如果报出以下错误:
File "caffe2/proto/caffe2_pb2.py", line 23, in <module>
t\x12\x17\n\x0freport_interval\x18\x08 \x01(\x05\x12\x14\n\x0crun_every_ms\x18\x0b \x01(\x03\x12\x1b\n\x13\x63oncurrent_substeps\x18\x06 \x01(\x08\x12\x18\n\x10should_stop_blob\x18\t \x01(\t\x12\x11\n\tonly_once\x18\n \x01(\x08\x12\x18\n\x10\x63reate_workspace\x18\x0c \x01(\x08\x12 \n\x18num_concurrent_instances\x18\r \x01(\x05\"g\n\x07PlanDef\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1f\n\x07network\x18\x02 \x03(\x0b\x32\x0e.caffe2.NetDef\x12-\n\x0e\x65xecution_step\x18\x03 \x03(\x0b\x32\x15.caffe2.ExecutionStep\"\xba\x01\n\tBlobProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12#\n\x06tensor\x18\x03 \x01(\x0b\x32\x13.caffe2.TensorProto\x12\x0f\n\x07\x63ontent\x18\x04 \x01(\x0c\x12%\n\x07qtensor\x18\x05 \x01(\x0b\x32\x14.caffe2.QTensorProto\x12\x1a\n\x12\x63ontent_num_chunks\x18\x06 \x01(\x05\x12\x18\n\x10\x63ontent_chunk_id\x18\x07 \x01(\x05\"K\n\rDBReaderProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x62_type\x18\x03 \x01(\t\x12\x0b\n\x03key\x18\x04 \x01(\t*\x90\x01\n\nDeviceType\x12\x07\n\x03\x43PU\x10\x00\x12\x08\n\x04\x43UDA\x10\x01\x12\n\n\x06MKLDNN\x10\x02\x12\n\n\x06OPENGL\x10\x03\x12\n\n\x06OPENCL\x10\x04\x12\t\n\x05IDEEP\x10\x05\x12\x07\n\x03HIP\x10\x06\x12!\n\x1d\x43OMPILE_TIME_MAX_DEVICE_TYPES\x10\x07\x12\x14\n\rONLY_FOR_TEST\x10\xc5\xde\xfb\t')
TypeError: __init__() got an unexpected keyword argument 'syntax'
则是因为protobuf的版本问题,源于protobuf的python版本与protoc的版本不符,利用
protoc --version
查看protoc的版本,安装合适的python包:
sudo pip install protobuf==对应版本
至此caffe2基本安装完成。
之后按照Detectron的安装顺序安装Detectron,这个基本不会有太大的问题。