Ubuntu 15.10 have been released for a couple of days. It is a bleeding-edge system coming with Linux kernel 4.2 and GCC 5. However, compiling and running Caffe on this new system is no longer as smooth as on earlier versions. I have done some research related to this issue and finally find a way out. I summarize it here in this short tutorial and I hope more people and enjoy this new system without breaking their works.
The latest NVIDIA driver is officially included in Ubuntu 15.10 repositories. One can install it directly via apt-get
.
sudo apt-get install nvidia-352-updates nvidia-modprobe
The nvidia-modprobe
utility is used to load NVIDIA kernel modules and create NVIDIA character device files automatically everytime your machine boots up.
Reboot your machine and verify everything works by issuing nvidia-smi
or running deviceQuery
in CUDA samples.
More infomation related to NVIDIA driver and CUDA installation can be found here.
CUDA 7.5 is provided by neither Ubuntu official nor CUDA repositories for Ubuntu 15.10. But we can still install it using .run
file.
cd ~
wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
chmod +x cuda_7.5.18_linux.run
./cuda_7.5.18_linux.run --extract=/home/$USER
sudo ./cuda-linux64-rel-7.5.18-19867135.run
Follow the instructions there and configure runtime library after the installation finishes.
sudo bash -c "echo /usr/local/cuda/lib64/ > /etc/ld.so.conf.d/cuda.conf"
sudo ldconfig
Follow instructions here
cd ~
git clone https://github.com/BVLC/caffe.git
By now you should be unable to compile it due to serveral incompatibility problems. Let's fix them one by one.
By default, CUDA 7.5 does not support compling with GCC 4.10 or later versions. It will report the following errors when compiling Caffe.
In file included from /usr/local/cuda/include/cuda_runtime.h:76:0,
from <command-line>:0:
/usr/local/cuda/include/host_config.h:115:2: error: #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
^
You can try install gcc-4.9
and g++-4.9
to solve this problem temporarily. But the linker will report undefined references
errors later because all other libraries (protobuf
,leveldb
,opencv
) in Ubuntu 15.10 are compiled with GCC version 5.2. They are not compatible.
To solve this problem we have to "hack" the CUDA toolkit by editing /usr/local/cuda/include/host_config.h
. Comment line 115.
--- #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
+++ //#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
Your machine may report the following error when compiling Caffe even though libhdf5-serial-dev
package has been already installed in it.
./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: No such file or directory
This is because of change of default path and name of hdf5
head files and libraries in Ubuntu 15.10. To solve this problem, we can simply modify Makefile
files.
Append /usr/include/hdf5/serial/
to INCLUDE_DIRS
at line 85 in Makefile.config
.
--- INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
+++ INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
Modify hdf5_hl
and hdf5
to hdf5_serial_hl
and hdf5_serial
at line 173 in Makefile
--- LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
+++ LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
By now, all incompatibility issues should have been solved. We can start to compile and test Caffe.
cd ~/caffe
make -j8
make test -j8
make runtest -j8
Hopefully all tests pass.
- Running
sudo make runtest
once may help you fix a lot of runtime errors until next reboot, although it is not a recommended way. - You might need to append
LC_ALL="en_US.UTF-8"
to/etc/environment
and reboot your machine if there are runtime errors related tolocale::facet::_S_create_c_locale name not valid
.
I'm getting this with make runtest
Cuda number of devices: 9406365
Setting to use device 0
Current device id: 0
Current device name:
F0126 13:15:38.632215 35566 gpu_memory.cpp:137] Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime version
Details:
g++ (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904
MKL 2017 Update 1
Linux Description: Linux Mint 18.1 Serena
CUDA:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 378.09 Driver Version: 378.09 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 960 Off | 0000:04:00.0 On | N/A |
| 0% 25C P8 7W / 160W | 94MiB / 4032MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 760 Off | 0000:83:00.0 N/A | N/A |
| 42% 33C P8 N/A / N/A | 1MiB / 4036MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2427 G /usr/lib/xorg/Xorg 72MiB |
| 0 2937 G cinnamon 20MiB |
| 1 Not Supported |
+-----------------------------------------------------------------------------+