本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程: SageMaker 边缘管理器入门
重要
SageMaker 边缘管理器已于 2024 年 4 月 26 日停产。有关继续将模型部署到边缘设备的更多信息,请参阅 Edg SageMaker e Manager 生命周期终止。
Amazon SageMaker Edge Manager 是一款在边缘设备上运行的软件代理。 SageMaker Edge Manager 为边缘设备提供模型管理,因此您可以直接在 Greengrass 核心设备上打包和使用 Amazon SageMaker Neo 编译的模型。通过使用 SageMaker Edge Manager,您还可以对核心设备的模型输入和输出数据进行采样,并将这些数据发送到 Amazon Web Services 云 进行监控和分析。有关 SageMaker Edge Manager 如何在 Greengrass 核心设备上工作的更多信息,请参阅。在 Green SageMaker grass 核心设备上使用亚马逊 Edge Manager
本教程向您展示了如何在现有核心设备上使用 SageMaker 边缘管理器以及 Amazon提供的示例组件。这些示例组件使用 SageMaker Edge Manager 组件作为依赖项来部署 Edge Manager 代理,并使用使用 Neo 编译的预训练模型执行推理。 SageMaker 有关 SageMaker 边缘管理器代理的更多信息,请参阅《亚马逊 SageMaker 开发者指南》中的SageMaker 边缘管理器。
要在现有 Green SageMaker grass 核心设备上设置和使用 Edge Manager 代理 Amazon ,请提供可用于创建以下示例推理和建模组件的示例代码。
-
图像分类
-
com.greengrass.SageMakerEdgeManager.ImageClassification
-
com.greengrass.SageMakerEdgeManager.ImageClassification.Model
-
-
物体检测
-
com.greengrass.SageMakerEdgeManager.ObjectDetection
-
com.greengrass.SageMakerEdgeManager.ObjectDetection.Model
-
本教程向您展示如何部署示例组件和 SageMaker Edge Manager 代理。
先决条件
要完成本教程,您必须满足以下先决条件:
-
在亚马逊 Linux 2、基于 Debian 的 Linux 平台(x86_64 或 Armv8)或 Windows(x86_64)上运行的 Greengrass 核心设备。如果没有,请参阅教程:Amazon IoT Greengrass V2 入门。
-
安装在核心设备上的 Pyth@@ on
3.6 或更高版本,包括 pip
适用于你的 Python 版本。 -
安装在核心设备上的 API GLX OpenGL 运行时
libgl1-mesa-glx
()。 -
具有管理员权限的 Amazon Identity and Access Management (IAM) 用户。
-
符合以下要求且支持互联网的 Windows、Mac 或类似 Unix 的开发计算机:
-
已安装 Python
3.6 或更高版本。 -
Amazon CLI 使用您的IAM管理员用户凭据进行安装和配置。有关更多信息,请参阅安装 Amazon CLI和配置 Amazon CLI。
-
-
以下 S3 存储桶在与您的 Greengrass 核心设备相同 Amazon Web Services 账户 且 Amazon Web Services 区域 与您的 Greengrass 核心设备相同的情况下创建:
-
一个 S3 存储桶,用于存储示例推理和模型组件中包含的项目。本教程使用 amzn-s3-demo-bucket1 来引用此存储桶。
-
与 SageMaker 边缘设备队列关联的 S3 存储桶。 SageMaker Edge Manager 需要一个 S3 存储桶来创建边缘设备队列,并存储在设备上运行推理的示例数据。本教程使用 amzn-s3-demo-bucket2 来引用此存储桶。
有关创建 S3 存储桶的信息,请参阅 Amazon S3 入门。
-
-
Greengrass 设备角色配置如下:
-
一种允许
credentials.iot.amazonaws.com
和sagemaker.amazonaws.com
担任角色的信任关系,如以下IAM策略示例所示。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
AmazonSageMakerFullAccess
IAM托管策略。 -
包含您的组件工件的 S3 存储桶的
s3:GetObject
操作,如以下IAM策略示例所示。{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Effect": "Allow" } ] }
-
在 Edge Manager 中设置你的 Greengrass 核心设备 SageMaker
边缘管理器中的 SageMaker 边缘设备队列是按逻辑分组的设备的集合。要将 SageMaker Edge Manager 与一起使用 Amazon IoT Greengrass,必须创建一个边缘设备队列,该队列使用的 Amazon IoT 角色别名与部署边缘管理器代理的 Greengrass 核心设备相同。 SageMaker 然后,您必须将核心设备注册为该队列的一部分。
创建边缘设备队列
创建边缘设备队列(控制台)
-
在亚马逊 SageMaker 控制台
中,选择边缘管理器,然后选择边缘设备队列。 -
在设备队列页面上,选择创建设备队列。
-
在 “设备队列属性” 下,执行以下操作:
-
在设备队列名称中,输入设备队列的名称。
-
对于IAM角色,请输入您在设置 Greengrass 核心设备时指定的 Amazon IoT 角色别名的亚马逊资源名称 (ARN)。
-
禁用 “创建IAM角色别名” 开关。
-
-
选择下一步。
-
在 “输出配置” 下URI,对于 S 3 存储桶,输入要与设备队列关联的 S3 存储桶。URI
-
选择提交。
注册你的 Greengrass 核心设备
将您的 Greengrass 核心设备注册为边缘设备(主机)
-
在亚马逊 SageMaker 控制台
中,选择边缘管理器,然后选择边缘设备。 -
在设备页面上,选择注册设备。
-
在 “设备属性” 下的 “设备队列名称” 中,输入您创建的设备队列的名称,然后选择 “下一步”。
-
选择下一步。
-
在 “设备来源” 下,在 “设备名称” 中,输入 Greengrass 核心设备 Amazon IoT 的事物名称。
-
选择提交。
创建示例组件
为了帮助您开始使用 SageMaker Edge Manager 组件, Amazon 提供了一个 Amazon Web Services 云 用于创建示例推理和模型组件的 Python GitHub 脚本,并将它们上传到。在开发计算机上完成以下步骤。
创建示例组件
-
将Amazon IoT Greengrass 组件示例
存储库下载 GitHub 到您的开发计算机上。 -
导航到已下载
/machine-learning/sagemaker-edge-manager
的文件夹。cd
download-directory
/machine-learning/sagemaker-edge-manager -
运行以下命令来创建示例组件并将其上传到 Amazon Web Services 云。
python3 create_components.py -r
region
-b amzn-s3-demo-bucketReplace(替换)
region
使用您创建 Greengrass 核心设备 Amazon Web Services 区域 的位置,然后将 amzn-s3-demo-bucket1 替换为用于存储组件工件的 S3 存储桶的名称。注意
默认情况下,该脚本会为图像分类和物体检测推断创建示例组件。要仅为特定类型的推理创建组件,请指定
-i
参数。ImageClassification | ObjectDetection
现在已在中创建了与 SageMaker Edge Manager 一起使用的示例推理和模型组件。 Amazon Web Services 账户要在Amazon IoT Greengrass 控制台
-
com.greengrass.SageMakerEdgeManager.ImageClassification
-
com.greengrass.SageMakerEdgeManager.ImageClassification.Model
-
com.greengrass.SageMakerEdgeManager.ObjectDetection
-
com.greengrass.SageMakerEdgeManager.ObjectDetection.Model
运行样本图像分类推理
要使用 Amazon提供的示例组件和 SageMaker Edge Manager 代理运行图像分类推理,必须将这些组件部署到核心设备。部署这些组件会下载 SageMaker Neo 编译的预训练的 Resnet-50 模型,并在您的设备上安装 SageMaker Edge Manager 代理。边 SageMaker 缘管理器代理加载模型并发布有关该gg/sageMakerEdgeManager/image-classification
主题的推理结果。要查看这些推理结果,请使用 Amazon IoT 控制台中的 Amazon IoT MQTT客户端订阅此主题。
订阅通知主题
在此步骤中,您将 Amazon IoT 控制台中的 Amazon IoT MQTT客户端配置为观看示例推理组件发布的MQTT消息。默认情况下,该组件会发布有关该gg/sageMakerEdgeManager/image-classification
主题的推理结果。在将组件部署到 Greengrass 核心设备之前,请订阅此主题,以查看组件首次运行时的推理结果。
订阅默认通知主题
-
在Amazon IoT 控制台
导航菜单中,选择测试,MQTT测试客户端。 -
在 “订阅主题” 下的 “主题名称” 框中输入
gg/sageMakerEdgeManager/image-classification
。 -
选择订阅。
部署示例组件
在此步骤中,您将配置以下组件并将其部署到核心设备:
-
aws.greengrass.SageMakerEdgeManager
-
com.greengrass.SageMakerEdgeManager.ImageClassification
-
com.greengrass.SageMakerEdgeManager.ImageClassification.Model
-
在Amazon IoT Greengrass 控制台
导航菜单中,选择部署,然后为要修改的目标设备选择部署。 -
在部署页面上,选择修订,然后选择修订部署。
-
在指定目标页面,选择下一步。
-
在选择用户页面上,执行以下操作:
-
在 “我的组件” 下,选择以下组件:
-
com.greengrass.SageMakerEdgeManager.ImageClassification
-
com.greengrass.SageMakerEdgeManager.ImageClassification.Model
-
-
在 “公共组件” 下,关闭 “仅显示选定的组件” 开关,然后选择该
aws.greengrass.SageMakerEdgeManager
组件。 -
选择下一步。
-
-
在 “配置组件” 页面上,选择该
aws.greengrass.SageMakerEdgeManager
组件并执行以下操作。-
选择配置组件。
-
在配置更新下的要合并的配置中,输入以下配置。
{ "DeviceFleetName": "
device-fleet-name
", "BucketName": "amzn-s3-demo-bucket
" }Replace(替换)
device-fleet-name
使用您创建的边缘设备队列的名称,然后替换amzn-s3-demo-bucket
使用与您的设备队列关联的 S3 存储桶的名称。 -
选择确认,然后选择下一步。
-
-
在配置高级设置页面上,保留默认配置设置,然后选择下一步。
-
在 “审阅” 页面上,选择 “部署”
-
在开发计算机上,创建一个
deployment.json
文件来定义 SageMaker Edge Manager 组件的部署配置。此文件应类似于以下示例。{ "targetArn":"
targetArn
", "components": { "aws.greengrass.SageMakerEdgeManager": { "componentVersion": "1.0.x
", "configurationUpdate": { "merge": "{\"DeviceFleetName\":\"device-fleet-name
\",\"BucketName\":\"amzn-s3-demo-bucket2
\"}" } }, "com.greengrass.SageMakerEdgeManager.ImageClassification": { "componentVersion": "1.0.x
", "configurationUpdate": { } }, "com.greengrass.SageMakerEdgeManager.ImageClassification.Model": { "componentVersion": "1.0.x
", "configurationUpdate": { } }, } }-
在
targetArn
字段中,按以下格式
替换为部署目标的事物或事物组的 Amazon 资源名称 (ARN):targetArn
-
事物:
arn:aws:iot:
region
:account-id
:thing/thingName
-
事物组:
arn:aws:iot:
region
:account-id
:thinggroup/thingGroupName
-
-
在
merge
字段中,替换device-fleet-name
使用您创建的边缘设备队列的名称。然后,替换amzn-s3-demo-bucket2
使用与您的设备队列关联的 S3 存储桶的名称。 -
将每个组件的组件版本替换为最新的可用版本。
-
-
运行以下命令以在设备上部署组件:
aws greengrassv2 create-deployment \ --cli-input-json file://
path/to/
deployment.json
完成部署可能需要数分钟。在下一步中,检查组件日志,以验证部署是否成功完成并查看推理结果。
查看推理结果
部署组件后,您可以在 Greengrass 核心设备的组件日志和控制台的客户端中查看推理结果。 Amazon IoT MQTT Amazon IoT 要订阅组件发布推理结果的主题,请参阅订阅通知主题。
-
Amazon IoT MQTTclient —要查看推理组件在默认通知主题上发布的结果,请完成以下步骤:
-
在Amazon IoT 控制台
导航菜单中,选择测试,MQTT测试客户端。 -
在 “订阅” 下,选择
gg/sageMakerEdgeManager/image-classification
。
-
-
组件日志-要在组件日志中查看推理结果,请在 Greengrass 核心设备上运行以下命令。
sudo tail -f
/logs/com.greengrass.SageMakerEdgeManager.ImageClassification.log/greengrass/v2
如果您在组件日志或MQTT客户端中看不到推理结果,则表示部署失败或未到达核心设备。如果您的核心设备未连接到互联网或没有运行该组件的正确权限,则可能会发生这种情况。在您的核心设备上运行以下命令以查看 Amazon IoT Greengrass 核心软件日志文件。此文件包含来自 Greengrass 核心设备部署服务的日志。
sudo tail -f
/logs/greengrass.log
/greengrass/v2
有关更多信息,请参阅 对机器学习推理进行故障排除。