如何使用 Amazon Web Services Management Console配置机器学习推理 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如何使用 Amazon Web Services Management Console配置机器学习推理

要执行本教程中的步骤,您需要Amazon IoT GreengrassCore v1.10 或更高版本。

您可以使用本地生成的数据在 Greengrass 核心设备上本地执行机器学习 (ML) 推理。有关信息(包括要求和约束),请参阅执行机器学习推理

本教程介绍如何将Amazon Web Services Management Console将 Greengrass 组配置为运行一个 Lambda 推理应用程序,该应用程序可在本地识别摄像机中的图像,而无需将数据发送至云。该推理应用程序将访问 Raspberry Pi 上的摄像机模块并使用开源运行推理SqueezeNet模型。

本教程包含以下概括步骤:

先决条件

要完成此教程,需要:

注意

本教程使用的是 Raspberry Pi,但 Amazon IoT Greengrass 支持其他平台,例如 Intel AtomNVIDIA Jetson TX2。在 Jetson TX2 的示例中,可以使用静态图像,而不是从摄像机流式传输的图像。如果使用的是 Jetson TX2 示例,您可能需要安装 Python 3.6 而不是 Python 3.7。有关配置设备的信息那个你可以安装Amazon IoT GreengrassCore 软件,请参阅设置其他设备.

对于符合以下条件的第三方平台Amazon IoT Greengrass不支持,则必须在非容器化模式下运行 Lambda 函数。要在非容器化模式下运行,您必须以根用户身份 Lambda 函数。有关更多信息,请参阅 选择 Lambda 函数容器化时的注意事项在组中设置 Lambda 函数的默认访问身份

第 1 步:配置 Raspberry Pi

在该步骤中,将安装 Raspbian 操作系统的更新,安装摄像机模块软件和 Python 依赖项,以及启用摄像机接口。

在您的 Raspberry Pi 终端中运行以下命令。

  1. 安装 Raspbian 的更新。

    sudo apt-get update sudo apt-get dist-upgrade
  2. 安装适用于摄像机模块的 picamera 接口以及本教程所需的其他 Python 库。

    sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera

    验证安装:

    • 确保您的 Python 3.7 安装包含 pip。

      python3 -m pip

      如果未安装 pip,请从 pip 网站 下载它,然后运行以下命令。

      python3 get-pip.py
    • 确保您的 Python 版本为 3.7 或更高版本。

      python3 --version

      如果输出列出了早期版本,请运行以下命令。

      sudo apt-get install -y python3.7-dev
    • 确保已成功安装 Setuptools 和 Picamera。

      sudo -u ggc_user bash -c 'python3 -c "import setuptools"' sudo -u ggc_user bash -c 'python3 -c "import picamera"'

      如果输出未包含错误,则表示验证成功。

    注意

    如果设备上安装的 Python 可执行文件是 python3.7,请将 python3.7 而非 python3 用于本教程中的命令。确保 pip 安装映射到正确的 python3.7python3 版本以避免依赖项错误。

  3. 重启 Raspberry Pi。

    sudo reboot
  4. 打开 Raspberry Pi 配置工具。

    sudo raspi-config
  5. 使用箭头键打开接口选项并启用摄像机接口。如果出现提示,请允许设备重新启动。

  6. 使用以下命令测试摄像机设置。

    raspistill -v -o test.jpg

    这将在 Raspberry Pi 上打开一个预览窗口,将名为 test.jpg 的图片保存到您的当前目录,并在 Raspberry Pi 终端中显示有关摄像机的信息。

第 2 步:安装 MXNet 框架

在此步骤中,在 Raspberry Pi 上安装 MXNet 库。

  1. 远程登录您的 Raspberry Pi。

    ssh pi@your-device-ip-address
  2. 打开 MXNet 文档,再打开安装 MXNet,然后按照说明执行操作以在设备上安装 MXNet。

    注意

    对于本教程,我们建议安装 1.5.0 版并从源代码构建 MXNet,以避免设备冲突。

  3. 安装 MXNet 后,请验证以下配置:

    • 确保 ggc_user 系统账户可以使用 MXNet 框架。

      sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
    • 确保 NumPy 已安装。

      sudo -u ggc_user bash -c 'python3 -c "import numpy"'

第 3 步:创建 MXNet 模型包

在该步骤中,创建包含要上传到 Amazon Service (Amazon S3) 的示例预训练 MXNet 模型的模型包。Amazon IoT Greengrass可以使用来自 Amazon S3 的模型包,前提是您使用的是 tar.gz 或 zip 格式。

  1. 在您的计算机上,从机器学习示例下载 Raspberry Pi 的 MXNet 示例。

  2. 不要解压下载的 mxnet-py3-armv7l.tar.gz 文件。

  3. 导航到 squeezenet目录。

    cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet

    此目录中的 squeezenet.zip 文件是您的模型包。其中包含 SqueezeNet 图像分类模型的开源模型构件。稍后,您可将此模型包上传到 Amazon S3。

第 4 步:创建并发布 Lambda 函数

在该步骤中,创建一个 Lambda 函数部署程序包和 Lambda 函数。接下来,发布函数版本并创建别名。

首先,创建 Lambda 函数部署程序包。

  1. 在您的计算机上,导航到您在第 3 步:创建 MXNet 模型包中提取的示例程序包中的 examples 目录。

    cd path-to-downloaded-sample/mxnet-py3-armv7l/examples

    examples 目录包含函数代码和依赖项。

    • greengrassObjectClassification.py 是本教程中使用的推理代码。可以将此代码用作模板来创建您自己的推理函数。

    • greengrasssdk是 1.5.0 版的Amazon IoT Greengrass适用于 Python 的核心开发工具包

      注意

      如果提供了新版本,您可以下载该版本并升级部署程序包中的开发工具包版本。有关更多信息,请参阅 。Amazon IoT Greengrass适用于 Python 的Cor上 GitHub.

  2. examples 目录的内容压缩到一个名为 greengrassObjectClassification.zip 的文件中。这就是您的部署程序包。

    zip -r greengrassObjectClassification.zip .
    注意

    确保 .py 文件和依赖项位于该目录的根目录中。

     

    下一步,创建 Lambda 函数。

  3. 从Amazon IoT控制台,选择。函数创建函数.

  4. 选择从头开始创作并使用以下值创建您的函数:

    • 对于 Function name(函数名称),请输入 greengrassObjectClassification

    • 对于 Runtime (运行时),选择 Python 3.7

    适用于Permissions (权限),请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未由使用Amazon IoT Greengrass.

  5. 选择 Create function(创建函数)。

     

    现在,上传 Lambda 函数部署程序包并注册处理程序。

  6. 选择您的 Lambda 函数并上传 Lambda 函数部署程序包。

    1. 在存储库的代码选项卡,位于源代码源,选择从以下项上传. 从下拉列表中,选择。.zip 格式文件.

      
                带有 .zip 文件的上传自下拉列表突出显示。
    2. 选择上传,然后选择您的greengrassObjectClassification.zip部署程序包。然后,选择 Save (保存)

    3. 在存储库的代码函数的选项卡,位于Runtime,选择编辑,然后输入以下值。

      • 对于 Runtime (运行时),选择 Python 3.7

      • 对于处理程序,输入 greengrassObjectClassification.function_handler

      选择Save(保存)。

    接下来,发布您的 Lambda 函数的第一个版本。然后,创建版本的别名

    注意

    Greengrass 组可以按别名(推荐)或版本引用 Lambda 函数。使用别名,您可以更轻松地管理代码更新,因为您无需更改订阅表或组定义,因为您无需更改函数代码更新。相反,您只需将别名指向新函数版本。

  7. Actions 菜单上,选择 Publish new version

    
            “Actions (操作)”菜单中的“Publish new version (发布新版本)”选项。
  8. 对于 Version description (版本描述),输入 First version,然后选择 Publish (发布)

  9. 在存储库的greengrassObjectClassification:1配置页面,来自操作菜单中,选择创建别名.

    
            “Actions (操作)”菜单中的“Create alia (创建别名)”选项。
  10. 创建新别名页面上,使用以下值:

    • 对于 Name (名称),请输入 mlTest

    • 对于 Version (版本),输入 1

    注意

    Amazon IoT Greengrass不支持 Lambda 别名用于$LATEST版本。

  11. 选择Save(保存)。

     

    现在,将 Lambda 函数添加到 Greengrass 组。

第 5 步:将 Lambda 函数添加到 Greengrass 组

在该步骤中,将 Lambda 函数添加到该组,然后配置其生命周期和环境变量。

首先,将 Lambda 函数添加到 Greengrass 组。

  1. 在Amazon IoT控制台导航窗格,下Manage,展开Greengrass 设备,然后选择组 (V1).

  2. 在组配置页面上,选择Lambda 函数选项卡。

  3. 我的 Lambda 函数部分中,选择。Add.

  4. 对于Lambda 函数,选择greengrassObjectClassification.

  5. 对于Lambda 函数版本,选择别名:mltest.

     

    接下来,配置 Lambda 函数的生命周期和环境变量。

  6. 在存储库的Lambda 函数配置部分中,进行以下更新。

    注意

    建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。

    1. 要在没有容器化的情况下运行:

    2. 要改为在容器化模式下运行,请执行以下操作:

      注意

      建议在容器化模式下运行,除非您的业务案例需要这样。

      • 适用于系统用户和组,选择使用Group 默认值.

      • 适用于Lambda 函数容器化,选择使用Group 默认值.

      • 对于 Memory limit (内存限制),输入 96 MB

      • 对于 Timeout (超时),输入 10 seconds

      • 适用于Pinned,选择True.

        有关更多信息,请参阅 Greengrass Lambda 函数的生命周期配置

  7. Environment variables (环境变量) 下,创建一个键/值对。键/值对是与 Raspberry Pi 上的 MXNet 模型进行交互的函数所必需的。

    对于键,使用 MXNET_ENGINE_TYPE。对于值,使用NaiveEngine.

    注意

    在您自己的用户定义的 Lambda 函数中,您可以选择在函数代码中设置环境变量。

  8. 为所有其他属性保留默认值,然后选择添加 Lambda 函数.

第 6 步:将资源添加到 Greengrass 组

在该步骤中,将为摄像机模块和 ML 推理模型创建资源,并将该资源与 Lambda 函数关联。这使Lambda 函数能够访问核心设备上的资源。

注意

如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置这些设备资源即可访问您的设备 GPU 和摄像头。

首先,为摄像机创建两种本地设备资源:一种用于共享内存,另一种用于设备接口。有关本地资源访问的更多信息,请参阅使用 Lambda 函数和连接器访问本地资源

  1. 在组配置页面上,选择资源选项卡。

  2. 本地资源部分中,选择。添加本地资源.

  3. 在存储库的添加本地资源页面上,使用以下值:

    • 对于 Resource name (资源名称),输入 videoCoreSharedMemory

    • 对于 Resource type (资源类型),选择 Device (设备)

    • 适用于本地设备路径输入/dev/vcsm.

      设备路径是设备资源的本地绝对路径。该路径只能引用 /dev 下的字符设备或块储存设备。

    • 适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.

      这些区域有:系统组所有者和文件访问权限选项可让您授予对 Lambda 进程的额外的文件访问权限。有关更多信息,请参阅 组所有者文件访问权限

  4. 接下来,您将为摄像机接口添加本地设备资源。

  5. 选择添加本地资源.

  6. 在存储库的添加本地资源页面上,使用以下值:

    • 对于 Resource name (资源名称),输入 videoCoreInterface

    • 对于 Resource type (资源类型),选择 Device (设备)

    • 适用于本地设备路径输入/dev/vchiq.

    • 适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.

  7. 在页面底部,选择添加资源.

 

现在,将推理模型添加为机器学习资源。此步骤包含将squeezenet.zip模型包发送到 Amazon S3。

  1. 在存储库的资源选项卡,位于机器学习部分中,选择。添加机器学习资源.

  2. 在存储库的添加机器学习资源页,适用于的页面。资源名称输入squeezenet_model.

  3. 适用于模型源,选择使用存储在 S3 中的模型,例如通过深度学习编译器优化的模型.

  4. 适用于S3 URI中,输入保存 S3 存储桶的路径。

  5. 选择 Browse S3(浏览 S3)。这样,就可以将 Amazon S3 控制台打开一个新选项卡。

  6. 在 Amazon S3 控制台选项卡上,将squeezenet.zip文件到 S3 存储桶。想要了解有关信息,请参阅如何将文件和文件夹上传到 S3 存储桶?中的Amazon Service 用户指南.

    注意

    要使 S3 存储桶可访问,存储桶名称必须包含字符串greengrass存储桶必须位于您在中使用的同一区域Amazon IoT Greengrass. 请选择唯一名称(如 greengrass-bucket-user-id-epoch-time)。不要在存储桶名称中使用句点 (.)。

  7. 在存储库的Amazon IoT Greengrass控制台选项卡,找到并选择 S3 存储桶。找到并上传 squeezenet.zip 文件,然后选择 Select (选择)。您可能需要选择刷新以更新可用存储桶和文件的列表。

  8. 对于 Destination path (目的地路径),输入 /greengrass-machine-learning/mxnet/squeezenet

    这是 Lambda 运行时目标命名空间中本地模型的目标。当您部署该组时,Amazon IoT Greengrass 将检索源模型包,然后将内容提取到指定的目录。本教程的示例 Lambda 函数已配置为使用此路径(在model_path变量)。

  9. UNDER系统组所有者和文件访问权限,选择没有系统组.

  10. 选择 Add resource (添加资源)

使用 SageMaker 训练模型

本教程使用存储在 Amazon S3 中的模型,但您可以轻松地将 SageMaker 模型也是模型。这些区域有:Amazon IoT Greengrass控制台具有内置的 SageMaker 集成,因此您无需手动将这些模型上传到 Amazon S3。有关使用的要求和限制 SageMaker 模特,请参阅支持的模型源.

要使用 SageMaker 模型:

  • 适用于模型源,选择使用训练过的模型Amazon SageMaker,然后选择该模型的训练任务的名称。

  • 适用于目的地路径,输入您的 Lambda 函数在其中查找该模型的目录的路径。

步骤 7:将订阅添加到 Greengrass 组

在该步骤中,将订阅添加到该组。此订阅使 Lambda 函数能够将预测结果发送到Amazon IoT通过向 MQTT 主题发布到。

  1. 在组配置页面上,选择订阅选项卡,然后选择添加订阅.

  2. 在存储库的订购详情页面上,配置源和目标,如下所示:

    1. In源类型,选择Lambda 函数,然后选择greengrassObjectClassification.

    2. InTarget type,选择服务,然后选择IoT 云.

  3. In主题筛选条件输入hello/world,然后选择创建订阅.

步骤。部署 Greengrass 组

在该步骤中,将最新版本的组定义部署到 Greengrass 核心设备。该定义包含您添加的 Lambda 函数、资源和订阅配置。

  1. 确保Amazon IoT Greengrass核心正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

    1. 要检查守护程序是否正在运行,请执行以下操作:

      ps aux | grep -E 'greengrass.*daemon'

      如果输出包含 root/greengrass/ggc/packages/1.11.6/bin/daemon 条目,则表示守护程序正在运行。

      注意

      路径中的版本取决于您的核心设备上安装的 Amazon IoT Greengrass 核心软件版本。

    2. 启动守护程序:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在组配置页面上,选择部署.

    
            突出显示“Deployments (部署)”和“Deploy (部署)”的组页面。
  3. Lambda 函数选项卡,位于系统 Lambda 函数部分,选择IP 探测器然后选择编辑.

  4. 编辑 IP 探测器设置对话框中,选择自动检测和覆盖 MQTT 代理端点.

  5. 选择Save(保存)。

    这使得设备可以自动获取核心的连接信息,例如 IP 地址、DNS 和端口号。建议使用自动检测,不过 Amazon IoT Greengrass 也支持手动指定的终端节点。只有在首次部署组时,系统才会提示您选择发现方法。

    注意

    如果出现提示,请授予创建Greengrass 服务角色并将其与你的Amazon Web Services 账户在最新的Amazon Web Services 区域. 此角色允许Amazon IoT Greengrass访问您的资源Amazon服务。

    Deployments (部署) 页面显示了部署时间戳、版本 ID 和状态。完成后,部署的状态应显示为已完成.

    有关部署的更多信息,请参阅将 Amazon IoT Greengrass 组部署到 Amazon IoT Greengrass 核心. 有关问题排查帮助,请参阅排除 Amazon IoT Greengrass 的故障

步骤。测试推理应用程序

现在,您可以验证是否正确配置了部署。要进行测试,您需要订阅hello/world主题并查看由 Lambda 函数发布的预测结果。

注意

如果将一个监视器连接到 Raspberry Pi,活动摄像机源将显示在预览窗口中。

  1. 在Amazon IoT控制台,在测试,选择MQTT 测试客户端.

  2. 对于 Subscriptions (订阅),使用以下值:

    • 对于订阅主题,请使用 hello/world。

    • UNDER其他配置,对于MQTT 负载显示,选择将负载显示为字符串.

  3. 选择 Subscribe

    如果测试成功,来自 Lambda 函数的消息将显示在页面底部。每条消息包含图像的前 5 个预测结果,这些结果使用以下格式:可能性、预测的类 ID 及对应的类名称。

    
            显示了包含消息数据的测试结果的“Subscriptions (订阅)”页面。

Amazon IoT Greengrass ML 推理问题排查

如果测试失败,您可以尝试以下问题排查步骤。在您的 Raspberry Pi 终端中运行以下命令。

检查错误日志

  1. 切换到根用户并导航到 log 目录。访问 Amazon IoT Greengrass 日志需要根权限。

    sudo su cd /greengrass/ggc/var/log
  2. system 目录中,选中 runtime.logpython_runtime.log

    user/region/account-id 目录中,选中 greengrassObjectClassification.log

    有关更多信息,请参阅 使用日志排查问题

打开包装错误消息runtime.log

如果 runtime.log 包含类似于下面的错误,请确保您的 tar.gz 源模型包具有一个父目录。

Greengrass deployment error: unable to download the artifact model-arn: Error while processing. Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn, error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory

如果您的包没有包含模型文件的父目录,请使用以下命令来重新包装e模型:

tar -zcvf model.tar.gz ./model

例如:

─$ tar -zcvf test.tar.gz ./test ./test ./test/some.file ./test/some.file2 ./test/some.file3
注意

不要在此命令中包含尾随 /* 字符。

 

验证 Lambda 函数是否已成功部署

  1. 列出已部署 Lambda 的内容/lambda目录。在运行命令前替换占位符值。

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. 验证该目录是否包含与greengrassObjectClassification.zip您在中上传的部署包第 4 步:创建并发布 Lambda 函数.

    确保 .py 文件和依赖项位于该目录的根目录中。

 

验证推理模型是否已成功部署

  1. 查找 Lambda 运行时进程的进程标识号 (PID):

    ps aux | grep 'lambda-function-name*'

    在输出中,PID 显示在 Lambda 运行时进程的行的第二列中。

  2. 输入 Lambda 运行时命名空间。请确保在运行命令前替换占位符 pid 值。

    注意

    此目录及其内容位于 Lambda 运行时命名空间中,因此它们不会显示在常规 Linux 命名空间中。

    sudo nsenter -t pid -m /bin/bash
  3. 列出您为 ML 资源指定的本地目录的内容。

    cd /greengrass-machine-learning/mxnet/squeezenet/ ls -ls

    您应该看到以下文件:

    32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt 32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json 4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params

后续步骤

接下来,探索其他推理应用程序。Amazon IoT Greengrass提供了您可用于试用本地推理的其他 Lambda 函数。您可以在您在第 2 步:安装 MXNet 框架中下载的预编译库文件夹中查找示例程序包。

配置 Intel Atom

要在 Intel Atom 设备上运行本教程,您必须提供源图像、配置 Lambda 函数并添加其他本地设备资源。要使用 GPU 进行推理,请确保您的设备上已安装以下软件:

  • OpenCL 版本 1.0 或更高版本

  • Python 3.7 和 pip

    注意

    如果您的设备是使用 Python 3.6 预构建的,则可改为创建指向 Python 3.7 的符号链接。有关更多信息,请参阅 步骤 2

  • NumPy

  • 基于 Wheel 的 OpenCV

  1. 下载Lambda 函数的静态 PNG 或 JPG 图像以用于图像分类。该示例最适合小型图像文件。

    将图像文件保存在包含 greengrassObjectClassification.py 文件的目录中(或保存在此目录的子目录中)。此目录位于您在中上传的 Lambda 函数部署程序包中第 4 步:创建并发布 Lambda 函数.

    注意

    如果您使用的是 Amazon DeepLens,则可以使用板载摄像机或安装自己的摄像机来对捕获到的图像而非静态图像运行推理。但是,我们强烈建议您先用静态图像开始。

    如果您使用的是摄像机,请确保 awscam APT 程序包已安装并且是最新的。有关更多信息,请参阅 。更新您的Amazon DeepLens设备中的Amazon DeepLens开发人员指南.

  2. 如果您没有使用 Python 3.7,请确保创建从 Python 3.x 到 Python 3.7 的符号链接。这会将您的设备配置为将 Python 3 与 Amazon IoT Greengrass 结合使用。运行以下命令可查找您的 Python 安装:

    which python3

    运行以下命令可创建符号链接:

    sudo ln -s path-to-python-3.x/python3.x path-to-python-3.7/python3.7

    重新启动设备。

  3. 编辑 Lambda 函数的配置。按照第 5 步:将 Lambda 函数添加到 Greengrass 组中的程序进行操作。

    注意

    建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。

    1. 要在没有容器化的情况下运行:

      • 适用于系统用户和组,选择Another user ID/group ID. 适用于系统用户 ID。输入0. 适用于系统组 ID输入0.

        这样,就可以将 Lambda 函数以根用户身份运行。有关以 root 身份运行的更多信息,请参阅在组中设置 Lambda 函数的默认访问身份.

        提示

        你还必须更新你的config.json文件授予访问 Lambda 函数的权限。有关步骤,请参阅以根用户身份运行 Lambda 函数.

      • 适用于Lambda 函数容器化,选择无容器.

        有关在不进行容器化的情况下运行的更多信息,请参阅选择 Lambda 函数容器化时的注意事项.

      • Timeout (超时) 值更新为 5 秒。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。

      • UNDERPinned,选择True.

      • UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).

      • 对于 Lambda 生命周期,选择 Make this function long-lived and keep it running indefinitely (使此函数长时间生存,保持其无限期运行)

    2. 要改为在容器化模式下运行,请执行以下操作:

      注意

      建议在容器化模式下运行,除非您的业务案例需要这样。

      • Timeout (超时) 值更新为 5 秒。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。

      • 适用于Pinned,选择True.

      • UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).

  4. 如果在容器化模式下运行中,添加所需的本地设备资源以授予对设备 GPU 的访问权限。

    注意

    如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置设备资源即可访问设备 GPU。

    1. 在组配置页面上,选择资源选项卡。

    2. 选择添加本地资源.

    3. 定义资源:

      • 对于 Resource name (资源名称),输入 renderD128

      • 适用于资源类型,选择本地设备.

      • 对于 Device path (设备路径),输入 /dev/dri/renderD128

      • 适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.

      • 适用于Lambda 函数附属关系,GRANT读取和写入权限到您的 Lambda 函数。

配置 NVIDIA Jetson TX2

要在 NVIDIA Jetson TX2 上运行本教程,您需要提供源图像并配置 Lambda 函数。如果您使用的是 GPU,则还必须添加本地设备资源。

  1. 确保已配置您的 Jetson 设备,以便安装 Amazon IoT Greengrass Core 软件。有关配置设备的更多信息,请参阅设置其他设备

  2. 打开 MXNet 文档,转至在 Jetson 上安装 MXNet,然后按照说明执行操作以在 Jetson 设备上安装 MXNet。

    注意

    如果要从源构建 MXNet,请按照说明执行操作来构建共享库。编辑 config.mk 文件中的以下设置以使用 Jetson TX2 设备:

    • -gencode arch=compute-62, code=sm_62 添加到 CUDA_ARCH 设置。

    • 打开 CUDA。

      USE_CUDA = 1
  3. 下载Lambda 函数的静态 PNG 或 JPG 图像以用于图像分类。该应用最适合小型图像文件。或者,您可以分析 Jetson 板上的摄像机来捕获源图像。

    将图像文件保存在包含 greengrassObjectClassification.py 文件的目录中。您也可以将这些文件保存在此目录的子目录中。此目录位于您在中上传的 Lambda 函数部署程序包中第 4 步:创建并发布 Lambda 函数.

  4. 创建从 Python 3.7 到 Python 3.6 的符号链接以将 Python 3 与 Amazon IoT Greengrass 结合使用。运行以下命令可查找您的 Python 安装:

    which python3

    运行以下命令可创建符号链接:

    sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7

    重新启动设备。

  5. 确保 ggc_user 系统账户可以使用 MXNet 框架:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. 编辑 Lambda 函数的配置。按照第 5 步:将 Lambda 函数添加到 Greengrass 组中的程序进行操作。

    注意

    建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。

    1. 要在没有容器化的情况下运行:

      • 适用于系统用户和组,选择Another user ID/group ID. 适用于系统用户 ID。输入0. 适用于系统组 ID输入0.

        这样,就可以将 Lambda 函数以根用户身份运行。有关以 root 身份运行的更多信息,请参阅在组中设置 Lambda 函数的默认访问身份.

        提示

        你还必须更新你的config.json文件授予访问 Lambda 函数的权限。有关步骤,请参阅以根用户身份运行 Lambda 函数.

      • 适用于Lambda 函数容器化,选择无容器.

        有关在不进行容器化的情况下运行的更多信息,请参阅选择 Lambda 函数容器化时的注意事项.

      • UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).

      • UNDER环境变量,将以下键/值对添加到 Lambda 函数。这会将 Amazon IoT Greengrass 配置为使用 MXNet 框架。

        密钥

        路径

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. 要改为在容器化模式下运行,请执行以下操作:

      注意

      建议在容器化模式下运行,除非您的业务案例需要这样。

      • 提高内存限制值。使用 500 MB(对于 CPU)或至少使用 2000 MB(对于 GPU)。

      • UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).

      • UNDER环境变量,将以下键/值对添加到 Lambda 函数。这会将 Amazon IoT Greengrass 配置为使用 MXNet 框架。

        密钥

        路径

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. 如果在容器化模式下运行中,添加以下本地设备资源以授予对设备 GPU 的访问权限。按照第 6 步:将资源添加到 Greengrass 组中的程序进行操作。

    注意

    如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置设备资源即可访问设备 GPU。

    对于每个资源:

    • 对于 Resource type (资源类型),选择 Device (设备)

    • 适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.

       

      名称

      设备路径

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. 如果在容器化模式下运行中,添加以下本地卷资源以授予对设备摄像头的访问权限。按照第 6 步:将资源添加到 Greengrass 组中的程序进行操作。

    注意

    如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置音量资源即可访问设备摄像头。

    • 对于 Resource type (资源类型),选择 Volume (卷)

    • 适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.

       

      名称

      源路径

      目的地路径

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp