背景
最近再學caffe,同時想自己編譯下,瞭解瞭解過程。
使用docker容器,利用官方cuda鏡像,進行caffe編譯,瞭解編譯過程,踩坑記錄。
編譯使用cmake。
編譯caffe-python接口。
官方鏡像
#查找cuda鏡像
docker search cuda
docker pull nvidia/cuda
注意cuda鏡像pull下來默認是最新版的CUDA10.2,cuda要和本機的cuda driver版本匹配,匹配版本如下圖(https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html):
有關具體版本可以到docker hub上找相關鏡像。
注意
運行容器的時候,別忘在run的後面加上 --gpus all參數,來映射顯卡驅動,否則還會出現cuda版本和driver不匹配的錯誤(實際上是沒映射驅動)
安裝caffe依賴和編譯器
apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
apt-get install libboost-all-dev #安裝boost庫
apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
apt-get install git build-essential cmake-gui #注意這裏沒有cmake
安裝caffe依賴,但要注意,對於cmake的安裝,沒有直接使用apt-get來安裝,因爲用它安裝最新版本只能到3.10.0,如果使用它來編譯,會由於CUDA版本太新,cmake的時候找不到Cuda的某個庫。
cmake要求版本>=3.12.0,安裝方式如下:(我用的3.13.0)
wget https://cmake.org/files/v3.13/cmake-3.13.0.tar.gz #沒有wget的話用apt-get安裝
tar -zxvf cmake-3.13.0.tar.gz
cd cmake-3.13.0
ln -s cmakePath/bin/* /usr/bin #直接將cmake中的二進制文件拷貝到/usr/bin下就能用
Cmake編譯
修改配置
git clone https://github.com/BVLC/caffe.git
cd caffe
#修改CMakeLists.txt
將set(python_version "2" CACHE STRING "Specify which Python version to use")
改爲set(python_version "3" CACHE STRING "Specify which Python version to use")
cd cmake
#修改cuda.cmake文件
將gpu_archs改爲如下:
# Known NVIDIA GPU achitectures Caffe can be compiled for.
# This list will be used for CUDA_ARCH_NAME = All option
set(Caffe_known_gpu_archs "30 35 50 60 61")
#否則或make的時候會出現nvcc fatal : Unsupported gpu architecture 'compute_20'錯誤
編譯
#在caffe目錄下
mkdir build
cmake ..
make -j'nproc'
make install
編譯成功。