如何运用OpenVINO打造一个私有的AI运算环境

电子说

1.3w人已加入

描述

OpenVINO强大之处在于整合了当前AI经常应用的情境,像是图片或是影像的对象辨识、语音识别、自然语言与数据推荐系统等等,而透过这个套件的Open Model Zoo可以导入现有多个常用框架的模型,像是Caffe、TensorFlow、MXNet、Kaldi与ONNX,无疑是个现成的参考数据库。

 

OpenVINO支持现有多个常用框架的模型(Source:Intel)

Intel OpenVINO 工具套件包含的项目实在太多,要做到基础入门我想非常快。但如果要真的上手到导入既有的商业项目中,我想还是需要花不少时间。学习Intel OpenVINO 工具集我想是非常值得去投资的,后续对于导入AI应用到升级与维护项目,会非常的容易。

以下的介绍将会以短篇的模式进行,我使用以下的环境去进行学习与测试:

1.硬件:

•Rock X Intel(R) Atom(TM) x5-Z8350 1.4GHz CPU. 4Gb RAM 与 128Gb 的SD卡环境

•EFI单板计算机,使用i7-1185G7E 2.8GHz 11代的Intel CPU, 16Gb RAM 与 128Gb SSD.

•2019年Mac book Pro 15吋 i7 2.6GHz CPU, 使用Parallels 设定两个ubuntu VM. 分别设定 2Cores与4 Cores的环境

2. O/S:分别使用ubuntu server20.04 与 ubuntu desktop 20.04 两个版本进行测试。

3. OpenVINO工具包版本: 2021.4

个人接触与学习使用OpenVINO,目地都在于如何将这个工具应用在未来公司的项目上,而选用Ubuntu Linux的操作系统,一方面是考虑Open Source 降低入门需要的投资成本,再者也是因为公司内部整体的建置维护环境。如果有需要以Windows操作系统为建置环境,可以再多参考官方的文件。

我自己个人打算在OpenVINO完成三大目标:

1.应用DL Workbench可以选用现有或是自制的模型,透过GUI接口,轻松完成模型的分析与部署工作。

2.使用Nodejs的语言去使用OpenVINO提供的各种资源进行开发。

3.将V7RC上的道路辨识功能,透过OpenVINO的环境,使用Nodejs语言去重现功能。

首部曲– 从DL Workbench开始谈起

在2018年我开始接触AI,是基于想在公司的产品V7RC中导入AI的元素,当时我希望可以透过遥控车上面的镜头传回到手机上,透过手机上的运算资源进行演算,辨识影像中的物体。最早透过同事的协助找到Framework,使用Python进行模型训练,最后产生出的结果去实际应用,效果很差,而且还不知道如何整合到iOS与Android的APP。

后来Google Cloud的AutoML 提供了一个模型训练很好的环境,训练好的模型可以直接使用Tensorflow Lite SDK整合到iOS与Android的APP中。这上面有个非常重要的关键在于一个好的GUI,让使用者很容易地上手,去进行模型训练,最后导出到自己的应用上。

后来像是Teachable Machine 也提供很好的GUI给使用者,对于入门的使用者来说,也的确够用,但截至目前,我们的工程师还无法将训练成果部署到APP上。

DL Workbench最棒的地方在于可以从多种不同常用的Framework选择自己要汇入的模型,或是汇入自己的模型,进行训练,并且可以选择使用哪个装置进行训练与分析。Dataset的管理也非常容易,很容易让人着迷,愿意多花点时间去尝试那些已经训练好的模型进行比较。

/如果要了解如何安装,可以参考之前的文章。/

而我想分享的是在实际安装过程中遇到的问题排解与疑问,以下使用自问自答方式来进行:

1.DL Workbench是个Application,所以需要Desktop执行吗?

答案是不需要。DL Workbench是一个Web Server,安装好了之后可以透过其他的计算机以访问网站的方式来操作,就跟AutoML或是Teachable Machine一样。多人操作应该也没有问题。我喜欢装在Ubuntu Server上,减少像是Desktop版本还要跑个X Window浪费效能。

2.安装DL Workbench需不需要在机器上面安装OpenVINO套件?

答案是不需要。原本我的理解是一个步骤一个步骤去安装OpenVINO所有的工具套件,Workbench放在最后面,当然就要先装好套件后才可以安装Workbench。但其实Workbench使用Docker Container安装,是不需要先下载与安装工具包。为了方便各位进行测试,我也提供我的安装方式作为参考:

Step 1. Docker执行环境安装:

确认与安装docker环境:如果不确定Docker的版本,可以重新参考官方文件,

https://docs.docker.com/engine/install/ubuntu/

以下是我安装流程:

A.移除旧版的docker套件:

~$ sudo apt-get remove docker docker-enginedocker.io containerd runc

B.安装docker需要使用到的套件:

~$ sudoapt-get update

~$ sudoapt-get install

                  apt-transport-https

                  ca-certificates

                  curl

                  gnupg

                  lsb-release

C.设定apt安装所需要的套件库与环境(以x86环境为例):

~$ echo

         "deb [arch=amd64signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable" | sudo tee/etc/apt/sources.list.d/docker.list > /dev/nul

D.实际进行安装:

~$ sudoapt-get update

~$ sudoapt-get install docker-ce docker-ce-cli containerd.io

E.安装后,需要将ubuntu的用户加入docker的群组:

~$ sudo usermod -aG docker ${USER}

F.重新注销用户,再次登入,才会将新加入的docker群组生效。或是重新启动也可以。

Step 2. 安装GPU Driver:

建议可以再次安装Intel GPU的Driver,使用DFI 的单板计算机曾经遇到过无法正确安装GPU Driver,导致Workbench无法使用GPU,仅能使用CPU进行训练。安装方次可以参考以下的网址:

https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html#additional-GPU-steps

https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-focal.html

参考安装流程如下:

A.安装必要的套件,并增加apt套件库的信息:

~$ sudoapt-get install -y gpg-agent wget                    

~$ wget-qO - https://repositories.intel.com/graphics/intel-graphics.key | sudo apt-keyadd -         

~$ sudoapt-add-repository

'deb[arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main'

B.安装:

~$ sudoapt-get update

~$ sudoapt-get install

         intel-opencl-icd

         intel-level-zero-gpu level-zero

intel-media-va-driver-non-freelibmfx1

C.选择性安装开发工具包,如果要执行某些API,还是需要安装才会正常运作:

~$ sudoapt-get install

                  libigc-dev

                  intel-igc-cm

                  libigdfcl-dev

                   libigfxcmrt-dev

          level-zero-dev

D. 设定权限:

可以先检查用户是否在render的群组,使用以下命令来检查,列出目前这个用户所拥有的群组:

~$ groups ${USER}

如果这个用户有没有加入render与video的群组,使用以下方法加入:

~$ sudogpasswd -a ${USER} render                          

~$ sudogpasswd -a ${USER} video

~$newgrp render

~$newgrp video

Step 3. 安装DL Workbench DockerContainer:

有实际用过Docker Container的朋友应该知道,如果没有设定将数据储存在外部空间,只要每次重新开启Container,所有数据将会清空,还原成一开始的“干净”状态。因此除了安装之外,还要确保相关设定与项目都有储存到Server的储存装置上,而不是在Container里面。

参考官网的文件进行安装:

https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Persist_Database.html

A. 使用pip安装openvino-workbench套件,这不是下载与安装WorkbenchContainer,可以当作是方便启动的script,简化后面的流程:

~$ python3 -m pip install -Uopenvino-workbench

B.建立一个可以放设定与项目的目录,例如放在自己目录下的openvino-workbench目录:

~$ mkdir -m 777 ~/openvino-workbench

C.执行以下命令启动Workbench:

~$ openvino-workbench --imageopenvino/workbench:2021.4 --assets-directory ~/openvino-workbench --enable-gpu--container-name openvino-workbench

这个命令,我们将Container名称命名为 openvino-workbench,并且指定~/openvino-workbench作为项目与设定储存的目录,另外也启动GPU。如果发生错误,像是找不到/dev/rencer/*的目录等等,就是系统没有正确的设定GPU,可以尝试先吧–enable-gpu拿掉试试看。

完成后,就可以在本机打开Browser连结上这个网站,例如Workbench主机的IP是10.211.55.17,那么就在Browser上面键入:http:// 10.211.55.17:5665

数据库

3. DL Workbench最吸引我的地方在哪?

看到DL Workbench的接口上,Environment的右边有个Add Remote Target按钮。没错,可以将多台机器的资源统一在这个见面上管理,这样可以将项目切换到不同机器上进行训练与分析。

经过一番努力,测试成功了,真的可以将项目指派到其他机器上面去进行训练,但可惜的是只能在本机进行验证与测试,我想未来的版本应该会解决这个问题。

以下提供安装方式,以及参考网址。

https://docs.openvinotoolkit.org/latest/workbench_docs_Workbench_DG_Setup_Remote_Target.html

Step 1. 在远程主机进行设定,下载并且安装必要套件:

A.安装套件:

~$ sudoapt-get update

~$ sudoapt-get install -y --no-install-recommends

                  openssh-server

                  ssh

                  python3

                  ython3-distutils

                  python3-apt

                  python3-dev

                  python3-pip

                  gcc

                  libgtk-3-0

                  ffmpeg          

~$python3 -m pip install --upgrade pip

B. 更新python3-virtualenvwrapper套件。就个人的经验上我分别在Atom与VM的环境上尝试安装时,会遇到个套件出现问题,导致最后的安装无法完成,避免麻烦在一开始就先完成更新套件。以下是更新方式:

~$ sudo apt removepython3-virtualenvwrapper

~$ sudo apt autoremove

~$ sudo apt purge python3-virtualenv

~$ /usr/bin/python3 -m pip install--force-reinstall virtualenvwrapper

Step 2. 设定ssh远程登录,并取得privatekey

回到安装DL Workbench的机器上,我们需要可以使用ssh直接登入到远程主机的相关权限。设定的过程中我们将会设定一个private key, 这个档案将要使用在Workbench的设定上。以下是相关执行步骤(如果对于ssh非常熟悉的朋友,可以简化这个流程,直接取得ssh登入的private key):

A. 使用ssh-keygen 产生ssh的Key:

~$ ssh-keygen

B.将刚刚产生的public key 复制到远程的主机,可以使用ssh-copy-id命令,使用方法是:

~$ ssh-copy-id louis@192.168.1.100  

# 请将louis改成远程可以登入账号,192.68.1.100改成远程的主机

过程中会需要填写登入的密码,请正确的进行填写。

C.验证是否正确,使用ssh登入远程主机,将不再需要填写密码,可以直接登入。

~$ ssh louis@192.168.1.100

如果可以正常登入,就表示完成这个步骤

Step 3. 确认远程主机的用户拥有根权限(SudoPrivileges),不需要输入密码就可以执行sudo的命令。

A.首先简单的确认是否有sudo的权限以及是否不需要输入密码就可以执行sudo,执行以下指令:

~$ sudo ls -la /

B.如果可以顺利列出根目录下所有的档案与目录,表示这个用户已经拥有根权限,并且不需要密码就可以执行。如果显示没有sudo权限,则表示这个用户没有sudo使用权,请使用以下命令,将这个用户加入到sudo群组中:

~$ su

~$ usermod -a -G sudo USERNAME

~$ exit

C. 加入后,请注销再重新登入,并且再次使用sudols -la / 确认目前用户使用已经拥有sudo权限。

D. 如果用户已经拥有sudo权限,但需要填写密码,则使用visudo,将这个用户加入到/etc/sudoers.tmp档案中:

~$ sudo visudo

此时会开启编辑画面,并且显示档案内容,接着将光标移到档案的最后,加入以下权限:

louis ALL=(ALL) NOPASSWD: ALL  #请将louis改成这个账户的名称

接着存挡离开,再重新测试这个用户的sudo命令:

~$ sudo ls -la /

此时应该不需要密码就可以执行了。

*特别注意:使用 visudo 编辑并存挡,务必确认正确填写,否则有可能导致系统严重的问题发生。

Step 4:

进入 DL Workbench 设定目前准备进入到DL Workbench设定的步骤,在此之前,必须要先下载id_rsa的私钥到本机来,方便等一下再接口上需要上传这个档案。再次使用ssh登入到安装Workbench的主机上,可以使用vi或是其他编辑器,打开私钥档案,使用以下命令开启:

~$ vi ~/.ssh/id_rsa

数据库

将会看到以上的编辑画面,可以使用圈选复制,然后在本机新增加一个文本文件,然后贴上刚刚复制的内容,储存成一个文本文件,例如:id_rsa_192.168.0.1.key。

接着,在本机打开Browser,进入Workbench的网站,然后按下Create的按钮,产生一个新的项目:

数据库

在Create Project画面上,可以看到Environment的功能,有个Add Remote Target的按钮,按下后开始新增新的远程主机:

数据库

这时可以看到Target Machine的列表,第一个显示的就是Workbench内建预设的环境。按下『Add』按钮后,进行新增机器的画面:

数据库

在Add Remote Target窗体中,请填入以下信息:

•Hostname (远程主机IP)

•Port (远程主机ssh port, 除非有手动变更,预设都是22)

•Target Name(自己为这个远程命名)

•User (登入远程主机用的账号)

•Ssh key (就是一开始我们先存下来的私钥文本文件)

以上正确填写后,下方的Save Target将会从灰色变成深红色,按下后,就开始启动安装与设定程序了。

数据库

安装进行中的画面:

数据库

安装中,每个阶段都可以实时显示状态以及正在设定中的项目:

数据库

安装完成后,在Target Machines的列表中会清楚出现该设备,如果安装出现问题,也会出现错误信息。

数据库

安装中如果出现错误,也会出现在下方的信息中:

数据库

回到Create Project画面后,下方的Environment,就可以选择远程的主机来进行演算了。

数据库

实际简单的测试一下,可以看到远程主机上跑出来的结果,项目列表上可以看到第二列,使用我们刚刚新增的远程主机资源进行演算的结果:

数据库

4.目前有没有什么可以进一步厘清的地方?

截至目前无法正确的设定远程主机使用GPU或是VPU的资源,算是一种遗憾。我想后续应该是有机会可以解决,后续再做更新。

小结

如果各位希望打造一群工作的主机,可以进行选择模型、设定数据集、建立基准到分析与部署,Workbench正好提供了分布式Environment的安装方式,设定起来不难。后续在商业上思考可以如何客户运用OpenVINO打造一个私有的AI运算环境应该不是问题。  

      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分