如何从 OpenVINO™ 的主分支构建 Python Wheel 包

openlab_4276841a 更新于 1年前

作者:Adrian Boguszewski 和 Raymond Lo

什么是Wheel包?

Python *.whl文件或者叫Wheel包,是一个 Python 生态系统组件,可简化包的安装。 它在包分发过程中提供更快的安装时间和更高的可靠性。 该格式包含只需要移动到要安装的目标系统上的正确位置的文件和元数据。 如果你使用 pip 安装 Python 包,它很可能是一个 wheel 包。

本文将教读者从零开始从OpenVINO™ 的主分支制作一个openvino .whl 文件以便于安装OpenVINO™。

已经有稳定版本,为什么我还需要从主分支构建Wheel包?

有时,出于以下原因,需要从当前主分支构建安装包(the bleeding-edge build):

1. 即使在稳定版本中也存在错误。 如果您已经不能等到下一个版本,急需已修复这些错误的安装包 —— 唯一的解决方案是从主分支自行构建Wheel包。

2. 你需要一个已经实现但等待正式发布的新特性——手动从主分支自行构建Wheel包。

3. 你的资源是有限的。 因此,您需要一个仅包含所需模块的自定义包 —— 自定义编译并构建主分支Wheel包。

4. 因为它是开源的,你可以DIY。


如何编译 OpenVINO™ 并构建 Python 包? 

要构建 OpenVINO™ 工具包,您可以使用干净的 Ubuntu 20.04 或 Ubuntu 18.04。 为避免依赖性问题,我们建议在您现有的操作系统环境中使用 Docker。本文的全部步骤在12代Intel®酷睿处理器i3-12100F和Ubuntu 20.04.4LTS上完成测试,如图1-1所示。现在,让我们开始吧!

图1-1  测试环境

第一步:安装并设置Docker。请按照官方 Docker 文档安装Docker和 Linux 安装后的说明解决权限问题。 我们还建议您为 8 核计算机分配至少 8GB 的 RAM。 如果您运行编译错误,请增加 RAM 大小并重新运行脚本。 安装和配置过程完成后,让我们运行:docker run hello world检查一下 Docker 是否正常工作,如图1-2所示。

图1-2  Docker安装成功并运行正常!

接下来,请下载并运行 Ubuntu 容器。 您可以使用 18.04 或 20.04。 如果您希望您的软件包更便携并与旧版本的 Ubuntu 一起使用,请使用 Ubuntu 18.04。

运行命令:

sudo docker pull ubuntu:20.04
sudo docker run -it ubuntu:20.04

下载并运行ubuntur20.04容器,如图1-3所示。

图1-3  下载并运行Ubuntu 20.04容器

恭喜!您已经在新的Ubuntu20.04容器里面了。此阶段的最后一步是在 Docker 中安装 git 和 sudo,并将目录更改为 /opt。

运行命令:

apt update
apt install git sudo
cd /opt

完成安装git和sudo,并将目录更改为 /opt,如图1-4所示。

图1-4  进入/opt目录

注意!接下来的所有步骤都在上述这个Docker容器中运行。

第二步:克隆OpenVINO的代码仓和子代码仓。 OpenVINO™ 使用 oneDNN 和 OpenCV 等软件包。在代码检出(checkout)时,您将从它们中检索出最新的源代码。 由于OpenVINO代码仓有很多子模块,因此请确保使用 --recurse-submodules 标志运行。 这可能需要一段时间,具体取决于您的互联网连接。

使用命令:

git clone --recurse-submodules --single-branch --branch=master https://github.com/openvinotoolkit/openvino.git

完成克隆OpenVINO代码仓和子代码仓到本地,如图1-5所示。

图1-5  克隆OpenVINO代码仓到本地

若您在中国,请参考《clone submodules via gitee mirrors》改用下面的命令:

克隆子模块成功后,如图1-6所示。

图1-6  克隆子模块

第三步:安装构建(Build)依赖项。下面是一个有用的脚本,但它不会为 Python 安装依赖项,因此需要额外的步骤。

cd openvino
./install_build_dependencies.sh
apt install cython3
pip3 install --upgrade pip
pip3 install -r src/bindings/python/wheel/requirements-dev.txt

如果要构建 GPU 插件(支持集成 GPU),则必须为 OpenCL 安装计算运行时。 如果您发现任何错误,请参阅此处的说明

 apt install intel-opencl-icd

第四步:编译源代码。到此,您的开发环境现已准备就绪,您可以在启用 Python 和 wheel 选项的情况下配置和运行 cmake。 这将创建.wheel文件和所有其他可用于发布的 C++ 二进制文件。

输入命令:

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_PYTHON=ON -DENABLE_SYSTEM_PUGIXML=OFF -DENABLE_WHEEL=ON ..

确保显示以下选项,如图1-7所示,表示将构建 CPU、GPU 和 VPU 的插件,以及 Python 支持(本例中为 Python 3.8.10)。若要针对其他版本的 Python 进行编译,请使用附加选项:

 -DPYTHON_EXECUTABLE、-DPYTHON_LIBRARY 和 -DPYTHON_INCLUDE_DIR 选项。

有关更多信息,请参阅《Additional Build Options

图1-7  cmake 选项

接着运行以最大线程数运行Make,并等待 15 到 30 分钟(取决于您的机器),命令如下:

make --jobs=$(nproc --all)

在极少数情况下,操作系统可能会终止您的编译。 如果您遇到这种情况,如所示,请增加您的 RAM 或同时使用较少的jobs重新make

图1-8  内存不足

在一切编译完成后,您可以在“build”文件夹下的”wheels”目录中找到wheel包,既有OpenVINO Runtime包也有OpenVINO development包,如图1-9所示。

图1-9  编译成功获得wheel安装包

需要注意的是,如图1-9所示的wheel包在您的docker容器中。 您需要做的最后一件事是将它们**到您的主机上。

请先按 Ctrl+P,再按 Ctrl+Q 退出容器而不停止它;接着运行 docker ps 以获取容器的 id ,并通过容器id将容器中的wheel文件**到您的主机。

docker ps -a
docker cp <container_id>:/opt/openvino/build/wheels/openvino_dev-2022.3.0-000-py3-none-any.whl .
docker cp <container_id>:/opt/openvino/build/wheels/openvino-2022.3.0-000-cp38-cp38-manylinux_2_31_x86_64.whl .

到此,恭喜您,您已经获得了最新的OpenVINOTM wheel安装包了!


在目标机器上使用最新的 OpenVINO™ wheel安装包 

创建一个新的虚拟环境并在其中安装 openvino-dev。 您应该使用与编译 OpenVINO™ 时的相同版本的 Python 和 Ubuntu 操作系统。

python3.8 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install openvino-2022.3.0-000-cp38-cp38-manylinux_2_31_x86_64.whl
pip install openvino_dev-2022.3.0-000-py3-none-any.whl

让我们运行一个基准测试,看看是否一切正常。 让它成为在 CPU 上运行的 Open Model Zoo 中的人员检测模型。 您可能还需要使用 apt 安装 libgl-dev。

omz_downloader --name person-detection-0200
benchmark_app -m intel/person-detection-0200/FP16-INT8/person-detection-0200.xml -d CPU -t 10


看,它正常工作了!到此,现在您已准备好导入 OpenVINO™ 并在 Python(本例中为 Python 3.8.10)中运行您的代码。

Python 3.8.10 (default, Jun 22 2022, 20:18:18)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import openvino
>>>


免责声明:尽管您能够构建和运行 OpenVINO™ 的前沿技术,但请注意主分支不稳定并且可能存在未识别的错误。 本编译是基于 000f5d8049fd45ddb8b070b0d7a892b2a14ebe11 提交完成的。


参考文献

Solomon Brad, What Are Python Wheels and Why Should You Care? Available at: https://realpython.com/python-wheels/ (accessed: 23rd Aug 2022)

Docker Team, Install Docker Engine on Ubuntu. Available at: https://docs.docker.com/engine/install/ubuntu/ (accessed: 23rd Aug 2022)

Docker Team, Post-installation steps for Linux. Available at: https://docs.docker.com/engine/install/linux-postinstall/ (accessed: 23rd Aug 2022)

Docker Team, Runtime options with Memory, CPUs, and GPUs. Available at: https://docs.docker.com/config/containers/resource_constraints/ (accessed: 23rd Aug 2022)

Intel, GPGPU Installation guide Ubuntu 20.04. Available at: https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-focal.html (accessed: 23rd Aug 2022)

OpenVINO Team, Building for Linux. Available at: https://github.com/openvinotoolkit/openvino/wiki/BuildingForLinux (accessed: 23rd Aug 2022)

OpenVINO Team, Open Model Zoo. Available at: https://github.com/openvinotoolkit/open_model_zoo (accessed: 23rd Aug 2022)

0个评论