Last active
December 17, 2015 07:18
-
-
Save haje01/6f30bc6a35d9c9040492 to your computer and use it in GitHub Desktop.
Dockerfile for Caffe (for AWS GPU Instace)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM ubuntu:14.04 | |
# A docker container with the Nvidia kernel module and CUDA drivers installed | |
ENV CUDA_RUN http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run | |
RUN apt-get update && apt-get install -q -y \ | |
wget \ | |
build-essential | |
RUN cd /opt && \ | |
wget $CUDA_RUN && \ | |
chmod +x *.run && \ | |
mkdir nvidia_installers && \ | |
./cuda_6.5.14_linux_64.run -extract=`pwd`/nvidia_installers && \ | |
cd nvidia_installers && \ | |
./NVIDIA-Linux-x86_64-340.29.run -s -N --no-kernel-module | |
RUN cd /opt/nvidia_installers && \ | |
./cuda-linux64-rel-6.5.14-18749181.run -noprompt | |
# Ensure the CUDA libs and binaries are in the correct environment variables | |
ENV LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-6.5/lib64 | |
ENV PATH=$PATH:/usr/local/cuda-6.5/bin | |
ENV PYTHONPATH /opt/caffe/python | |
# Add caffe binaries to path | |
ENV PATH $PATH:/opt/caffe/.build_release/tools | |
# Get dependencies | |
RUN apt-get update && apt-get install -y \ | |
bc \ | |
cmake \ | |
curl \ | |
gcc-4.6 \ | |
g++-4.6 \ | |
gcc-4.6-multilib \ | |
g++-4.6-multilib \ | |
gfortran \ | |
git \ | |
libprotobuf-dev \ | |
libleveldb-dev \ | |
libsnappy-dev \ | |
libopencv-dev \ | |
libboost-all-dev \ | |
libhdf5-serial-dev \ | |
liblmdb-dev \ | |
libjpeg62 \ | |
libfreeimage-dev \ | |
libatlas-base-dev \ | |
pkgconf \ | |
protobuf-compiler \ | |
python-dev \ | |
python-pip \ | |
unzip \ | |
wget | |
# Use gcc 4.6 | |
RUN update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-4.6 30 && \ | |
update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-4.6 30 && \ | |
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 30 && \ | |
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 30 | |
# Allow it to find CUDA libs | |
RUN echo "/usr/local/cuda/lib64" > /etc/ld.so.conf.d/cuda.conf && \ | |
ldconfig | |
# Clone the Caffe repo | |
RUN cd /opt && git clone https://github.com/BVLC/caffe.git | |
# Glog | |
RUN cd /opt && wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz && \ | |
tar zxvf glog-0.3.3.tar.gz && \ | |
cd /opt/glog-0.3.3 && \ | |
./configure && \ | |
make && \ | |
make install | |
# Workaround for error loading libglog: | |
# error while loading shared libraries: libglog.so.0: cannot open shared object file | |
# The system already has /usr/local/lib listed in /etc/ld.so.conf.d/libc.conf, so | |
# running `ldconfig` fixes the problem (which is simpler than using $LD_LIBRARY_PATH) | |
# TODO: looks like this needs to be run _every_ time a new docker instance is run, | |
# so maybe LD_LIBRARY_PATh is a better approach (or add call to ldconfig in ~/.bashrc) | |
RUN ldconfig | |
# Gflags | |
RUN cd /opt && \ | |
wget https://github.com/schuhschuh/gflags/archive/master.zip && \ | |
unzip master.zip && \ | |
cd /opt/gflags-master && \ | |
mkdir build && \ | |
cd /opt/gflags-master/build && \ | |
export CXXFLAGS="-fPIC" && \ | |
cmake .. && \ | |
make VERBOSE=1 && \ | |
make && \ | |
make install | |
# Build Caffe core | |
RUN cd /opt/caffe && \ | |
cp Makefile.config.example Makefile.config && \ | |
echo "CXX := /usr/bin/g++-4.6" >> Makefile.config && \ | |
sed -i 's/CXX :=/CXX ?=/' Makefile && \ | |
WITH_PYTHON_LAYER=1 make all | |
# Add ld-so.conf so it can find libcaffe.so | |
RUN echo '/opt/caffe/.build_release/lib/' > /etc/ld.so.conf.d/caffe-ld-so.conf | |
# Run ldconfig again (not sure if needed) | |
RUN ldconfig | |
# Install python deps | |
RUN cd /opt/caffe && \ | |
(pip install -r python/requirements.txt; easy_install numpy; cat python/requirements.txt | xargs -L 1 sudo pip install) && \ | |
easy_install pillow | |
# Numpy include path hack - github.com/BVLC/caffe/wiki/Setting-up-Caffe-on-Ubuntu-14.04 | |
RUN NUMPY_EGG=`ls /usr/local/lib/python2.7/dist-packages | grep -i numpy` && \ | |
ln -s /usr/local/lib/python2.7/dist-packages/$NUMPY_EGG/numpy/core/include/numpy /usr/include/python2.7/numpy | |
# Build Caffe python bindings | |
RUN cd /opt/caffe && make pycaffe | |
# Make + run tests | |
# RUN cd /opt/caffe && make test && make runtest | |
# export PYTHONPATH | |
RUN echo "export PYTHONPATH=/opt/caffe/python" > ~/.bash_profile | |
# Patch buggy io.py & classify.py | |
RUN cd /opt/caffe && wget https://gist.githubusercontent.com/haje01/d268b745acd532849722/raw/a96835cb6aac1b70d0c51b9d09a282f5748bed6c/caffe_test.diff && patch -p1 < caffe_test.diff |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment