首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免依赖码头

避免依赖码头
EN

Stack Overflow用户
提问于 2020-04-28 08:53:05
回答 3查看 440关注 0票数 0

我用Python构建了一个AI应用程序,涉及大量的Python库。在这一点上,我想运行我的应用程序在一个码头容器,使AI应用程序服务。

,我有哪些关于依赖程序的选项,以便自动下载所有必需的库?

作为一个弱的替代方案,我尝试使用与我的Docker文件相同级别的"requirement.txt“文件,但这是行不通的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-28 09:50:49

你有几个选择。这在很大程度上取决于用例、最终构建的容器数量、生产和开发环境等等。

通常,如果您有一个人工智能应用程序,您将需要一个图形卡驱动程序预先安装在您的主机系统,以进行模型培训。这意味着最终您将不得不想出一种方法来实现驱动程序的自动化、安装或编写指令,以便最终用户做到这一点。对于一个应用程序,如果您的前端或后端数据库位于容器之外,那么您可能还需要在docker映像中使用数据库驱动程序。这里是我的一个用例的简化示例,它的要求是为数据管道构建对接器。

代码语言:javascript
复制
#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驱动程序,如果你在为模型服务,而不是强制的。

票数 0
EN

Stack Overflow用户

发布于 2020-04-28 09:01:36

您的Dockerfile需要说明才能安装这些需求。

代码语言:javascript
复制
COPY requirement.txt requirement.txt
RUN pip install -r requirement.txt
票数 2
EN

Stack Overflow用户

发布于 2020-04-28 11:55:58

感谢你提出的非常有益的意见:

我的伪造文件:

代码语言:javascript
复制
# 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“添加了额外的行,这就像一种魅力。非常感谢!

  • ,因为我只想在容器中运行一个部署,所以我需要经过训练的模型,所以不需要GPU。为此我有一台本地机器。通过适当的挂载,我将.h5传递到容器。

@pyeR_biz:非常感谢您提供的关于管道的提示。这是我没有经验,但肯定会在不久的将来做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61476269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档