DevCloud - Hello DevCloud

概括介绍

相信在注册了Intel® DevCloud账号之后,肯定想马上登录到平台上操作一番,体验一下这个平台的功能是不是如我前面文章所述的一样呢。估计接下来你会跟我一样,碰到一个问题:这么多的教程和示例,从哪里开始呢?希望这篇文章可以跟你分享一下这方面的体验。

Intel® DevCloud包含丰富的Jupyter* Notebook教程和示例,一般来讲,你肯定要从教程一步一步推进学习,这些Jupyter* Notebook教程主要是基于开发节点开发OpenVINO™ 应用程序。但无论是讲OpenVINO™ API的教程还是基于Jupyter* Notebook开发一个Hello World 程序,都可能让你抓不到重点,这篇文章的意义也会大打折扣。

所以我选择“物体检测”- 一个典型的Intel® DevCloud示例,它详细讲解了示例的代码结构和在不同边缘节点的部署方法、性能对比和节点运行监测。这里我们先不急着动手写代码,仅仅从操作上熟悉Intel® DevCloud的典型应用场景。从概念到实践,然后再开始自己应用程序部署。我这里假设你已经对OpenVINO™工具有一定的知识储备,对Jupyter* Notebook UI编程有一定的了解。如果你对Jupyter* Notebook操作有疑问,后面我们就这个话题继续讨论。

物体检测

进入Jupyter Lab环境

登录Intel® DevCloud主页后,选择Build页面,然后点击Connect to JupyterLab,进入Jupyter Lab开发环境,前面文章有讲过,这里我们进入的开发环境为非容器化的裸机开发环境,所有操作跟容器没有任何关系。选择这个裸机环境主要是可以让熟悉Linux程序运行的小伙伴快速上手。

DevCloud - Hello DevCloud_第1张图片

 图 2-1 点击进入Jupyter Notebook

打开应用实例

进入Jupyter Lab开发环境后,我们依次点击文件夹~/Reference-samples/iot-devcloud/openvino-dev-latest/developer-samples/python/,然后找到object-detection-python应用,打开object_detection_demo.ipynb文件,这个文件就是Jupyter Notebook文件,也是“物体检测”示例的入口。

DevCloud - Hello DevCloud_第2张图片

2-2 找到object-detection-python应用

打开“物体检测”示例后,有必要解释一下上图中的标记的含义。 处的三角形是执行按钮,每点击一次,执行一次示例中的程序或文字块,它属于Jupyter Notebook 的操作; 处的文字是说明你当前的开发环境保持当前连接剩余的时长,如果剩余时间小于0,你的这个连接会被断开,如果想继续访问,只需要重新打开就可以了,之前的修改都会保存的。处是说明该示例使用的OpenVINO™ 版本,这个是通过Jupyter * 的Kernel来实现的,你可以点击来切换不同的OpenVINO™版本。

在示例的刚开始介绍主要文件的作用,这里我也简单说明一下:

  • object_detection_demo.ipynb – 这个Jupyter Notebook文件就是我们现在打开的界面文件,也是示例的UI 交互文件。
  • object_detection.py – 这个文件最为重要,Python 程序实现了所有OpenVINO™ API调用,对测试的视频文件进行读取,模型加载,推理,保存结果。这个文件最终会运行在边缘设备上。这个文件是示例里面的文件,我们不需要做任何修改。当然后期你如果想把自己的应用程序跑起来,可以参考哦!
  • object_detection_annotate.py – 这个文件是后处理文件,就是把物体检测过程保存的坐标,渲染成为人可以看懂的视频文件。这部分的执行跟推理已经没有关系了。
  • cars_1900.mp4 这个是要检测的视频文件,推理程序会一帧一帧读取文件,然后检测每一帧图像中的物体对象。

在了解主要文件功能作用之后,我们就可以开始按示例的步骤一步一步执行了。示例里介绍OpenVINO™ API 的相关知识, 同时介绍了物体检测示例的工作原理,大致包括三部分内容:前处理,推理,后处理。

前处理:读取待测试的视频文件的每一帧数据,并作压缩,转置等处理,最后保存成一个处理后二进制的文件。

推理:运行深度学习模型,对上一步准备的二进制图片做检测,最后输出结果。

后处理:把推理输出的结果画到对应的帧上去,最后输出一个视频文件,便于在分析和观察。

步骤一:准备AI模型

模型下载:从预置的模型目录拷贝指定的模型到该示例目录,方便访问和处理。如果你不想用这个模型,也可以通过 !omz_downloader --name mobilenet-ssd -o 直接下载。当然示例中是拷贝的,我们先按照这个步骤继续。

DevCloud - Hello DevCloud_第3张图片

                                        2-3 准备模型
模型优化:OpenVINO™不能直接加载运行Coffe 训练框架生成的模型,需要转成OpenVINO™ 支持的IR格式。

DevCloud - Hello DevCloud_第4张图片

 图 2-4 转换模型

步骤二:创建任务脚本

任务脚本的作用是告知要部署的边缘设备按照这个脚本执行这个任务。任务脚本的创建和配置在裸机的开发环境下非常关键,它决定了边缘设备最终的程序执行和结果的生成。

所以我们来解析一下这个文件。首先传递参数给应用程序objec_detection.py,包括模型路径,测试文件路径,输出文件路径,推理算力单元,标签路径和Request数量。为什么不写死呢?想必你会有这个疑问。

如果我们只是把应用程序部署在一种类型的边缘设备上,我们完全可以写死这个任务脚本。只是我们想用同一个脚本把同一个应用程序使用不同配置部署在不同边缘设备,达到灵活部署应用,并获取相关对比结果。这个脚本并没有多深的技术难点,放轻松。

                                                         

DevCloud - Hello DevCloud_第5张图片

2-5 生成任务文件

步骤三、多任务提交

设备查询:提交任务到特定边缘节点之前,我们要先查看一下有哪些边缘设备在你选择的软件栈下是可用的,可以看到物体检测示例中有如下可见设备。

DevCloud - Hello DevCloud_第6张图片

任务提交:有了第二步的任务脚本,我们就可以准备把应用程序提交到任务管理系统了。方法很简单如图2-6所示,通过qsub 指令,设定相关参数,提交推理部署任务到任务管理系统,等待被执行。

DevCloud - Hello DevCloud_第7张图片

 图 2-6 提交训练任务

示例里依次提交任务到:

  • Intel® Core™ i5-6500TE CPU
  • Intel® Xeon® Gold 6258R CPU
  • Intel® Xeon® E3-1268L v5 CPU
  • Intel® Core™ i5-6500TE GPU
  • Intel® Core™ i5-6500TE NCS2
  • Intel® Atom® x7-E3950 GPU

任务查询:任务提交之后,我们是可以追踪任务的运行时log,并查看状态。命令也非常简单,如下图:

DevCloud - Hello DevCloud_第8张图片

2-7 状态查询

这里你可能会有几个疑问,我总结如下:

  1. 怎么指定的边缘设备?
有关这个问题涉及到PBS (Portable Batch System)系统的节点管理,当然PBS不是我们这篇的重点,所以这里只要知道 -l nodes=1:idc001skl 可以指定特定的边缘设备。其中idc001skl就是这个边缘设备的ID 号,如下图2-8所示,你可以看到该ID 对应的设备硬件配置。该边缘设备已安装了最新OpenVINO™软件栈,CPU为Intel 酷睿i5-6500te,集成显卡Intel-hd-530,8GB 内存。这个边缘设备真实存在于我们数据中心,应用程序会部署运行在这个设备上。而这里我们要做的,就是把ID告诉任务管理系统。

2-8 设备列表

     2.怎么传递的参数?

这里我们可以看到 -F "results/core/ CPU FP32 {InputVideo} {NumRequests_CPU}"这里面的每一个参数对应到任务脚本的输入参数。我们只需要在启动任务时修改这参数,就可以快速配置应用并完成部署。

    3.应用程序怎么挂载到边缘设备的?没有看到相关的操作呀!

挂载的工作是系统完成的,开发者不用关心。但是我可以解释一下,系统采用的是网络硬盘,每个用户的硬盘,也就是你应用程序所在磁盘会被动态挂载到边缘设备上,因此在这个过程并没有任何拷贝的动作,而且应用程序执行后的结果直接回写到用户磁盘上,中间也没有任何拷贝动作。这个操作也使得我们同一个应用可以同时部署到不同的边缘设备,无需等待上一个任务的结束。

步骤四:结果展示

接下来就是等待,很快第一个任务就快结束了,我们可以通过一段代码加载后处理的输出,这里我们贴一个任务的结果如图2-9:

DevCloud - Hello DevCloud_第9张图片

 图2-9 结果展示

步骤五:性能对比

在这个示例中同一个应用程序被部署到了不同的设备上,每个设备的执行情况怎么样呢?它们之间性能有哪些差异呢?在这个示例给出了一个对比的图,方便分析和选择。

DevCloud - Hello DevCloud_第10张图片

DevCloud - Hello DevCloud_第11张图片

 图 2-10 运行帧率

总结

都看到这了,相信你在自己账号下的物体检测示例执行也应该结束了,是不是很简单!在这个例子里涉及到了在开发节点展示示例,在边缘节点部署程序。这里面我有意略掉了在开发节点开发一个应用程序,虽然Intel® DevCloud 具有这方面的能力。通过这个示例相信你对Intel® DevCloud 的理解已经上了一个层次。后面的文章见吧。

你可能感兴趣的:(DevCloud开发平台,vscode,postman,visualstudio,myeclipse)