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

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运算环境应该不是问题。


全球LCD面板价格将持续呈现上涨态势
TE助力汽车互联,推动未来车连接
封装小知识
“新基建”背景下,数字经济新业态助力提升中国经济“韧性”
剩余电流互感器和零序互感器区别
如何运用OpenVINO打造一个私有的AI运算环境
办公室专属桌面视频会议屏,MAXHUB造就专业个人视频会议体验
你对于哪几种嵌入式处理器有所了解
小米Mix还在加价?高屏占比手机三百多块就能体验?
苹果证实,已经收购了自动驾驶汽车企业Drive. ai
内存分段是如何产生内存碎片的
首届工业数据要素大会 | 梦想人完成数字化转型战略合作签约仪式
相比新能源汽车,智能网联汽车发展会更快
锻造去氧化皮机器
如何选择适合的3D机器视觉检测
中国移动终端品牌加快拓展海外市场步伐
华为Mate 30 Pro 5G版拆解报告,芯片自研过半!
华为今年下半年将发布专为华为4G LTE手机而设计的麒麟985芯片
基于激光诱导超塑性的卷对卷工艺制程是一种新的制造方法
日常服务器的维护是怎样的