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 或更高版本。
您可以使用 SageMaker Neo 深度学习编译器用于优化本机机器学习推理模型在 Tensorflow、Apache MXNet 中的预测效率 PyTorch、ONNX 和 XGBoost 框架,以实现更小的占用空间和更快的性能。然后可以下载优化的模型,安装 SageMaker Neo 深度学习运行时并将其部署到Amazon IoT Greengrass用于更快推断的设备。
本教程介绍如何将Amazon Web Services Management Console将 Greengrass 组配置为运行一个 Lambda 推理示例,该示例可在本地识别摄像机中的图像,而无需将数据发送至云,而无需将数据发送至云。该推理示例访问 Raspberry Pi 上的摄像机模块。在本教程中,您将下载由 Resnet-50 训练并在 Neo 深度学习编译器中优化的预先打包的模型。然后使用该模型在您的 Amazon IoT Greengrass 设备上执行本地图像分类。
本教程包含以下概括步骤:
先决条件
要完成此教程,需要:
-
Raspberry Pi 4 Model B 或 Raspberry Pi 3 Model B/B+,设置并配置为与结合使用Amazon IoT Greengrass. 设置 Raspberry PiAmazon IoT Greengrass,运行Greengrass 设备设置脚本,或者确保您已完成模块 1和模块 2的Amazon IoT Greengrass 入门.
注意 Raspberry Pi 可能需要 2.5A电源
运行通常用于图像分类的深度学习框架。额定值较低的电源可能会导致设备重新启动。 -
Raspberry Pi 摄像机模块 V2 - 800 万像素,1080p
。要了解如何设置摄像机,请参阅 Raspberry Pi 文档中的连接摄像机 。 -
Greengrass 组和 Greengrass 核心。要了解如何创建 Greengrass 组或核心,请参阅Amazon IoT Greengrass 入门。
本教程使用的是 Raspberry Pi,但 Amazon IoT Greengrass 支持其他平台,例如 Intel Atom 和 NVIDIA Jetson TX2。如果使用的是 Intel Atom 示例,您可能需要安装 Python 3.6 而不是 Python 3.7。有关配置设备以便安装 Amazon IoT Greengrass Core 软件的信息,请参阅设置其他设备。
对于符合以下条件的第三方平台Amazon IoT Greengrass不支持,则必须在非容器化模式下运行 Lambda 函数。要在非容器化模式下运行,您必须以根用户身份,运行您的 Lambda 函数。有关更多信息,请参阅 选择 Lambda 函数容器化时的注意事项 和 在组中设置 Lambda 函数的默认访问身份。
第 1 步:配置 Raspberry Pi
在该步骤中,将安装 Raspbian 操作系统的更新,安装摄像机模块软件和 Python 依赖项,以及启用摄像机接口。
在您的 Raspberry Pi 终端中运行以下命令。
-
安装 Raspbian 的更新。
sudo apt-get update sudo apt-get dist-upgrade
-
安装适用于摄像机模块的
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.7
或python3
版本以避免依赖项错误。 -
-
重启 Raspberry Pi。
sudo reboot
-
打开 Raspberry Pi 配置工具。
sudo raspi-config
-
使用箭头键打开接口选项并启用摄像机接口。如果出现提示,请允许设备重新启动。
-
使用以下命令测试摄像机设置。
raspistill -v -o test.jpg
这将在 Raspberry Pi 上打开一个预览窗口,将名为
test.jpg
的图片保存到您的当前目录,并在 Raspberry Pi 终端中显示有关摄像机的信息。
第 2 步:安装 Amazon SageMaker Neo 深度学习运行时
在此步骤中,在 Raspberry Pi 上安装 Neo 深度学习运行时系统 (DLR)。
对于本教程,我们建议安装 1.1.0 版。
-
远程登录您的 Raspberry Pi。
ssh pi@
your-device-ip-address
-
打开 DLR 文档,打开安装 DLR
,然后找到 Raspberry Pi 设备的 wheel URL。然后,按照说明执行操作,在您的设备上安装 DLR。例如,您可以使用 pip: pip3 install
rasp3b-wheel-url
-
安装 DLR 后,请验证以下配置:
-
确保
ggc_user
系统账户可以使用 DLR 库。sudo -u ggc_user bash -c 'python3 -c "import dlr"'
-
确保 NumPy 已安装。
sudo -u ggc_user bash -c 'python3 -c "import numpy"'
-
第 3 步:创建推理 Lambda 函数
在此步骤中,将创建 Lambda 函数部署程序包和 Lambda 函数。接下来,发布函数版本并创建别名。
-
在您的计算机上,从机器学习示例下载 Raspberry Pi 的 DLR 示例。
-
不要解压下载的
dlr-py3-armv7l.tar.gz
文件。cd
path-to-downloaded-sample
tar -xvzf dlr-py3-armv7l.tar.gz提取的示例程序包中的
examples
目录包含函数代码和依赖项。-
inference.py
是本教程中使用的推理代码。可以将此代码用作模板来创建您自己的推理函数。 -
greengrasssdk
是 1.5.0 版的Amazon IoT Greengrass适用于 Python 的核心开发工具包注意 如果提供了新版本,您可以下载该版本并升级部署程序包中的开发工具包版本。有关更多信息,请参阅 。Amazon IoT GreengrassDevor Python 的核心
上 GitHub.
-
-
将
examples
目录的内容压缩到一个名为optimizedImageClassification.zip
的文件中。这就是您的部署程序包。cd
path-to-downloaded-sample
/dlr-py3-armv7l/examples zip -r optimizedImageClassification.zip .部署程序包包含您的函数代码和依赖项。这包括调用 Neo 深度学习运行时 Python API 以使用 Neo 深度学习编译器模型进行推理的代码。
注意 确保
.py
文件和依赖项位于该目录的根目录中。 -
现在,将 Lambda 函数添加到 Greengrass 组。
在 Lambda 控制台页面中,选择函数然后选择创建函数.
-
选择从头开始创作并使用以下值创建您的函数:
-
对于 Function name(函数名称),请输入
optimizedImageClassification
。 -
对于 Runtime (运行时),选择 Python 3.7。
适用于Permissions (权限),请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未由使用Amazon IoT Greengrass.
-
-
选择 Create function(创建函数)。
现在,上传您的 Lambda 函数部署程序包并注册处理程序。
接下来,发布您的 Lambda 函数的第一个版本。然后,创建版本的别名。
Greengrass 组可以按别名(推荐)或版本引用 Lambda 函数。使用别名,您可以更轻松地管理代码更新,因为您无需更改订阅表或组定义。相反,您只需将别名指向新函数版本。
-
在 Actions 菜单上,选择 Publish new version。
-
对于 Version description (版本描述),输入
First version
,然后选择 Publish (发布)。 -
在存储库的optimizedImageClassification:1配置页面,来自操作菜单中,选择创建别名.
-
在创建新别名页面上,使用以下值:
-
对于 Name (名称),请输入
mlTestOpt
。 -
对于 Version (版本),输入
1
。
注意 Amazon IoT Greengrass不支持将 Lambda 别名用于$LATEST版本。
-
-
选择Create(创建)。
现在,将 Lambda 函数添加到 Greengrass 组。
第 4 步:将 Lambda 函数添加到 Greengrass 组
在此步骤中,将 Lambda 函数添加到该组,然后配置其生命周期。
首先,将 Lambda 函数添加到 Greengrass 组。
在Amazon IoT控制台导航窗格,下Manage,展开Greengrass 设备,然后选择。组 (V1).
-
在组配置页面上,选择Lambda 函数选项卡,然后选择Add.
-
选择Lambda 函数并选择optimizedImageClassification.
-
在存储库的Lambda 函数版本中,选择您发布的版本的别名。
接下来,配置 Lambda 函数的生命周期。
-
在Lambda 函数配置部分,进行以下更新。
注意 建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。
-
要在没有容器化的情况下运行:
-
适用于系统用户和组,选择
Another user ID/group ID
. 适用于系统用户 ID,输入。0
. 适用于系统组 ID,输入。0
.这允许 Lambda 函数以根用户身份运行。有关以 root 用户身份运行的更多信息,请参阅在组中设置 Lambda 函数的默认访问身份.
提示 你还必须更新你的
config.json
文件以授予访问 Lambda 函数的权限。有关步骤,请参阅以根用户身份运行 Lambda 函数. -
适用于Lambda 函数容器化,选择无容器.
有关在不进行容器化的情况下运行的更多信息,请参阅选择 Lambda 函数容器化时的注意事项.
-
对于 Timeout (超时),输入
10 seconds
。 -
适用于Pinned,选择True.
有关更多信息,请参阅 Greengrass Lambda 函数的生命周期配置。
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
要改为在容器化模式下运行,请执行以下操作:
注意 建议在容器化模式下运行,除非您的业务案例需要这样,除非您的业务案例需要这样,除非您的业务案例需要这样。
-
适用于系统用户和组,选择使用Group 默认值.
-
适用于Lambda 函数容器化,选择使用Group 默认值.
-
对于 Memory limit (内存限制),输入
1024 MB
。 -
对于 Timeout (超时),输入
10 seconds
。 -
适用于Pinned,选择True.
有关更多信息,请参阅 Greengrass Lambda 函数的生命周期配置。
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
-
选择添加 Lambda 函数.
第 5 步:添加 SageMaker Greengrass 组的新优化的模型资源
在此步骤中,将为优化的 ML 推理模型创建一个资源并将其上传到 Amazon Simple Storage Service(Amazon S3) 然后 Amazon S3 在Amazon IoT Greengrass控制台并将新创建的资源与 Lambda 函数关联。这使该函数能够访问其在核心设备上的资源。
-
在您的计算机上,导航到您在第 3 步:创建推理 Lambda 函数中提取的示例程序包中的
resnet50
目录。注意 如果使用的是 NVIDIA Jetson 示例,则需要改用示例程序包中的
resnet18
目录。有关更多信息,请参阅 配置 NVIDIA Jetson TX2。cd
path-to-downloaded-sample
/dlr-py3-armv7l/models/resnet50该目录包含使用 Resnet-50 训练的图像分类模型的预编译模型项目。
-
将
resnet50
目录中的文件压缩到一个名为resnet50.zip
的文件中。zip -r resnet50.zip .
-
在组配置页面上Amazon IoT GreengrassGroup (组),选择资源选项卡。导航到 Machine Learning (机器学习) 部分,然后选择 Add machine learning resource (添加机器学习资源)。在 Create a machine learning resource (创建机器学习资源) 页面上,对于 Resource name (资源名称),输入
resnet50_model
。 -
适用于模型源,选择使用存储在 S3 中的模型,例如通过深度学习编译器优化的模型.
-
UNDERS3 URI,选择浏览 S3.
注意 目前,已优化 SageMaker 模型自动存储在 Amazon S3 中。您可以使用此选项在 Amazon S3 存储桶中找到您的优化模型。有关模型优化的更多信息,请参阅 SageMaker,请参阅SageMaker Neo 文档.
-
选择上传模型。
-
在 Amazon S3 控制台选项卡中,将 zip 文件上载到 Simple StorAmazon S3 vice 想要了解有关信息,请参阅如何将文件和文件夹上传至 S3 存储桶?中的Amazon Simple Storage S.
注意 您的存储桶名称必须包含字符串
greengrass
。请选择唯一名称(如greengrass-dlr-bucket-
)。不要在存储桶名称中使用句点 (user-id
-epoch-time
.
)。 -
在Amazon IoT Greengrass控制台选项卡上,找到并选择您的 Amazon S3 存储桶。找到并上传
resnet50.zip
文件,然后选择 Select (选择)。您可能需要刷新页面以更新可用存储桶和文件的列表。 -
In目的地路径,输入。
/ml_model
.这是 Lambda 运行时目标命名空间中本地模型的目标。当您部署该组时,Amazon IoT Greengrass 将检索源模型包,然后将内容提取到指定的目录。
注意 强烈建议使用为您的本地路径提供的准确路径。如果在该步骤中使用不同的本地模型目标路径,则会导致本教程中提供的一些问题排查命令不准确。如果使用不同的路径,则必须设置一个使用此处提供的准确路径的
MODEL_PATH
环境变量。有关环境变量的信息,请参阅 Amazon Lambda 环境变量。 -
如果在容器化模式下运行:
-
UNDER系统组所有者和文件访问权限,选择指定系统组和权限.
-
选择只读访问权限然后选择。添加资源.
-
第 6 步:将摄像机设备资源添加到 Greengrass 组
在此步骤中,将为摄像机模块创建一个资源并将其与 Lambda 函数关联。这使得 Lambda 函数能够访问核心设备上的资源。
如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置此设备资源即可访问您的设备 GPU 和摄像头。
-
在组配置页面上,选择 Settors (组配置)资源选项卡。
-
在本地资源选项卡上,选择添加本地资源.
-
在存储库的添加本地资源页面上,使用以下值:
-
对于 Resource name (资源名称),输入
videoCoreSharedMemory
。 -
对于 Resource type (资源类型),选择 Device (设备)。
-
适用于本地设备路径,输入。
/dev/vcsm
.设备路径是设备资源的本地绝对路径。该路径只能引用
/dev
下的字符设备或块储存设备。 -
适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.
组所有者文件访问权限选项可让您授予对 Lambda 进程的额外的文件访问权限。有关更多信息,请参阅 组所有者文件访问权限。
-
-
在页面底部,选择添加资源.
-
从资源选项卡上,通过选择创建另一个本地资源Add并使用以下值:
-
对于 Resource name (资源名称),输入
videoCoreInterface
。 -
对于 Resource type (资源类型),选择 Device (设备)。
-
适用于本地设备路径,输入。
/dev/vchiq
. -
适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.
-
-
选择 Add resource (添加资源)。
步骤 7:将订阅添加到 Greengrass 组
在该步骤中,将订阅添加到组。这些订阅使 Lambda 函数能够将预测结果发送到Amazon IoT通过向 MQTT 主题发布内容。
-
在组配置页面上,选择 Settors (组配置)订阅选项卡,然后选择。添加订阅.
-
在存储库的创建订阅页面上,配置源和目标,如下所示:
-
In源类型,选择Lambda 函数,然后选择。optimizedImageClassification.
-
InTarget type,选择服务,然后选择。IoT 云.
-
在主题筛选条件,输入。
/resnet-50/predictions
,然后选择。创建订阅.
-
-
添加另一个订阅。选择订阅选项卡上,选择添加订阅,并配置源和目标,如下所示:
-
In源类型,选择服务,然后选择。IoT 云.
-
InTarget type,选择Lambda 函数,然后选择。optimizedImageClassification.
-
在主题筛选条件,输入。
/resnet-50/test
,然后选择。创建订阅.
-
步骤 8:部署 Greengrass 组
在该步骤中,将最新版本的组定义部署到 Greengrass 核心设备。该定义包含您添加的 Lambda 函数、资源和订阅配置。
-
确保Amazon IoT Greengrass核心正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。
-
要检查守护程序是否正在运行,请执行以下操作:
ps aux | grep -E 'greengrass.*daemon'
如果输出包含
root
的/greengrass/ggc/packages/
条目,则表示守护程序正在运行。latest-core-version
/bin/daemon 启动守程序:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
-
在组配置页面上,选择部署.
-
在存储库的Lambda 函数选项卡,选择IP 探测器然后选择编辑.
-
从编辑 IP 探测器设置对话框中,选择。自动检测和覆盖 MQTT 代理端点然后选择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 的故障。
测试推理示例
现在,您可以验证是否正确配置了部署。要进行测试,您需要订阅 /resnet-50/predictions
主题,并向 /resnet-50/test
主题发布任何消息。这会触发 Lambda 函数使用您的 Raspberry Pi 拍照,并对捕获的图像执行推理。
如果使用的是 NVIDIA Jetson 示例,请确保改用 resnet-18/predictions
和 resnet-18/test
主题。
如果将一个监视器连接到 Raspberry Pi,活动摄像机源将显示在预览窗口中。
-
在存储库的Amazon IoT控制台主页,在测试,选择MQTT 测试客户端.
-
适用于订阅,选择订阅主题. 使用以下值。将剩余选项保留为默认值。
-
对于 Subscription topic (订阅主题),输入
/resnet-50/predictions
。 -
UNDER其他配置,对于MQTT 负载显示,选择将负载显示为字符串.
-
-
选择 Subscribe。
-
选择向主题发布,输入。
/resnet-50/test
作为主题名称,然后选择发布. -
如果测试成功,发布的消息会触发 Raspberry Pi 摄像机捕获图像。来自 Lambda 函数的消息将显示在页面底部。该消息包含图像的预测结果,采用的格式为:预测的类名称、可能性和峰值内存使用率。
配置 Intel Atom
要在 Intel Atom 设备上运行本教程,您必须提供源图像、配置 Lambda 函数并添加其他本地设备资源。要使用 GPU 进行推理,请确保您的设备上已安装以下软件:
-
OpenCL 版本 1.0 或更高版本
-
Python 3.7 和 pip
-
下载用于 Lambda 函数的静态 PNG 或 JPG 图像以用于图像分类。该示例最适合小型图像文件。
将图像文件保存在包含
inference.py
文件的目录中(或保存在此目录的子目录中)。此目录位于您在中上传的 Lambda 函数部署程序包中第 3 步:创建推理 Lambda 函数.注意 如果您使用的是 Amazon DeepLens,则可以使用板载摄像机或安装自己的摄像机来对捕获到的图像而非静态图像运行推理。但是,我们强烈建议您先用静态图像开始。
如果您使用的是摄像机,请确保
awscam
APT 程序包已安装并且是最新的。有关更多信息,请参阅 。更新您的Amazon DeepLens设备中的Amazon DeepLens开发人员指南. -
编辑 Lambda 函数的配置。按照第 4 步:将 Lambda 函数添加到 Greengrass 组中的程序进行操作。
注意 建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。
-
要在没有容器化的情况下运行:
-
适用于系统用户和组,选择
Another user ID/group ID
. 适用于系统用户 ID,输入。0
. 适用于系统组 ID,输入。0
.这允许 Lambda 函数以根用户身份运行。有关以 root 用户身份运行的更多信息,请参阅在组中设置 Lambda 函数的默认访问身份.
提示 你还必须更新你的
config.json
文件以授予访问 Lambda 函数的权限。有关步骤,请参阅以根用户身份运行 Lambda 函数. -
适用于Lambda 函数容器化,选择无容器.
有关在不进行容器化的情况下运行的更多信息,请参阅选择 Lambda 函数容器化时的注意事项.
-
将超时值增加到 2 分钟。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。
-
适用于Pinned,选择True.
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
要改为在容器化模式下运行,请执行以下操作:
注意 建议在容器化模式下运行,除非您的业务案例需要这样,除非您的业务案例需要这样,除非您的业务案例需要这样。
-
将内存限制值提高到 3000 MB。
-
将超时值增加到 2 分钟。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。
-
适用于Pinned,选择True.
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
-
将 Neo 优化的模型资源添加到组中。上传您在第 3 步:创建推理 Lambda 函数中提取的示例程序包的
resnet50
目录中的模型资源。该目录包含使用 Resnet-50 训练的图像分类模型的预编译模型项目。按照第 5 步:添加 SageMaker Greengrass 组的新优化的模型资源中的过程操作,并进行以下更新。-
将
resnet50
目录中的文件压缩到一个名为resnet50.zip
的文件中。 -
在 Create a machine learning resource (创建机器学习资源) 页面上,对于 Resource name (资源名称),输入
resnet50_model
。 -
上传
resnet50.zip
文件。
-
-
如果在容器化模式下运行中,添加所需的本地设备资源以授予对设备 GPU 的访问权限。
注意 如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置设备资源即可访问设备 GPU。
-
在组配置页面上,选择 Settors (组配置)资源选项卡。
-
在本地资源部分中,选择。添加本地资源.
-
定义资源:
-
对于 Resource name (资源名称),输入
renderD128
。 -
对于 Resource type (资源类型),选择 Device (设备)。
-
适用于本地设备路径,输入。
/dev/dri/renderD128
. -
适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.
-
-
配置 NVIDIA Jetson TX2
要在 NVIDIA Jetson TX2 上运行本教程,请提供源图像、配置 Lambda 函数并添加更多本地设备资源。
-
确保已配置您的 Jetson 设备,以便安装 Amazon IoT Greengrass Core 软件并使用 GPU 进行推理。有关配置设备的更多信息,请参阅设置其他设备。要在 NVIDIA Jetson TX2 上使用 GPU 进行推理,在使用 Jetpack 4.3 获取板卡图像时,您必须在设备上安装 CUDA 10.0 和 cuDNN 7.0。
-
下载用于 Lambda 函数的静态 PNG 或 JPG 图像以用于图像分类。该示例最适合小型图像文件。
将图像文件保存在包含
inference.py
文件的目录中。您也可以将这些文件保存在此目录的子目录中。此目录位于您在中上传的 Lambda 函数部署程序包中第 3 步:创建推理 Lambda 函数.注意 或者,您也可以在 Jetson 板上安装摄像头来捕获源图像。但是,我们强烈建议您先用静态图像开始。
-
编辑 Lambda 函数的配置。按照第 4 步:将 Lambda 函数添加到 Greengrass 组中的程序进行操作。
注意 建议在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样,除非您的业务案例需要这样。这有助于在不配置设备资源的情况下访问设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须授予对您的 root 访问权限Amazon IoT GreengrassLambda 函数。
-
要在没有容器化的情况下运行:
-
适用于Run as (运行方式),选择
Another user ID/group ID
. 适用于UID,输入。0
. 适用于GUID,输入。0
.这允许 Lambda 函数以根用户身份运行。有关以 root 用户身份运行的更多信息,请参阅在组中设置 Lambda 函数的默认访问身份.
提示 你还必须更新你的
config.json
文件以授予访问 Lambda 函数的权限。有关步骤,请参阅以根用户身份运行 Lambda 函数. -
适用于Lambda 函数容器化,选择无容器.
有关在不进行容器化的情况下运行的更多信息,请参阅选择 Lambda 函数容器化时的注意事项.
-
将超时值增加到 5 分钟。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。
-
适用于Pinned,选择True.
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
要改为在容器化模式下运行,请执行以下操作:
注意 建议在容器化模式下运行,除非您的业务案例需要这样,除非您的业务案例需要这样,除非您的业务案例需要这样。
-
提高内存限制值。要在 GPU 模式下使用提供的模型,请使用至少 2000 MB。
-
将超时值增加到 5 分钟。这可确保请求不会过早超时。设置后,需要几分钟以运行推理。
-
适用于Pinned,选择True.
-
UNDER其他参数,对于对 /sys 目录的只读访问权限,选择Enabled (已启用).
-
-
-
将 Neo 优化的模型资源添加到组中。上传您在第 3 步:创建推理 Lambda 函数中提取的示例程序包的
resnet18
目录中的模型资源。该目录包含使用 Resnet-18 训练的图像分类模型的预编译模型构件。按照第 5 步:添加 SageMaker Greengrass 组的新优化的模型资源中的过程操作,并进行以下更新。-
将
resnet18
目录中的文件压缩到一个名为resnet18.zip
的文件中。 -
在 Create a machine learning resource (创建机器学习资源) 页面上,对于 Resource name (资源名称),输入
resnet18_model
。 -
上传
resnet18.zip
文件。
-
-
如果在容器化模式下运行中,添加所需的本地设备资源以授予对设备 GPU 的访问权限。
注意 如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置设备资源即可访问设备 GPU。
-
在组配置页面上,选择 Settors (组配置)资源选项卡。
-
在本地资源部分中,选择。添加本地资源.
-
定义每个资源:
-
对于资源名称和设备路径,请使用下表中的值。为表中的每个行创建一个设备资源。
-
对于 Resource type (资源类型),选择 Device (设备)。
-
适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.
名称
设备路径
nvhost-ctrl
/dev/nvhost-ctrl
nvhost-gpu
/dev/nvhost-gpu
nvhost-ctrl-gpu
/devnvhost-ctrl-gpu
nvhost-dbg-gpu
/devnvhost-dbg-gpu
nvhost-prof-gpu
/devnvhost-prof-gpu
nvmap
/dev/nvmap
nvhost-vic
/dev/nvhost-vic
tegra_dc_ctrl
/dev/tegra_dc_ctrl
-
-
-
如果在容器化模式下运行中,添加以下本地卷资源以授予对设备摄像头的访问权限。按照第 5 步:添加 SageMaker Greengrass 组的新优化的模型资源中的程序进行操作。
注意 如果您在非容器化模式下运行,Amazon IoT Greengrass无需配置设备资源即可访问设备摄像头。
-
对于 Resource type (资源类型),选择 Volume (卷)。
-
适用于系统组所有者和文件访问权限,选择自动添加拥有资源的系统组权限.
名称
源路径
目的地路径
shm
/dev/shm
/dev/shm
tmp
/tmp
/tmp
-
-
更新组订阅以使用正确的目录。按照步骤 7:将订阅添加到 Greengrass 组中的过程操作,并进行以下更新。
-
对于第一个主题筛选器,请输入
/resnet-18/predictions
。 -
对于第二个主题筛选器,请输入
/resnet-18/test
。
-
-
更新测试订阅以使用正确的目录。按照测试推理示例中的过程操作,并进行以下更新。
-
适用于订阅,选择订阅主题. 对于 Subscription topic (订阅主题),输入
/resnet-18/predictions
。 -
在
/resnet-18/predictions
页面上,指定要发布到的/resnet-18/test
主题。
-
Amazon IoT Greengrass ML 推理问题排查
如果测试失败,您可以尝试以下问题排查步骤。在您的 Raspberry Pi 终端中运行以下命令。
检查错误日志
-
切换到根用户并导航到
log
目录。访问 Amazon IoT Greengrass 日志需要根权限。sudo su cd /greengrass/ggc/var/log
-
Check
runtime.log
任何错误。cat system/runtime.log | grep 'ERROR'
您还可以在用户定义的 Lambda 函数日志中查找任何错误:
cat user/
your-region
/your-account-id
/lambda-function-name
.log | grep 'ERROR'有关更多信息,请参阅 使用日志排查问题。
验证 Lambda 函数是否已成功部署
-
列出已部署的 Lambda 的内容
/lambda
目录。在运行命令前替换占位符值。cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:
region
:account
:function:function-name
:function-version
ls -la -
验证该目录是否包含与
optimizedImageClassification.zip
您在中上传的部署包第 3 步:创建推理 Lambda 函数.确保
.py
文件和依赖项位于该目录的根目录中。
验证推理模型是否已成功部署
-
查找 Lambda 运行时进程的进程标识号 (PID):
ps aux | grep
lambda-function-name
在输出中,PID 显示在 Lambda 运行时进程的行的第二列中。
-
输入 Lambda 运行时命名空间。请确保在运行命令前替换占位符
pid
值。注意 此目录及其内容位于 Lambda 运行时命名空间中,因此它们不会显示在常规 Linux 命名空间中。
sudo nsenter -t
pid
-m /bin/bash -
列出您为 ML 资源指定的本地目录的内容。
注意 如果您的 ML 资源路径不是
ml_model
,则必须在此处替换。cd /ml_model ls -ls
您应该看到以下文件:
56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt
Lambda 函数无法找到 /dev/dri/renderD128
如果 OpenCL 无法连接到需要的 GPU 设备,则可能会发生这种情况。您必须为 Lambda 函数创建必要设备的设备资源。
后续步骤
接下来,探索其他优化模型。有关信息,请参阅 SageMaker Neo 文档。