# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 # Build an image that can do training and inference in SageMaker # This is a Python 3 image that uses the nginx, gunicorn, flask stack # for serving inferences in a stable way. FROM ubuntu:18.04 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get -y update && apt-get -y install --reinstall build-essential && apt-get install -y --no-install-recommends \ wget \ python3-pip \ python3-matplotlib \ python3-setuptools \ python3-dev \ nginx \ cmake \ ca-certificates \ && cd /usr/local/bin \ && ln -s /usr/bin/python3.6 python \ && rm -rf /var/lib/apt/lists/* RUN ln -s /usr/bin/python3 /usr/bin/python RUN ln -s /usr/bin/pip3 /usr/bin/pip # Here we get all python packages. # There's substantial overlap between scipy and numpy that we eliminate by # linking them together. Likewise, pip leaves the install caches populated which uses # a significant amount of space. These optimizations save a fair amount of space in the # image, which reduces start up time. RUN pip --no-cache-dir install matplotlib pathlib numpy==1.16.2 scipy==1.2.1 scikit-learn==0.20.2 pandas flask gunicorn gevent fmpy==0.3.1 # Set some environment variables. PYTHONUNBUFFERED keeps Python from buffering our standard # output stream, which means that logs can be delivered to the user quickly. PYTHONDONTWRITEBYTECODE # keeps Python from writing the .pyc files which are unnecessary in this case. We also update # PATH so that the train and serve programs are found when the container is invoked. ENV PYTHONUNBUFFERED=TRUE ENV PYTHONDONTWRITEBYTECODE=TRUE ENV PATH="/opt/program:${PATH}" # Set up the program in the image COPY runtime /opt/program/ WORKDIR /opt/program/ RUN chmod +x /opt/program/serve