启用 AWS Greengrass* 和 OpenVINO™ 工具包

本指南说明了如何启用 AWS Greengrass* 和 OpenVINO™ 工具包。具体而言,该指南演示了如何:

  • 使用 Clear Linux* OS 设置英特尔®边缘设备
  • 安装 OpenVINO™ 工具包和 Amazon Web Services* (AWS*) Greengrass* 软件堆栈
  • 使用 AWS Greengrass* 和 AWS Lambda* 从云中部署 FaaS 示例

概述

硬件加速的功能即服务 (FaaS) 有助于云开发人员在搭载加速器的英特尔® IoT 边缘设备(CPU、集成 GPU、英特尔® FPGA 和英特尔® Movidius™ 技术)上部署推理功能 [1]。这些功能使用容器化环境,为开发人员提供了出色的体验,有助于开发人员将可视化分析从云安全地迁移到边缘。硬件加速的 FaaS 支持在搭载加速器的英特尔® IoT 边缘设备上访问经过优化的深度学习库,实现业界最佳性能。

支持的平台

  • 操作系统:Clear Linux OS 最新版本
  • 硬件:英特尔®酷睿™平台(本教程仅支持 CPU 推理。)

示例说明

AWS Greengrass 示例位于 Edge-Analytics-FaaS 中。本教程使用 1.0 版本的源代码。

Clear Linux OS 提供以下 AWS Greengrass 示例:

  • greengrass_classification_sample.py

    此 AWS Greengrass 示例使用 AlexNet 和 GoogLeNet 等分类网络对视频流进行分类,并每秒在 AWS* IoT 云上发布前十名结果。

  • greengrass_object_detection_sample_ssd.py

    此 AWS Greengrass 示例会检测视频流中的对象,并使用单步多框检测 (SSD) 网络(例如 SSD Squeezenet、SSD Mobilenet 和 SSD300)对它们进行分类。此示例每秒在 AWS IoT 云上发布检测输出,如类标签、类置信度和边界框坐标。

在边缘设备上安装操作系统

使用 开始使用 中的 从实时桌面安装 Clear Linux* OS,在新系统上安装干净的 Clear Linux OS。

创建用户帐户

安装 Clear Linux OS 后,创建两个用户帐户。在 Clear Linux OS 中创建一个管理用户,并为要使用的 Greengrass 服务创建一个用户帐户(请参阅下面的 Greengrass 用户)。

  1. 创建新用户并为该用户设置密码。以 root 用户身份输入以下命令:

    useradd <userid>
    passwd <userid>
    
  2. 接下来,为新的 <userid> 启用 sudo 命令。将 <userid> 添加到 wheel 组:

    usermod -G wheel -a <userid>
    
  3. 创建一个 /etc/fstab 文件。

    touch /etc/fstab
    

    注解

    默认情况下,Clear Linux OS 不会创建 /etc/fstab 文件。您必须在 Greengrass 服务运行之前创建此文件。

添加所需的捆绑包

使用 swupd 软件更新程序实用程序添加 OpenVINO 软件堆栈必备的软件包:

swupd bundle-add os-clr-on-clr desktop-autostart computer-vision-basic

注解

详细了解如何 swupd

computer-vision-basic 捆绑包会安装 OpenVINO™ 工具包以及针对英特尔®边缘平台优化的示例模型。

转换深度学习模型

找到示例模型

本教程中提供了两种可以与 AWS Greengrass 配合使用的模型:分类和对象检测。

要使用图像分类模型完成本教程,请将 BVLC AlexNet 模型文件 bvlc_alexnet.caffemodeldeploy.prototxt 下载到 /usr/share/openvino/models 处的默认 model_location。预先训练的任何自定义分类模型都可与分类示例配合使用。

对于对象检测,安装 computer-vision-basic 捆绑包时会在 /usr/share/openvino/models 处附带针对英特尔®边缘平台优化的示例模型。这些模型作为示例提供;但是,您也可以将自定义 SSD 模型与 Greengrass 对象检测示例结合使用。

运行模型优化器

遵循 Model Optimizer Developer Guide 中的说明,使用 Model Optimizer 将深度学习模型转换为 Intermediate Representation。要优化上述任一示例模型,请运行以下命令之一。

对于使用 BVLC AlexNet 模型的分类:

python3 mo.py --framework caffe --input_model
<model_location>/bvlc_alexnet.caffemodel --input_proto
<model_location>/deploy.prototxt --data_type <data_type> --output_dir
<output_dir> --input_shape [1,3,227,227]

对于使用 SqueezeNetSSD-5Class 模型的对象检测:

python3 mo.py --framework caffe --input_model
<model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.caffemodel
--input_proto <model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.prototxt
--data_type <data_type> --output_dir <output_dir>

在这些示例中:

  • <model_location>/usr/share/openvino/models
  • <data_type> 是 FP32 或 FP16,具体取决于目标设备。
  • <output_dir> 是存储中间表示 (IR) 的目录。IR 包含与网络结构对应的 .xml 格式以及与权重对应的 .bin 格式。此 .xml 文件应传递给 <PARAM_MODEL_XML>
  • 在 BVLC AlexNet 模型中,默认情况下,prototxt 会定义批处理大小为 10 的输入形状。要使用任何其他批处理大小,必须将整个输入形状作为参数提供给模型优化器。例如,要使用批处理大小 1,您必须提供 –input_shape [1,3,227,227]

配置 AWS Greengrass 组

对于每个英特尔®边缘平台,您必须创建一个新的 AWS Greengrass 组,并安装 AWS Greengrass 核心软件,以在云和边缘之间建立连接。

  1. 要创建 AWS Greengrass 组,请按照 Configure AWS IoT Greengrass on AWS IoT 中的说明执行操作。

  2. 要在边缘平台上安装和配置 AWS Greengrass 核心,请按照 Start AWS Greengrass on the Core Device 中的说明执行操作。在步骤 8(b) 中,下载 AWS Greengrass 核心软件的 x86_64 Ubuntu* 配置。

    注解

    您不需要在 AWS Greengrass developer guide 模块 1 的步骤 6 中运行 cgroupfs-mount.sh 脚本,因为它已经在 Clear Linux OS 中启用。

  3. 请务必下载安全资源和 AWS Greengrass 核心软件。

    注解

    安全证书会链接到您的 AWS 帐户。

创建并打包 Lambda 函数

  1. Create and Package a Lambda Function 中完成 AWS Greengrass 教程的步骤 1-4。

    注解

    这会创建必要的 tarball,以便在边缘设备上创建 AWS Greengrass 环境。

  2. 在步骤 5 中,将 greengrassHelloWorld.py 替换为 Edge-Analytics-Faas 中的分类或对象检测 Greengrass 示例:

  3. 将所选的 Greengrass 示例以及从上一步提取的 Greengrass SDK 文件夹压缩到 greengrass_sample_python_lambda.zip

    压缩包应包含:

    • greengrasssdk
    • greengrass 分类或对象检测示例

    例如:

    zip -r greengrass_lambda.zip greengrasssdk
    greengrass_object_detection_sample_ssd.py
    
  4. 返回名为 Create and Package a Lambda Function 的 AWS 文档部分,并完成步骤。

    注解

    在 AWS 文档的步骤 9(a) 中,上传 Zip 文件,并确保根据使用的 AWS Greengrass 示例将处理程序命名为以下名称之一:

    • greengrass_object_detection_sample_ssd.function_handler
    • greengrass_classification_sample.function_handler

配置 Lambda 函数

创建 Greengrass 组和 Lambda 函数后,开始为 AWS Greengrass 配置 Lambda 函数。

  1. 按照 AWS 文档中 Configure the Lambda Function for AWS IoT Greengrass 中的步骤 1-8 执行操作。

  2. 除了步骤 8 中提到的细节之外,将内存限制更改为 2048 MB,以容纳较大的输入视频流。

  3. 编辑 Lambda 配置时,添加以下环境变量作为键值对,然后点击更新:

    表 1.环境变量:Lambda 配置
    PARAM_MODEL_XML <MODEL_DIR>/<IR.xml>,其中 <MODEL_DIR> 是用户指定的,包含来自英特尔®模型优化器的中间表示文件 IR.xml。在本教程中,<MODEL_DIR> 应设置为 ‘/usr/share/openvino/models’ 或其某个子目录。
    PARAM_INPUT_SOURCE
    <DATA_DIR>由用户指定的 /input.webm。保存输入和
    输出数据。对于网络摄像头,请将 PARAM_INPUT_SOURCE 设置为 ‘/dev/video0’
    PARAM_DEVICE “CPU”
    PARAM_CPU_EXTENSION_PATH /usr/lib64/libcpu_extension.so
    PARAM_OUTPUT_DIRECTORY <DATA_DIR> 由用户指定。保存输入和输出数据
    PARAM_NUM_TOP_RESULTS 为分类示例指定的用户。(例如,1 为 前 1 名结果,5 为前 5 名结果)
  4. 完成 Configure the Lambda Function for AWS IoT Greengrass 中的步骤,添加订阅以进行订阅或发布来自 AWS Greengrass Lambda 函数的消息。

    注解

    可选主题过滤器字段是 Lambda 函数中提到的主题。在本教程中,示例主题包括以下 openvino/ssdopenvino/classification

添加本地资源

有关 Access Local Resources with Lambda Functions and Connectors 的详细信息,请参阅 AWS 文档。

下表列出了 CPU 所需的本地资源:

本地资源
名称 资源类型 本地路径 访问
ModelDir <MODEL_DIR> 由用户指定 只读
网络摄像头 设备 /dev/video0 只读
DataDir <DATA_DIR> 由用户指定。保存输入和输出数据。 读取和写入

部署 Lambda 函数

有关如何 Deploy Cloud Configurations to an AWS IoT Greengrass Core Device 的说明,请参阅 AWS 文档。在组页面上选择 Deployments,并按照说明执行操作。

输出的使用

使用输出时有四种可用选项。这些选项用于按 AWS Greengrass 示例中 reporting_interval 变量定义的间隔,报告、流式传输、上传或存储推理输出。

  1. IoT 云输出:

    在 AWS Greengrass 示例中,默认情况下使用 enable_iot_cloud_output 变量启用此选项。您可以使用它来验证在边缘设备上运行的 lambda。它支持使用 lambda 中指定的订阅主题向 IoT 云发布消息。(例如,主题可能包括用于分类示例的 openvino/classification 以及用于对象检测示例的 openvino/ssd。) 对于分类,具有类标签的前 1 名结果会发布到 IoT 云。对于 SSD 对象检测,则发布对象的边界框坐标、类标签和类置信度等检测结果。

    有关如何在 IoT 云上查看输出的说明,请参考 AWS 文档 Verify the Lambda Function Is Running on the Device

  2. Kinesis 流式传输:

    enable_kinesis_output 设置为 True 时,此选项支持使用 Kinesis [3] 流将推理输出从边缘设备流式传输到云。边缘设备充当数据生产者,并将处理后的数据不断推送到云中。您必须在 AWS Greengrass 示例中设置和指定 Kinesis 流名称、Kinesis shard 和 AWS 区域。

  3. 使用 AWS S3 存储桶的云存储:

    enable_s3_jpeg_output 变量设置为 True 时,它允许在 AWS S3 存储桶中上传和存储已处理的帧(jpeg 格式)。您必须在 AWS Greengrass 示例中设置和指定用来存储 JPEG 图像的 S3 存储桶名称。这些映像使用时间戳命名,并上传到 S3。

  4. 本地存储:

    enable_s3_jpeg_output 变量设置为 True 时,它允许在边缘设备上存储已处理的帧(jpeg 格式)。这些映像使用时间戳命名,并存储在由 PARAM_OUTPUT_DIRECTORY 指定的目录中。