首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用船坞的开维诺

使用船坞的开维诺
EN

Stack Overflow用户
提问于 2020-06-09 07:19:22
回答 2查看 1.6K关注 0票数 1

我正在尝试使用来自码头集装箱的OpenVINO。我使用来自官方网站linux.html的docker文件

代码语言:javascript
复制
FROM ubuntu:18.04
USER root
WORKDIR /
SHELL ["/bin/bash", "-xo", "pipefail", "-c"]
# Creating user openvino
RUN useradd -ms /bin/bash openvino && \
    chown openvino -R /home/openvino
ARG DEPENDENCIES="autoconf \
                  automake \
                  build-essential \
                  cmake \
                  cpio \
                  curl \
                  gnupg2 \
                  libdrm2 \
                  libglib2.0-0 \
                  lsb-release \
                  libgtk-3-0 \
                  libtool \
                  udev \
                  unzip \
                  dos2unix"
RUN apt-get update && \
    apt-get install -y --no-install-recommends ${DEPENDENCIES} && \
    rm -rf /var/lib/apt/lists/*
WORKDIR /thirdparty
RUN sed -Ei 's/# deb-src /deb-src /' /etc/apt/sources.list && \
    apt-get update && \
    apt-get source ${DEPENDENCIES} && \
    rm -rf /var/lib/apt/lists/*
# setup Python
ENV PYTHON python3.6
RUN apt-get update && \
    apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON}=3.6.9-1~18.04 && \
    rm -rf /var/lib/apt/lists/*
ARG package_url=ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz
ARG TEMP_DIR=/tmp/openvino_installer
WORKDIR ${TEMP_DIR}
ADD ${package_url} ${TEMP_DIR}
# install product by installation script
ENV INTEL_OPENVINO_DIR /opt/intel/openvino
RUN tar -xzf ${TEMP_DIR}/*.tgz --strip 1
RUN sed -i 's/decline/accept/g' silent.cfg && \
    ${TEMP_DIR}/install.sh -s silent.cfg && \
    ${INTEL_OPENVINO_DIR}/install_dependencies/install_openvino_dependencies.sh
WORKDIR /tmp
RUN rm -rf ${TEMP_DIR}
# installing dependencies for package
WORKDIR /tmp
RUN ${PYTHON} -m pip install --no-cache-dir setuptools && \
    find "${INTEL_OPENVINO_DIR}/" -type f -name "*requirements*.*" -path "*/${PYTHON}/*" -exec ${PYTHON} -m pip install --no-cache-dir -r "{}" \; && \
    find "${INTEL_OPENVINO_DIR}/" -type f -name "*requirements*.*" -not -path "*/post_training_optimization_toolkit/*" -not -name "*windows.txt"  -not -name "*ubuntu16.txt" -not -path "*/python3*/*" -not -path "*/python2*/*" -exec ${PYTHON} -m pip install --no-cache-dir -r "{}" \;
WORKDIR ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker
RUN source ${INTEL_OPENVINO_DIR}/bin/setupvars.sh && \
    ${PYTHON} -m pip install --no-cache-dir -r ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker/requirements.in && \
    ${PYTHON} ${INTEL_OPENVINO_DIR}/deployment_tools/open_model_zoo/tools/accuracy_checker/setup.py install
WORKDIR ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit
RUN if [ -f requirements.txt ]; then \
        ${PYTHON} -m pip install --no-cache-dir -r ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit/requirements.txt && \
        ${PYTHON} ${INTEL_OPENVINO_DIR}/deployment_tools/tools/post_training_optimization_toolkit/setup.py install; \
    fi;
# Post-installation cleanup and setting up OpenVINO environment variables
RUN if [ -f "${INTEL_OPENVINO_DIR}"/bin/setupvars.sh ]; then \
        printf "\nsource \${INTEL_OPENVINO_DIR}/bin/setupvars.sh\n" >> /home/openvino/.bashrc; \
        printf "\nsource \${INTEL_OPENVINO_DIR}/bin/setupvars.sh\n" >> /root/.bashrc; \
    fi;
RUN find "${INTEL_OPENVINO_DIR}/" -name "*.*sh" -type f -exec dos2unix {} \;
USER openvino
WORKDIR ${INTEL_OPENVINO_DIR}
CMD ["/bin/bash"]

但是,如果我尝试使用以下行启动python程序:

代码语言:javascript
复制
from openvino.inference_engine import IECore

它编写ModuleNotFoundError,没有名为“openvino”的模块。我尝试用这些命令来源文件setupvars.sh,但是没有帮助。

代码语言:javascript
复制
RUN /bin/bash -c "source /opt/intel/openvino/bin/setupvars.sh"
RUN source /opt/intel/openvino/bin/setupvars.sh

我应该如何使用来自docker的openvino python应用程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-10 00:05:50

如果您正在构建Docker映像,并且试图在docker映像之外运行OpenVINO Python应用程序,它将无法工作。您可以创建Docker映像并以交互方式运行Docker映像,以在映像中执行Python应用程序。有关https://docs.docker.com/engine/reference/run/的更多信息,请参阅docker run

在我的环境中使用时,您的Dockerfile中注意到了几个问题。在下面的更改和步骤之后,您应该能够导入openvino模块并运行Python应用程序:

在Dockerfile第34行中:

代码语言:javascript
复制
// Before:
apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON}=3.6.9-1~18.04 && \
// After:
apt-get install -y --no-install-recommends python3-pip python3-dev lib${PYTHON} && \

在Dockerfile第36行中:

代码语言:javascript
复制
// Before:    
ARG package_url=ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz
// After:   
ARG package_url=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz

在上面的更改之后,运行docker build . -t <image-name> (即对接构建)。( -t openvino-ubuntu)建立码头形象。如果成功,您将看到Successfully built bf2280a70ffd Successfully tagged openvino-<image-name>:latest

然后与docker run -it <image_name>交互地运行映像(即docker运行-it openvino-ubuntu)。你会看到类似于:

代码语言:javascript
复制
[setupvars.sh] OpenVINO environment initialized
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$

要验证Python能够从openvino模块导入IECore,请使用Python解释器进行测试:

代码语言:javascript
复制
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from openvino.inference_engine import IECore
>>>    

若要运行/opt/intel/openvino/deployment_tools/inference_engine/samples/python,Python应用程序,请测试/opt/intel/openvino/deployment_tools/inference_engine/samples/python,中的一个示例应用程序,例如object_detection_sample_ssd.py

代码语言:javascript
复制
openvino@ce618ea2bc47:/opt/intel/openvino_2020.2.120$ python3 /opt/intel/openvino/deployment_tools/inference_engine/samples/python/object_detection_sample_ssd/object_detection_sample_ssd.py

usage: object_detection_sample_ssd.py [-h] -m MODEL -i INPUT [INPUT ...]
                                  [-l CPU_EXTENSION] [-d DEVICE]
                                  [--labels LABELS] [-nt NUMBER_TOP]
object_detection_sample_ssd.py: error: the following arguments are required: -m/--model, -i/--input
票数 6
EN

Stack Overflow用户

发布于 2022-03-14 04:44:57

setupvars.sh所做的本质上是导出环境变量,具体而言,这些变量使OpenVINO正确工作:

  1. 将openvino模块路径附加到PYTHONPATH,这样python解释器就知道在哪里找到openvino包(所有python源代码)。
  2. 将openvino共享库路径附加到LD_LIBRARY_PATH,因此openvino运行时所依赖的任何.so文件都可以通过系统动态链接器找到。

source /opt/intel/openvino/bin/setupvars.sh修改当前bash进程的环境变量,执行命令行,随后从同一个bash解释器调用所有子进程(继承父进程环境变量)。

但是在Dockerfile中,运行指令以不同方式执行命令,每个命令都在单独的容器中执行,并且只在命令之间保存对图像的影响,对环境变量的任何修改都会丢失。

稍后,在构建了docker映像并尝试从它启动容器并在容器内使用openvino之后,在使用openvino之前,必须在控制台中运行source /opt/intel/openvino/bin/setupvars.sh

但是,您可以通过将此命令放入docker映像中的/root/.bashrc中来避免这种繁琐的步骤,因此从容器调用的bash将自动执行它。这也是大多数openvino dockerfile所做的事情:

代码语言:javascript
复制
RUN echo "source /opt/intel/openvino/bin/setupvars.sh" >> /root/.bashrc

检查

顺便说一句,一个python包通常不应该依赖于为它正确工作所需的脚本,标准python包会将python源代码复制到标准位置,并且所有共享对象文件都使用RPATH/RUN_PATH来解决动态链接问题(w/o将这样的文件安装到/usr/lib中)。例如,如果您通过pip安装openvino,则不需要此步骤。

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

https://stackoverflow.com/questions/62277098

复制
相关文章

相似问题

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