Install Latex on Python AWS Lambda Function using Serverless Framework - python

I have a Python Lambda function that should create a PDF report. I tried to add a custom Dockerfile to install Latex at Lambda similar to https://github.com/samoconnor/lambdalatex 1
But the function cannot find the installed Latex files.
(The copied file template.tex at the end of the Dockerfile is there)
My serverless.yaml:
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
dockerFile: Dockerfile
The Dockerfile:
FROM lambci/lambda:build-python3.6
# The TeXLive installer needs md5 and wget.
RUN yum -y install perl-Digest-MD5 && \
yum -y install wget \
yum -y install latexmk
RUN mkdir /var/src
WORKDIR /var/src
# Download TeXLive installer.
ADD http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz /var/src/
#COPY install-tl-unx.tar.gz /var/src/
# Minimal TeXLive configuration profile.
COPY texlive.profile /var/src/
# Intstall base TeXLive system.
RUN tar xf install*.tar.gz
RUN cd install-tl-* && \
./install-tl --profile ../texlive.profile
ENV PATH=/var/task/texlive/2017/bin/x86_64-linux/:$PATH
# Install extra packages.
RUN tlmgr install xcolor \
tcolorbox \
pgf \
environ \
trimspaces \
etoolbox \
booktabs \
lastpage \
pgfplots \
marginnote \
tabu \
varwidth \
makecell \
enumitem \
setspace \
xwatermark \
catoptions \
ltxkeys \
framed \
parskip \
endnotes \
footmisc \
zapfding \
symbol \
lm \
sectsty \
stringstrings \
koma-script \
multirow \
calculator \
adjustbox \
xkeyval \
collectbox \
siunitx \
l3kernel \
l3packages \
helvetic \
charter \
latexmk
# Install latexmk.
RUN tlmgr install latexmk
# Remove LuaTeX.
RUN tlmgr remove --force luatex
# Remove large unneeded files.
RUN rm -rf /var/task/texlive/2017/tlpkg/texlive.tlpdb* \
/var/task/texlive/2017/texmf-dist/source/latex/koma-script/doc \
/var/task/texlive/2017/texmf-dist/doc
RUN mkdir -p /var/task/texlive/2017/tlpkg/TeXLive/Digest/ && \
mkdir -p /var/task/texlive/2017/tlpkg/TeXLive/auto/Digest/MD5/ && \
cp /usr/lib64/perl5/vendor_perl/Digest/MD5.pm \
/var/task/texlive/2017/tlpkg/TeXLive/Digest/ && \
cp /usr/lib64/perl5/vendor_perl/auto/Digest/MD5/MD5.so \
/var/task/texlive/2017/tlpkg/TeXLive/auto/Digest/MD5
FROM lambci/lambda:build-python3.6
WORKDIR /var/task
ENV PATH=/var/task/texlive/2017/bin/x86_64-linux/:$PATH
ENV PERL5LIB=/var/task/texlive/2017/tlpkg/TeXLive/
COPY template.tex /var/task/
The Python requirements from the requirements.txt are working perfectly.
Here is the output of the deploy from the Docker part:
Serverless: Building custom docker image from Dockerfile…
Serverless: Docker Image: sls-py-reqs-custom
Do you have any idea what I am doing wrong?

Related

Install OpenCV with CUDA in Docker but with very little memory

For a Docker container I am making a build of OpenCV which should work together with CUDA.
Here is an excerpt from the Dockerfile:
ARG OPENCV_VERSION=4.7.0
RUN cd /opt/ &&\
# Download and unzip OpenCV and opencv_contrib and delte zip files
wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip &&\
unzip $OPENCV_VERSION.zip &&\
rm $OPENCV_VERSION.zip &&\
wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip &&\
unzip ${OPENCV_VERSION}.zip &&\
rm ${OPENCV_VERSION}.zip &&\
# Create build folder and switch to it
mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\
# Cmake configure
cmake \
-DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-${OPENCV_VERSION}/modules \
-DWITH_CUDA=ON \
-DCMAKE_BUILD_TYPE=RELEASE \
# Install path will be /usr/local/lib (lib is implicit)
-DCMAKE_INSTALL_PREFIX=/usr/local \
.. &&\
# Make
make -j"$(nproc)" && \
# Install to /usr/local/lib
make install && \
ldconfig &&\
# Remove OpenCV sources and build folder
rm -rf /opt/opencv-${OPENCV_VERSION} && rm -rf /opt/opencv_contrib-${OPENCV_VERSION}
So far this works, but I have to create a very small container. If I now want to use OpenCV with CUDA, I end up with 2.7GB with all the data, etc.
I would now like to get this smaller. My idea would be to omit the extensions of OpenCV, but then I can no longer create CUDA with OpenCV. Since there are probably libraries in there which are needed.
Is there a way to do this without the libraries or can I delete them and "tell" OpenCV not to look for them? If I just leave them out there are a lot of error messages in OpenCV.
Here is the whole Dockerfile, it is not perfect:
FROM ghcr.io/ifm/ifm3d:latest-l4t-arm64 AS buildstage
COPY requirements.txt /tmp/
COPY python /tmp/python
USER root
ARG JETPACK_VERSION_BASE="r32.4"
ARG JETPACK_VERSION="${JETPACK_VERSION_BASE}.3"
ARG BASE_IMAGE="nvcr.io/nvidia/l4t-base:${JETPACK_VERSION}"
ARG SOC="t186"
ADD --chown=root:root https://repo.download.nvidia.com/jetson/jetson-ota-public.asc /etc/apt/trusted.gpg.d/jetson-ota-public.asc
RUN chmod 644 /etc/apt/trusted.gpg.d/jetson-ota-public.asc \
&& apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
&& echo "deb https://repo.download.nvidia.com/jetson/common ${JETPACK_VERSION_BASE} main" > /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \
&& echo "deb https://repo.download.nvidia.com/jetson/${SOC} ${JETPACK_VERSION_BASE} main" >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \
&& cat /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \
&& apt-get update \
&& rm -rf /var/lib/apt/lists/*
ARG CUDA=10.2
ENV CUDA=${CUDA}
ENV PATH /usr/local/cuda-$CUDA/bin:/usr/local/cuda/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/cuda-$CUDA/targets/aarch64-linux/lib:${LD_LIBRARY_PATH}
RUN ldconfig
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES all
ARG OPENCV_VERSION=4.7.0
RUN apt-get update && \
apt-get install -y \
bc \
bzip2 \
language-pack-en-base \
python3-distutils \
python3-pip \
build-essential \
cuda-libraries-dev-${CUDA} \
cuda-cudart-dev-${CUDA} \
cuda-compiler-${CUDA} \
libnvinfer-samples \
ca-certificates \
python-dev \
git \
cmake \
wget \
unzip \
yasm \
pkg-config \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libavformat-dev \
libpq-dev \
libxine2-dev \
libglew-dev \
libtiff5-dev \
zlib1g-dev \
libjpeg-dev \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libpostproc-dev \
libswscale-dev \
libeigen3-dev \
libtbb-dev \
libgtk2.0-dev \
pkg-config \
## Python
python3-numpy \
libopencv-dev \
g++ \
libcudnn8 \
nvidia-cudnn8 \
libsm6 \
libxrender-dev \
&& rm -rf /var/lib/apt/lists/*
USER ifm
RUN python3 -m pip install --upgrade pip
RUN pip3 install --requirement /tmp/requirements.txt
USER root
ARG OPENCV_VERSION=4.7.0
RUN cd /opt/ &&\
# Download and unzip OpenCV and opencv_contrib and delte zip files
wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip &&\
unzip $OPENCV_VERSION.zip &&\
rm $OPENCV_VERSION.zip &&\
wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip &&\
unzip ${OPENCV_VERSION}.zip &&\
rm ${OPENCV_VERSION}.zip &&\
# Create build folder and switch to it
mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\
# Cmake configure
cmake \
-DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-${OPENCV_VERSION}/modules \
-DWITH_CUDA=ON \
-DCMAKE_BUILD_TYPE=RELEASE \
# Install path will be /usr/local/lib (lib is implicit)
-DCMAKE_INSTALL_PREFIX=/usr/local \
.. &&\
# Make
make -j"$(nproc)" && \
# Install to /usr/local/lib
make install && \
ldconfig &&\
# Remove OpenCV sources and build folder
rm -rf /opt/opencv-${OPENCV_VERSION} && rm -rf /opt/opencv_contrib-${OPENCV_VERSION}
#RUN ls /usr/local/lib/libopencv*
FROM ghcr.io/ifm/ifm3d:latest-l4t-arm64
USER root
#COPY --from=buildstage /usr/local/include/opencv4/ /usr/local/include/opencv4/
COPY --from=buildstage /home/ifm/venv/lib/python3.9/site-packages /home/ifm/venv/lib/python3.9/site-packages
COPY --from=buildstage /usr/local/lib/python3.9/site-packages/cv2/ /home/ifm/venv/lib/python3.9/site-packages/cv2/
COPY --from=buildstage /usr/local/lib/libopencv* /usr/local/lib/
COPY --from=buildstage /usr/lib/x86_64-linux-gnu/ /usr/lib/x86_64-linux-gnu/
#RUN ldconfig
COPY python /tmp/python
The basis container it's a l4t for TX2
Several try to build the container, but currently only OpenCV works without CUDA

The command returned a non-zero code: 2 (docker)

Build failure with a non-zero code: 2
The docker file is provided below:
FROM ubuntu:bionic
RUN \
apt-get update \
&& apt-get install -y -q curl gnupg \
&& curl -sSL 'http://p80.pool.sks-keyservers.net/pks/lookup?op=get&search=0x8AA7AF1F1091A5FD' | apt-key add - \
&& echo 'deb [arch=amd64] http://repo.sawtooth.me/ubuntu/chime/stable bionic universe' >> /etc/apt/sources.list \
&& apt-get update
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y --allow-unauthenticated -q \
python3-pip \
python3-sawtooth-sdk \
python3-sawtooth-rest-api \
python3-sawtooth-cli \
cron-apt \
curl
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \
&& apt-get install -y nodejs
RUN pip3 install \
pylint \
pycodestyle \
grpcio-tools==1.29.0 \
nose2 \
bcrypt \
pycrypto \
rethinkdb \
sanic \
swagger-ui-py \
itsdangerous
WORKDIR /project/sawtooth-marketplace
COPY sawbuck_app/package.json /project/sawtooth-marketplace/sawbuck_app/
RUN cd sawbuck_app/ && npm install
ENV PATH $PATH:/project/sawtooth-marketplace/bin
# Note that the context must be set to the project's root directory
COPY . .
RUN market-protogen
The following is the LOG from the server that is recorded, I don't know why the build is failing, can anybody guide please?
Service 'market-shell' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y -q curl gnupg
&& curl -sSL 'http://p80.pool.sks-keyservers.net/pks/lookup?op=get&search=0x8AA7AF1F1091A5FD' | apt-key add -
&& echo 'deb [arch=amd64] http://repo.sawtooth.me/ubuntu/chime/stable bionic universe'>> /etc/apt/sources.list
&& apt-get update' returned a non-zero code: 2
......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

"No matching distribution found for fastapi " using pip in Ubuntu Docker

I am trying to create an image to run a FastAPI app in docker and the software that I am using in the APIrequires Ubuntu 16.04. While I am trying to install python packages, I am getting the following error (while other packages are being correctly installed):
No matching distribution found for fastapi
Here is my Docker file code:
FROM ubuntu:16.04
LABEL maintainer="sai"
COPY ./app /api/api
COPY requirements.txt ./requirements.txt
RUN apt-get update \
&& apt install python3-pip -y \
&& pip3 install --upgrade pip==20.0.1 \
&& pip install -r requirements.txt
RUN apt-get update && \
apt-get install -y --no-install-recommends \
g++ \
make \
automake \
autoconf \
bzip2 \
unzip \
wget \
sox \
libtool \
git \
subversion \
python2.7 \
python3 \
zlib1g-dev \
gfortran \
ca-certificates \
patch \
ffmpeg \
vim && \
rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/bin/python2.7 /usr/bin/python
#other toolkit installation commands
ENV PYTHONPATH=/api
WORKDIR /api
EXPOSE 8000
ENTRYPOINT ["uvicorn"]
CMD ["api.main:app", "--host", "0.0.0.0"]
I am new to docker so excuse me for my mistakes. I have a working api i need to dockerize it
also the api involves creating and deleting file and folders is this ok with Docker?
Note
I also tried upgrading pip to latest version but didn't work
any pointers to further helpful resources in dockerizing the api are most welcome

Build Python and Pip from source and "bad interpreter: No such file or directory"

I am trying to build Python and Pip from source. Following is the Dockerfile for it:
FROM buildpack-deps:stretch
ARG PYTHON_VERSION="3.6.5"
ARG PIP_VERSION="20.2"
ARG INSTALLATION_PREFIX="/opt/python/${PYTHON_VERSION}"
WORKDIR /usr/src/python
RUN wget -q https://www.python.org/ftp/python/$PYTHON_VERSION/Python-${PYTHON_VERSION}.tgz \
&& apt-get update \
&& apt-get install -y \
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
curl \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev
RUN tar xvf Python-${PYTHON_VERSION}.tgz \
&& rm -f Python-${PYTHON_VERSION}.tgz
RUN cd Python-$PYTHON_VERSION \
&& ./configure \
--prefix=${INSTALLATION_PREFIX} \
--build=$(dpkg-architecture --query DEB_BUILD_GNU_TYPE) \
--enable-loadable-sqlite-extensions \
--enable-shared \
--with-system-expat \
--with-system-ffi \
--without-ensurepip \
&& make -j $(nproc) \
&& make altinstall
ENV LD_LIBRARY_PATH="${INSTALLATION_PREFIX}/lib:$LD_LIBRARY_PATH"
RUN wget -q https://bootstrap.pypa.io/get-pip.py -O /get-pip.py \
&& /usr/src/python/Python-3.6.5/python /get-pip.py \
--prefix ${INSTALLATION_PREFIX} \
--disable-pip-version-check \
--no-cache-dir \
--no-warn-script-location \
pip==${PIP_VERSION}
WORKDIR /
RUN mv ${INSTALLATION_PREFIX} /tmp/test
ENV LD_LIBRARY_PATH="/tmp/test/lib:$LD_LIBRARY_PATH"
ENV PATH="/tmp/test/bin:$PATH"
When I build the above Dockerfile, it builds fine and I am able to do python3.6 --version and pip --version and I get the expected results.
Now because of a requirement that I have(Imagine building different Python versions from source in a docker image and store these built runtimes somewhere and install them on demand to a location before using it), I need to move this built Python and Pip to a different location, for example /tmp/test...I was hoping that Python and Pip executables would work just as before but when I do a pip --version I get the following error:
root#12c243458190:/# pip --version
bash: /tmp/test/bin/pip: /opt/python/3.6.5/bin/python3.6: bad interpreter: No such file or directory
pip seems to have hard-coded the location of Python to the installation prefix it was given when it was built.
Any ideas on how to fix this issue?

Docker opencv3 Cmake errors

I tried to use docker to build up a Python3 + OpenCV3 with ffmpeg enabled environment.
Since I also want to use GPU to speed up the model, I built using NVIDIA-docker image.
Here is my Dockerfile:
FROM nvidia/cuda:8.0-cudnn5-devel
...
...
#############################################
# OpenCV 3 w/ Python 2.7 from Anaconda
#############################################
RUN cd ~/ &&\
git clone https://github.com/opencv/opencv.git &&\
git clone https://github.com/opencv/opencv_contrib.git &&\
cd opencv && mkdir build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/opt/opencv \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python2.7 BUILD_opencv_python2=True \
-D PYTHON_LIBRARY=/opt/conda/lib/libpython2.7.so \
-D PYTHON_INCLUDE_DIR=/opt/conda/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/opt/conda/lib/python2.7/site-packages/numpy/core/include \
-D PYTHON_EXECUTABLE=/opt/conda/bin/python2.7 -DWITH_FFMPEG=ON \
-D BUILD_SHARED_LIBS=ON .. &&\
make -j4 && make install && ldconfig
ENV PYTHONPATH /opt/opencv/lib/python2.7/site-packages:$PYTHONPATH
Then I found it's finally got an error, which seems couldn't locate the PATH CUDA_CUDA_LIBRARY, since those part was configured in the image nvidia/cuda:8.0-cudnn5-devel, how can I deal with this error?
This is the error message:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_CUDA_LIBRARY (ADVANCED)
linked by target "example_gpu_stereo_match" in directory /root/opencv/samples/gpu
linked by target "example_gpu_bgfg_segm" in directory /root/opencv/samples/gpu
linked by target "example_gpu_morphology" in directory /root/opencv/samples/gpu
linked by target "example_gpu_pyrlk_optical_flow" in directory /root/opencv/samples/gpu
linked by target "example_gpu_video_reader" in directory /root/opencv/samples/gpu
linked by target "example_gpu_surf_keypoint_matcher" in directory /root/opencv/samples/gpu
linked by target "example_gpu_farneback_optical_flow" in directory /root/opencv/samples/gpu
linked by target "example_gpu_hog" in directory /root/opencv/samples/gpu
linked by target "example_gpu_optical_flow" in directory /root/opencv/samples/gpu
linked by target "example_gpu_houghlines" in directory /root/opencv/samples/gpu
linked by target "example_gpu_driver_api_stereo_multi" in directory /root/opencv/samples/gpu
linked by target "example_gpu_cascadeclassifier" in directory /root/opencv/samples/gpu
linked by target "example_gpu_super_resolution" in directory /root/opencv/samples/gpu
linked by target "example_gpu_generalized_hough" in directory /root/opencv/samples/gpu
linked by target "example_gpu_driver_api_multi" in directory /root/opencv/samples/gpu
linked by target "example_gpu_opticalflow_nvidia_api" in directory /root/opencv/samples/gpu
linked by target "example_gpu_stereo_multi" in directory /root/opencv/samples/gpu
linked by target "example_gpu_video_writer" in directory /root/opencv/samples/gpu
linked by target "example_gpu_multi" in directory /root/opencv/samples/gpu
linked by target "example_gpu_cascadeclassifier_nvidia_api" in directory /root/opencv/samples/gpu
linked by target "example_gpu_alpha_comp" in directory /root/opencv/samples/gpu
-- Configuring incomplete, errors occurred!
Upate the whole Dockerfile
FROM nvidia/cuda:8.0-cudnn5-devel
MAINTAINER jiandong <jjdblast#gmail.com>
ARG THEANO_VERSION=rel-0.8.2
ARG TENSORFLOW_VERSION=0.8.0
ARG TENSORFLOW_ARCH=gpu
ARG KERAS_VERSION=1.0.3
#RUN echo -e "\n**********************\nNVIDIA Driver Version\n**********************\n" && \
# cat /proc/driver/nvidia/version && \
# echo -e "\n**********************\nCUDA Version\n**********************\n" && \
# nvcc -V && \
# echo -e "\n\nBuilding your Deep Learning Docker Image...\n"
# Necessary packages and FFmpeg
RUN apt-get update && apt-get install -y \
apt-utils \
autoconf \
automake \
bc \
bzip2 \
build-essential \
ca-certificates \
cmake \
curl \
ffmpeg \
g++ \
gfortran \
git \
libass-dev \
libatlas-base-dev \
libavcodec-dev \
libavformat-dev \
libavresample-dev \
libav-tools \
libdc1394-22-dev \
libffi-dev \
libfreetype6-dev \
libglib2.0-0 \
libhdf5-dev \
libjasper-dev \
libjpeg-dev \
liblapack-dev \
liblcms2-dev \
libopenblas-dev \
libopencv-dev \
libopenjpeg5 \
libpng12-dev \
libsdl1.2-dev \
libsm6 \
libssl-dev \
libtheora-dev \
libtiff5-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libvtk6-dev \
libwebp-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
libxext6 \
libxrender1 \
libzmq3-dev \
nano \
pkg-config \
python-dev \
python-pycurl \
software-properties-common \
texinfo \
unzip \
vim \
webp \
wget \
zlib1g-dev \
&& \
apt-get clean && \
apt-get autoremove && \
rm -rf /var/lib/apt/lists/* && \
# Link BLAS library to use OpenBLAS using the alternatives mechanism (https://www.scipy.org/scipylib/building/linux.html#debian-ubuntu)
update-alternatives --set libblas.so.3 /usr/lib/openblas-base/libblas.so.3
# Install pip
RUN curl -O https://bootstrap.pypa.io/get-pip.py && \
python get-pip.py && \
rm get-pip.py
# Add SNI support to Python
RUN pip --no-cache-dir install \
pyopenssl \
ndg-httpsclient \
pyasn1
#############################################
# Anaconda Python 2.7
#############################################
# RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
# wget https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh -O ~/anaconda.sh && \
# /bin/bash ~/anaconda.sh -b -p /opt/conda && \
# rm ~/anaconda.sh
ADD Anaconda2-4.2.0-Linux-x86_64.sh /root/anaconda.sh
RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
/bin/bash /root/anaconda.sh -b -p /opt/conda && \
rm /root/anaconda.sh
ENV PATH /opt/conda/bin:$PATH
RUN conda update -y conda && \
conda update -y numpy && \
conda update -y scipy && \
conda update -y pandas && \
conda update -y matplotlib && \
conda update -y requests && \
conda install -c conda-forge pika=0.10.0 && \
conda install scikit-image && \
pip install --upgrade pip && \
pip install --upgrade git+git://github.com/Theano/Theano.git && \
pip install pyscenedetect --upgrade --no-dependencies
# Configuration file for theano
RUN echo -e "[global]\nfloatX = float32\ndevice = cpu\nopenmp = True" >> ~/.theanorc
#############################################
# OpenCV 3 w/ Python 2.7 from Anaconda
#############################################
RUN cd ~/ &&\
git clone https://github.com/opencv/opencv.git &&\
git clone https://github.com/opencv/opencv_contrib.git &&\
cd opencv && mkdir build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so \
-D CMAKE_INSTALL_PREFIX=/opt/opencv \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python2.7 BUILD_opencv_python2=True \
-D PYTHON_LIBRARY=/opt/conda/lib/libpython2.7.so \
-D PYTHON_INCLUDE_DIR=/opt/conda/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/opt/conda/lib/python2.7/site-packages/numpy/core/include \
-D PYTHON_EXECUTABLE=/opt/conda/bin/python2.7 -DWITH_FFMPEG=ON \
-D BUILD_SHARED_LIBS=ON .. &&\
make -j4 && make install && ldconfig
ENV PYTHONPATH /opt/opencv/lib/python2.7/site-packages:$PYTHONPATH
# Jupyter
python -m ipykernel.kernelspec
# Install TensorFlow
RUN pip --no-cache-dir install \
https://storage.googleapis.com/tensorflow/linux/${TENSORFLOW_ARCH}/tensorflow-${TENSORFLOW_VERSION}-cp27-none-linux_x86_64.whl
# Install Theano and set up Theano config (.theanorc) for CUDA and OpenBLAS
RUN pip --no-cache-dir install git+git://github.com/Theano/Theano.git#${THEANO_VERSION} && \
\
echo "[global]\ndevice=gpu\nfloatX=float32\noptimizer_including=cudnn\nmode=FAST_RUN \
\n[lib]\ncnmem=0.95 \
\n[nvcc]\nfastmath=True \
\n[blas]\nldflag = -L/usr/lib/openblas-base -lopenblas \
\n[DebugMode]\ncheck_finite=1" \
> /root/.theanorc
# Install Keras
RUN pip --no-cache-dir install git+git://github.com/fchollet/keras.git#${KERAS_VERSION}
# Set up notebook config
COPY jupyter_notebook_config.py /root/.jupyter/
# Jupyter has issues with being run directly: https://github.com/ipython/ipython/issues/7062
COPY run_jupyter.sh /root/
# Expose Ports for TensorBoard (6006), Ipython (8888)
EXPOSE 6006 8888
WORKDIR "/root"
CMD ["/bin/bash"]
Update
After I tried add the -D CUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so in my Dockerfile cmake command, I got this error:
[ 15%] Linking CXX static library ../../lib/libopencv_perf_stereo_pch_dephelp.a
/usr/bin/cmake: error while loading shared libraries: libkrb5.so.3: failed to map segment from shared object
modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/build.make:94: recipe for target 'lib/libopencv_perf_stereo_pch_dephelp.a' failed
make[2]: *** [lib/libopencv_perf_stereo_pch_dephelp.a] Error 127
CMakeFiles/Makefile2:19133: recipe for target 'modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/all' failed
make[1]: *** [modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 15%] Linking CXX static library ../../lib/libopencv_stereo_pch_dephelp.a
[ 15%] Built target opencv_stereo_pch_dephelp
[ 15%] Linking CXX static library ../../lib/libopencv_test_stereo_pch_dephelp.a
[ 15%] Built target opencv_test_stereo_pch_dephelp
[ 15%] Linking CXX static library ../../lib/libopencv_superres_pch_dephelp.a
[ 15%] Built target opencv_superres_pch_dephelp
make: *** [all] Error 2
Makefile:160: recipe for target 'all' failed
After inspecting the Docker image for nvidia/cuda:8.0-cudnn5-devel, it seems that you need to add the following argument to cmake:
-DCUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so
If anyone using Ubuntu 16.04, Add -DCUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/lib64/stubs/libcuda.so to you CMAKE.

Categories

Resources