我用Python构建了一个AI应用程序,涉及大量的Python库。在这一点上,我想运行我的应用程序在一个码头容器,使AI应用程序服务。
,我有哪些关于依赖程序的选项,以便自动下载所有必需的库?
作为一个弱的替代方案,我尝试使用与我的Docker文件相同级别的"requirement.txt“文件,但这是行不通的。
发布于 2020-04-28 09:50:49
你有几个选择。这在很大程度上取决于用例、最终构建的容器数量、生产和开发环境等等。
通常,如果您有一个人工智能应用程序,您将需要一个图形卡驱动程序预先安装在您的主机系统,以进行模型培训。这意味着最终您将不得不想出一种方法来实现驱动程序的自动化、安装或编写指令,以便最终用户做到这一点。对于一个应用程序,如果您的前端或后端数据库位于容器之外,那么您可能还需要在docker映像中使用数据库驱动程序。这里是我的一个用例的简化示例,它的要求是为数据管道构建对接器。
#Taken from puckel/docker-airflow
#can look up this image name on google to see which OS it is based on.
FROM python:3.6-slim-buster
LABEL maintainer="batman"
# Never prompt the user for choices on installation/configuration of packages
ENV DEBIAN_FRONTEND noninteractive
ENV TERM linux
# Set some default configuration for data pipeline management tool called airflow
ARG AIRFLOW_VERSION=1.10.9
ARG AIRFLOW_USER_HOME=/usr/local/airflow
ARG AIRFLOW_DEPS=""
ENV AIRFLOW_HOME=${AIRFLOW_USER_HOME}
# here install some linux dependencies required to run the pipeline.
# use apt-get install, apt-get auto-remove etc to reduce size of image
# curl and install sql server odbc driver for my linux
RUN set -ex \
&& buildDeps=' freetds-dev libkrb5-dev libsasl2-dev libssl-dev libffi-dev libpq-dev git' \
&& apt-get update -yqq \
&& apt-get upgrade -yqq \
&& apt-get install -yqq --no-install-recommends \
$buildDeps freetds-bin build-essential default-libmysqlclient-dev \
apt-utils curl rsync netcat locales gnupg wget \
&& useradd -ms /bin/bash -d ${AIRFLOW_USER_HOME} airflow \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ #
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 \
&& ACCEPT_EULA=Y apt-get install -y mssql-tools \
&& pip install apache-airflow[crypto,celery,postgres,hive,jdbc,mysql,ssh${AIRFLOW_DEPS:+,}${AIRFLOW_DEPS}]==${AIRFLOW_VERSION} \
&& apt-get purge --auto-remove -yqq $buildDeps \
&& apt-get autoremove -yqq --purge \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/* \
/usr/share/man \
/usr/share/doc \
/usr/share/doc-base
# Install all required packages in python environment from requirements.txt (I generally remove version numbers if my python version are same)
ADD ./requirements.txt /config/
RUN pip install -r /config/requirements.txt
# CLEANUP
RUN apt-get autoremove -yqq --purge \
&& apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
/tmp/* \
/var/tmp/* \
/usr/share/man \
/usr/share/doc \
/usr/share/doc-base
#CONFIGURATION
COPY script/entrypoint.sh /entrypoint.sh
COPY config/airflow.cfg ${AIRFLOW_USER_HOME}/airflow.cfg
# hand ownership of libraries to relevant user
RUN chown -R airflow: ${AIRFLOW_USER_HOME}
#expose ports to outside container for web app access
EXPOSE 8080 5555 8793
USER airflow
WORKDIR ${AIRFLOW_USER_HOME}
ENTRYPOINT ["/entrypoint.sh"]
CMD ["webserver"]1)选择一个具有您需要的操作系统的适当的基本映像。2)如果你在训练一个模型,就安装你的gpu驱动程序,如果你在为模型服务,而不是强制的。
发布于 2020-04-28 09:01:36
您的Dockerfile需要说明才能安装这些需求。
COPY requirement.txt requirement.txt
RUN pip install -r requirement.txt发布于 2020-04-28 11:55:58
感谢你提出的非常有益的意见:
我的伪造文件:
# Python 3.7.3
FROM python:3.7-slim
# Set the working directory to /app
WORKDIR /app
COPY greeter_server.py /app
COPY AspenTechClient.py /app
COPY OpcUa_pb2.py /app
COPY OpcUa_pb2_grpc.py /app
COPY helloworld_pb2.py /app
COPY helloworld_pb2_grpc.py /app
COPY Models.py /app
ADD ./requirement.txt /app
# Training & Validation data we need
RUN mkdir -p /app/output
RUN pip install -r requirement.txt
#RUN pip3 install grpcio grpcio-tools
#RUN pip install protobuf
#RUN pip install pandas
#RUN pip install scipy
#expose ports to outside container for web app access
EXPOSE 10500
# Argument to python command
CMD [ "python", "/app/greeter_server.py" ]通过这里的提示,我已经为"requirement.txt“添加了额外的行,这就像一种魅力。非常感谢!
@pyeR_biz:非常感谢您提供的关于管道的提示。这是我没有经验,但肯定会在不久的将来做到这一点。
https://stackoverflow.com/questions/61476269
复制相似问题