Deep learning setup for Ubuntu 16.04: Tensorflow 1.2, keras, opencv3, python3, cuda8 and cudnn5.1
Important: All the steps were last tested on 6/21/2017. Details on my system build can be found here.
I recently installed ROS on my host machine. ROS changed opencv path and messed something with nvidia drivers, so had to reinstall all software. Luckily was able to recover most of the data.
Some things i wish I knew before,
- opencv is not compatible with cuda8. There is a work around, that I used here.
- secure boot needs to be disabled from bios before taking any of these steps. Not doing so may result in the dreaded infinite login loop. Learned this the hardway.
- Avoid installing from binaries. Cuda and nvidia drivers can be installed from binary files ( as .run ) too. This required disabling lightdm and starting it after installing nvidia drivers. After this, I kept getting issues where monitor was not recognized on reboot at random.
- Do compiled opencv, so it can be used in virtual env (I forgot this many times). Although in this method, the cv2 module is installed in both python2 and python3 dist-packages, so making symlinks etc is not needed
- (this is just for me) NEVER install ROS on native host. For some reason ROS packages interfere with everything, from nvidia driver to resetting path for opencv. This I suspect is the root cause for the issue I had. So am never going to install ROS on my deep learning computer directly. Sticking to VM, or a dedicated computer is the best.
Step 0: Install google chrome
Install Google chrome. I prefer chrome over mozilla firefox, so I installed that first from here.
Step 1: Prepare computer
Update OS, install cmake, fortran, g++ etc.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake g++ gfortran
sudo apt-get install git pkg-config python-dev
sudo apt-get install software-properties-common wget
sudo apt-get autoremove
sudo rm -rf /var/lib/apt/lists/*
Step 3: Install NVIDIA drivers
Next step is to install correct nvidia driver. I have a titan X gpu, so I will install nvidia-375. If you are not sure of your GPU, you can use
lspci | grep -i nvidia
This in terminal gives,
Next step is to add proprietary repository of nvidia drivers.
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-375
Once nvidia driver is installed, restart the computer. You can verify the driver using the following command.
cat /proc/driver/nvidia/version
The command above should produce output like this,
Step 4: Cuda-8 installation
Next step is to install cuda-8. On the link, you can select your system and download the appropriate package file. I tried using the run file, but had issues while booting, so reinstalled ubuntu 16.04 and installed cuda from deb package.
The package file is about 2GB, so it may take a while to download. On my computer it took about 10 minutes. Installation steps are the same as that on their website, but writing it here again so one may copy and paste. Note, the installation takes about a minute or so.
Next step is to add libraries to .bashrc file,
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
After sourcing the bashrc file, the CUDA version can be verified using
nvcc -V
Step 5: cuDNN 5.1
Next step is to install cuDNN. cuDNN can be downloaded from NVIDIA’s webpage https://developer.nvidia.com/cudnn. Extract cuDNN and install.
cd ~/Downloads/
tar xvf cudnn*.tgz
cd cuda
sudo cp */*.h /usr/local/cuda/include/
sudo cp */libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
Step 6: Install python stuff
Next step is to install standard python libraries,
sudo apt-get update && apt-get install -y python-numpy python-scipy python-nose python-h5py python-skimage python-matplotlib python-pandas python-sklearn python-sympysudo apt-get clean && sudo apt-get autoremovesudo rm -rf /var/lib/apt/lists/*
Next install more python goodies like virtual environment, pip, pip3, jupyter notebook, etc.
sudo apt-get updatesudo apt-get install git python-dev python3-dev python-numpy python3-numpy build-essential python-pip python3-pip python-virtualenv swig python-wheel libcurl3-devsudo apt-get install -y libfreetype6-dev libpng12-devpip3 install -U matplotlib ipython[all] jupyter pandas scikit-image
Step 7: Install openBLAS from its repository
OpenBLAS is linear algebra library that is faster than standard Atlas.
mkdir ~/git
cd ~/git
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make FC=gfortran -j16
sudo make PREFIX=/usr/local install
Step 8: Install tensorflow
Next install tensorflow, easiest method is to use pip3
pip3 install --upgrade tensorflow-gpu
If everything goes well, tensorflow should be available in the new environment. This can be verified using python in the following steps,
python
>>> import tensorflow as tf
>>> a = tf.constant(5)
>>> b = tf.constant(6)
>>> sess = tf.Session()
>>> sess.run(a+b)// this should print bunch of messages showing device status etc. // If everything goes well, you should see gpu listed in device>> sess.close()
Screen shot below shows these commands running in the terminal.
Step 9: Install keras
Install keras using pip3
sudo pip3 install keras
Verify keras installation using following commands, screen shot below.
python
>>> import keras
Once tensorflow and keras are installed, the last step is to install opencv. To do so, deactivate tensorflow3 environment using deactivate
. I installed openCV host directly.
Step 10: Install opencv
Install packages to read different image formats.
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
Install qt5 for
sudo apt install qtbase5-dev
Install libraries to video format
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
Install gtk for using GUI
sudo apt-get install libgtk2.0-dev
Install libatlas for opencv functions
sudo apt-get install libatlas-base-dev gfortran
Install hdf5 library
sudo apt-get install libhdf5-serial-dev
Clone openCV from repository where opencv is installed with cuda8.
git clone https://github.com/daveselinger/opencv
git checkout 3.1.0-with-cuda8
Instal opencv with python 3.
cd ~/opencv
mkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUBLAS=ON -D WITH_TBB=ON \
-D WITH_V4L=ON -D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
Compile and install opencv
make -j16
sudo make install
Step 10: Virtual environments
Last step is to use virtual environments to organize projects. For now, I will use tensorflow3
. Create a virtual environment named tensorflow3.
A different more appropriate name can be chosen.
virtualenv --system-site-packages -p python3 tensorflow3
Next, source the new environment and install tensorflow
source ~/tensorflow3/bin/activate
Once the virtual environment is sourced, the command prompt must change as (tensorflow3)
. You can verify tensorflow as follows.
Code/text editor
Next step is to add your favorite code/text editor. I prefer sublime text for python scripts due to vibrant colors, and use atom for markdown documents before posting on web. I use atom mostly because I found it represents compiled documents most similar to how they appear on net. An example is the page here from Advanced Control Systems course I developed while at SUNY-Stony Brook. https://mec560sbu.github.io/2016/09/25/Opt_control/
Sublime text: Installation
sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer
Sublime text: Uninstallation
Uninstallation step, in case something better comes along.
sudo apt-get remove sublime-text-installer
References:
Below are links I used to compile these codes.
- https://gist.github.com/filitchp/5645d5eebfefe374218fa2cbf89189aa
- https://github.com/daveselinger/opencv
- http://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/
- https://github.com/floydhub/dl-setup
- http://www.pyimagesearch.com/2016/07/11/compiling-opencv-with-cuda-support/
Next steps
The next steps are to install a good text editor (sublimetext or atom), remote desktop software and run linux box headless (better if you can get display emulator).