Skip to content

Instantly share code, notes, and snippets.

@nikitametha
Last active April 2, 2024 18:37
Show Gist options
  • Save nikitametha/c54e1abecff7ab53896270509da80215 to your computer and use it in GitHub Desktop.
Save nikitametha/c54e1abecff7ab53896270509da80215 to your computer and use it in GitHub Desktop.
Installing Caffe on Ubuntu 16.04 and above (CPU ONLY, WITHOUT CUDA OR GPU SUPPORT)

This is a guide on how to install Caffe for Ubuntu 16.04 and above, without GPU support (No CUDA required).

Prerequisites:

OpenCV

sudo apt-get install libopencv-dev python-opencv

OpenBLAS OR Atlas

OpenBLAS

sudo apt-get install libopenblas-dev

Atlas

sudo apt-get install libatlas-base-dev

Boost

sudo apt-get install libboost-all-dev

Protobuf (USING PIP)

sudo pip install protobuf

If you don't have pip yet, install it using the following commands:
sudo apt-get install python-pip python-dev build-essential

sudo pip install --upgrade pip

General Dependencies

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 

sudo apt-get install the python-dev 

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev 

Getting Caffe

git clone https://github.com/BVLC/caffe

You will now find the caffe folder in your Home directory.

We have to make a copy of Makefile.config.example, which we generally name as, Makefile.config to which we can make changes based on our system settings.

cd caffe
cp Makefile.config.example Makefile.config

Making Changes In Makefile.config

Make sure you are still in the caffe directory, then use this command to open Makefile.config

gedit Makefile.config 
Note- The following line numbers may vary.
  • On line 8, uncomment CPU_ONLY := 1

  • On Line 21, uncomment OPENCV_VERSION := 3 if you're using OpenCV 3 or above. If you aren't sure, try this in another terminal

$ python
>>> import cv2
>>> cv2.__version__
'3.0.0'
  • On line 25, uncomment CUSTOM_CXX := g++

  • On line 50, set BLAS := open if you've installed OpenBLAS, or let it be the default BLAS := atlas if you've installed Atlas.

  • On line 94, change

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

to

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include  /usr/include/hdf5/serial 
  • On line 95, change
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib

to

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib  /usr/lib/x86_64-linux-gnu/hdf5/serial

This should resolve hdf5 errors when running make

Now within the caffe directory, run the following one after the other

make all
make test
make runtest

These should run smoothly without any errors. If you do however, encounter errors, refer the ones at the end of this post or elsewhere to resolve them.

Make sure to REMOVE BUILD every time you resolve an error, and run those three commands again to rebuild.

This is VERY IMPORTANT, otherwise the errors will persist.

To remove build,

rm -rf ./build*/

Once all three run without errors, while in the caffe directory, type

make pycaffe

This will build a python wrapper. You will also find a python folder within the caffe folder now.

To use caffe within python, export its path as

export PYTHONPATH=~/Home/_username_/caffe/python:$PYTHONPATH

Replace _username_ with the your username in the system.

Once you've done this, run the python terminal and import caffe

>>> import caffe
>>>

This, should work. If it throws a 'module not found' error, check if it has been appended in pythonpath properly by typing

>>> import sys
>>> sys.path
['', '/home/nikita/caffe/python', '/home/nikita', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib
/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/nikita/.local/lib/python2.7/site-
packages']

If you see that the /home/_username_/caffe/python path, isn't there, then do

>>> sys.path.append('/Home/_username_/caffe/python')

Alternatively, just use

caffe/python

depending on whether your export is already under home/username

That's all there is to installing caffe.

Common Errors

OpenCV Errors

.
.
/usr/bin/ld: cannot find -lopencv_imgcodecs
/usr/bin/ld: cannot find -lopencv_videoio
collect2: error: ld returned 1 exit status

This usually happens when you've either forgotten to uncomment line 21 when you have OpenCV 3, or if you haven't checked the version properly. If you're using OpenCV < 3, this shouldn't be an error at all. If it still shows on OpenCV >= 3.0, then in the Makefile ( NOT Makefile.config ) on line 181 (in my case), add libraries such that it looks like

LIBRARIES += glog gflags protobuf leveldb snappy \
  lmdb boost_system hdf5_hl hdf5 \
  opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

Also, make sure to rebuild!

OpenBLAS Errors

/usr/bin/ld: cannot find -lcblas
collect2: ld returned 1 exit status
make: *** [.build_release/lib/libcaffe.so] Error 1

This happens if you've not installed OpenBLAS properly, or if you've set
BLAS := open when you have only Atlas installed. It may sound silly, but 'to err is human'.

If it persists after rebuild, install Atlas instead and change to BLAS := atlas

@NguyenDangBinh
Copy link

dear all.
I had issue like that:
(OpenSSL) binh@binh:~/3Dpose_ssl/caffe-3dssl$ make all
CXX src/caffe/solver.cpp
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
switch (status) {
^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
cudnnStatus_t status = condition;
^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
/home/binh/anaconda2/envs/OpenSSL/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target '.build_release/src/caffe/solver.o' failed
make: *** [.build_release/src/caffe/solver.o] Error 1

How to solve? Thank you so much.

@NguyenDangBinh
Copy link

dear all.
I had issue like that:
(OpenSSL) binh@binh:~/3Dpose_ssl/caffe-3dssl$ make all
CXX src/caffe/solver.cpp
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
switch (status) {
^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
cudnnStatus_t status = condition;
^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
/home/binh/anaconda2/envs/OpenSSL/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target '.build_release/src/caffe/solver.o' failed
make: *** [.build_release/src/caffe/solver.o] Error 1

How to solve? Thank you so much.

@Kannank97
Copy link

Hey, Thank you so much. This saved me a lot of time for my work

@ilyes-ouled-omar
Copy link

Thank you!!!
It was really helpful :)

@ashikrai
Copy link

ashikrai commented Aug 9, 2019

I have followed all the given steps but im getting error on
make all

Error is given below, can anyone help me:

CXX .build_release/src/caffe/proto/caffe.pb.cc
In file included from .build_release/src/caffe/proto/caffe.pb.cc:4:0:
.build_release/src/caffe/proto/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
^
.build_release/src/caffe/proto/caffe.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update
#error incompatible with your Protocol Buffer headers. Please update
^
.build_release/src/caffe/proto/caffe.pb.h:14:2: error: #error your headers.
#error your headers.
^
In file included from .build_release/src/caffe/proto/caffe.pb.cc:4:0:
.build_release/src/caffe/proto/caffe.pb.h:23:35: fatal error: google/protobuf/arena.h: No such file or directory
compilation terminated.
Makefile:598: recipe for target '.build_release/src/caffe/proto/caffe.pb.o' failed
make: *** [.build_release/src/caffe/proto/caffe.pb.o] Error 1

@nrobertio
Copy link

hi, I am successfully done with all the commands listed, but in the last while checking using "import caffe" it says Import error: no module named caffe.

can you help me in encountering this error.
import sys
caffe_root = '/home/nvidia/caffe/' # this file should be run from {caffe_root}/examples (otherwise change this line)
sys.path.insert(0, caffe_root + 'python')

import caffe

@Zrufy
Copy link

Zrufy commented Oct 24, 2019

unsupported GNU version! gcc versions later than 8 are not supported!

@ziggyjosh16
Copy link

I'm wondering if it is possible to install caffe inside a conda environment

@nrobertio
Copy link

nrobertio commented Dec 6, 2019 via email

@nrobertio
Copy link

nrobertio commented Dec 6, 2019 via email

@Hassan313
Copy link

Thank you very much. Really appreciate your work here.

@samiulhaq952
Copy link

samiulhaq952 commented Apr 2, 2024

This worked like a charm. Thank you a lot!

If you may, let me point two little improvements:

  • if you downloaded Caffe to another directory, you can create a symbolic link using ln -s command. For example, go to your home directory in a terminal, then type ln -s ~/Downloads/caffe assuming caffe is in your Download folder. Once this is done, I got caffe installed at /home/gilva/caffe/python, then caffe got loaded correctly when I used export PYTHONPATH=/home/gilvan/caffe/python:$PYTHONPATH
  • if your system also missed the scikit-image Python binding, then an error ImportError: No module named skimage.io was shown when importing Caffe to python. Try installing the python-skimage package by typing the command sudo apt-get install python-skimage and it will be gone.

Hello Sir.
I am facing issues while running make runtest command. I am getting the below errors:

F0402 17:21:22.449431 14248 db_leveldb.cpp:16] Check failed: status.ok() Failed to open leveldb /tmp/caffe_test.6186-8dae/db
IO error: /tmp/caffe_test.6186-8dae/db: Invalid argument
*** Check failure stack trace: ***
@ 0x7f459ff9fb03 (unknown)
@ 0x7f459ffa79d1 (unknown)
@ 0x7f459ff9f7c2 (unknown)
@ 0x7f459ffa178f (unknown)
@ 0x7f459ecf6149 (unknown)
@ 0x7f45a01c5fa9 (unknown)
@ 0x7f45a01cab14 (unknown)
@ 0x7f45a03fa3cf (unknown)
@ 0x7f45a03f22ed (unknown)
@ 0x7f45a03f2428 (unknown)
@ 0x7f45a03f2505 (unknown)
@ 0x7f45a03f29f4 (unknown)
@ 0x7f45a03fa9b7 (unknown)
@ 0x7f45a03f2ad1 (unknown)
@ 0x7f45a0120f96 (unknown)
@ 0x7f459e759d90 (unknown)
@ 0x7f459e759e40 (unknown)
@ 0x7f45a0127725 (unknown)
@ (nil) (unknown)
Aborted (core dumped)
make: *** [Makefile:543: runtest] Error 134

Can you please help me? I have been struggling for 1 week. Your assistance will be highly appreciated.
Best Regards,
Sami Ul Haq

@samiulhaq952
Copy link

samiulhaq952 commented Apr 2, 2024

Hello @nikitametha Ma'am, I hope you're doing well.
Thanks for this amazing and easy-to-follow tutorial. I have successfully run the first two commands.
However, I am facing the below errors while running the last command, "make run test".

[----------] 1 test from LayerFactoryTest/1, where TypeParam = caffe::CPUDevice
[ RUN ] LayerFactoryTest/1.TestCreateLayer
F0402 21:26:53.470124 19252 db_leveldb.cpp:16] Check failed: status.ok() Failed to open leveldb /tmp/caffe_test.1f86-7dbe
IO error: /tmp/caffe_test.1f86-7dbe: Invalid argument
*** Check failure stack trace: ***
@ 0x7f6e1c30fb03 (unknown)
@ 0x7f6e1c3179d1 (unknown)
@ 0x7f6e1c30f7c2 (unknown)
@ 0x7f6e1c31178f (unknown)
@ 0x7f6e1b066149 (unknown)
@ 0x7f6e1c60124a (unknown)
@ 0x7f6e1c75e3cf (unknown)
@ 0x7f6e1c7562ed (unknown)
@ 0x7f6e1c756428 (unknown)
@ 0x7f6e1c756505 (unknown)
@ 0x7f6e1c7569f4 (unknown)
@ 0x7f6e1c75e9b7 (unknown)
@ 0x7f6e1c756ad1 (unknown)
@ 0x7f6e1c484f96 (unknown)
@ 0x7f6e1aac9d90 (unknown)
@ 0x7f6e1aac9e40 (unknown)
@ 0x7f6e1c48b725 (unknown)
@ (nil) (unknown)
Aborted (core dumped)
make: *** [Makefile:543: runtest] Error 134

I have attached my "Makefile.config" to this message. Kindly check it and help me solve this issue. I am struggling with this issue since last 5 days. Your assistance will be highly appreciated.

PC: I am using Ubuntu 22.04.4 LTS on window 10 without GPU

Thanks & Best regards,
Sami Ul Haq

Link to config file: https://drive.google.com/file/d/1lGisTyXPrE5KhE1tuuWipCUvkBPmHOJU/view?usp=sharing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment