

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

# 教程：开始使用 A SageMaker I 边缘管理器
<a name="get-started-with-edge-manager-on-greengrass"></a>

**重要**  
SageMaker AI 边缘管理器已于 2024 年 4 月 26 日停产。有关继续将模型部署到边缘设备的更多信息，请参阅 [SageMaker AI Edge Manager 生命周期终止](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-eol.html)。

Amazon SageMaker AI Edge Manager 是一款在边缘设备上运行的软件代理。 SageMaker AI Edge Manager 为边缘设备提供模型管理，因此您可以直接在 Greengrass 核心设备上打包和使用 SageMaker Amazon AI Neo 编译的模型。通过使用 SageMaker AI Edge Manager，您还可以对核心设备的模型输入和输出数据进行采样，并将这些数据发送到 AWS 云 进行监控和分析。有关 SageMaker AI Edge Manager 如何在 Greengrass 核心设备上工作的更多信息，请参阅。[在 Greengrass 核心设备上使用亚马逊 SageMaker AI 边缘管理器](use-sagemaker-edge-manager.md)

本教程向您展示如何开始在现有核心设备上使用 SageMaker AI Edge Manager 以及 AWS提供的示例组件。这些示例组件使用 SageMaker AI Edge Manager 组件作为依赖项来部署 Edge Manager 代理，并使用使用 SageMaker AI Neo 编译的预训练模型执行推理。有关 SageMaker AI 边缘管理器代理的更多信息，请参阅 A *mazon SageMaker AI 开发者指南中的 A SageMaker I* [Edge Manager](https://docs.aws.amazon.com/sagemaker/latest/dg/edge.html)。

要在现有 Greengrass 核心设备上设置和使用 SageMaker AI Edge Manager 代理 AWS ，请提供可用于创建以下示例推理和建模组件的示例代码。
+ **图像分类**
  +  `com.greengrass.SageMakerEdgeManager.ImageClassification` 
  +  `com.greengrass.SageMakerEdgeManager.ImageClassification.Model` 
+ **对象检测**
  + `com.greengrass.SageMakerEdgeManager.ObjectDetection `
  + `com.greengrass.SageMakerEdgeManager.ObjectDetection.Model`

本教程向您展示如何部署示例组件和 SageMaker AI Edge Manager 代理。

**Topics**
+ [先决条件](#edge-manager-getting-started-prereqs)
+ [在 AI Edge Manager 中设置你的 Greengrass 核心设备 SageMaker](#greengrass-edge-manager-set-up)
+ [创建示例组件](#create-sample-sme-ml-components)
+ [运行示例图像分类推理](#run-sample-sme-image-classification-inference)

## 先决条件
<a name="edge-manager-getting-started-prereqs"></a>

要完成本教程，您必须满足以下先决条件：
+ <a name="sm-req-core-device"></a>在 Amazon Linux 2、基于 Debian 的 Linux 平台（x86\$164 或 Armv8）或 Windows（x86\$164）上运行的 Greengrass 核心设备。如果没有，请参阅[教程：AWS IoT Greengrass V2 入门](getting-started.md)。
+ <a name="sm-req-python"></a>核心设备上已安装 [Python](https://www.python.org/downloads/) 3.6 或更高版本，包括适用于您的 Python 版本的 `pip`。
+ 核心设备上已安装 OpenGL API GLX 运行时（`libgl1-mesa-glx`）。
+ 具有管理员权限的 AWS Identity and Access Management (IAM) 用户。
+ 一台支持互联网连接的 Windows、Mac 或类 Unix 开发计算机，满足以下要求：
  + 已安装 [Python](https://www.python.org/downloads/) 3.6 或更高版本。
  + AWS CLI 使用您的 IAM 管理员用户证书进行安装和配置。有关更多信息，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
+ 以下 S3 存储桶在与您的 Greengrass 核心设备相同 AWS 账户 且 AWS 区域 与您的 Greengrass 核心设备相同的情况下创建：
  + 用于存储示例推理和模型组件中包含的构件的 S3 存储桶。本教程使用 amzn-s3-demo-bucket1 来指代此存储桶。
  + 与 A SageMaker I 边缘设备队列关联的 S3 存储桶。 SageMaker AI Edge Manager 需要一个 S3 存储桶来创建边缘设备队列，并存储在设备上运行推理的示例数据。本教程使用 amzn-s3-demo-bucket2 来指代此存储桶。

  有关创建 S3 存储桶的更多信息，请参阅 [Amazon S3 入门](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。
+ 已为 [Greengrass 设备角色](device-service-role.md)配置以下项：
  + <a name="sm-req-iam-trust-relationship"></a>允许 `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" 
        } 
      ] 
    }
    ```
  + <a name="sm-req-iam-sagemanakeredgedevicefleetpolicy"></a>I [AmazonSageMakerEdgeDeviceFleetPolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AmazonSageMakerEdgeDeviceFleetPolicy)AM 托管策略。
  + I [AmazonSageMakerFullAccess](https://console.aws.amazon.com//iamv2/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess?section=policy_permissions)AM 托管策略。
  + 适用于包含您的组件构件的 S3 存储桶的 `s3:GetObject` 操作，如以下 IAM 策略示例所示。

------
#### [ JSON ]

****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
      {
        "Action": [
          "s3:GetObject"
        ],
        "Resource": [
          "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        ],
        "Effect": "Allow"
      }
      ]
    }
    ```

------

## 在 AI Edge Manager 中设置你的 Greengrass 核心设备 SageMaker
<a name="greengrass-edge-manager-set-up"></a>

 SageMaker AI Edge Manager 中的边缘设备队列是按逻辑分组的设备的集合。要将 SageMaker AI Edge Manager 与一起使用 AWS IoT Greengrass，您必须创建一个边缘设备队列，该队列使用的 AWS IoT 角色别名与您部署 SageMaker AI Edge Manager 代理的 Greengrass 核心设备相同。然后，您必须将核心设备注册为该实例集的一部分。

**Topics**
+ [创建边缘设备实例集](#create-edge-device-fleet-for-greengrass)
+ [注册 Greengrass 核心设备](#register-greengrass-core-device-in-sme)

### 创建边缘设备实例集
<a name="create-edge-device-fleet-for-greengrass"></a>

**创建边缘设备实例集（控制台）**

1. 在 [Amazon A SageMaker I 控制台](https://console.aws.amazon.com/sagemaker)中，选择 **Edge Manager**，然后选择 **Edge 设备队列**。

1. 在**设备实例集**页面上，选择**创建设备实例集**。

1. 在**设备实例集属性**下，执行以下操作：
   + 对于**设备实例集名称**，输入设备实例集的名称。
   + 对于 **IAM 角色**，输入您在设置 Greengrass 核心设备时指定的 AWS IoT 角色别名的 Amazon 资源名称（ARN）。
   + 禁用**创建 IAM 角色别名**开关。

1. 选择**下一步**。

1. 在**输出配置**下，对于 **S3 存储桶 URI**，输入要与设备实例集关联的 S3 存储桶的 URI。

1. 选择**提交**。

### 注册 Greengrass 核心设备
<a name="register-greengrass-core-device-in-sme"></a>

**将 Greengrass 核心设备注册为边缘设备（控制台）**

1. 在 [Amazon SageMaker AI 控制台](https://console.aws.amazon.com/sagemaker)中，选择**边缘管理器**，然后选择**边缘设备**。

1. 在**设备**页面上，选择**注册设备**。

1. 在**设备属性**下，对于**设备实例集名称**，输入您创建的设备实例集的名称，然后选择**下一步**。

1. 选择**下一步**。

1. 在 “**设备来源**” 下，在 “**设备名称**” 中，输入 Greengrass 核心设备 AWS IoT 的事物名称。

1. 选择**提交**。

## 创建示例组件
<a name="create-sample-sme-ml-components"></a>

为了帮助您开始使用 SageMaker AI Edge Manager 组件，在上面 AWS 提供了一个 Python 脚本 GitHub ，用于创建示例推理和建模组件，并将它们上传到 AWS 云 供您使用。在开发计算机上完成以下步骤。

**创建示例组件**

1. 将[AWS IoT Greengrass 组件示例](https://github.com/aws-greengrass/aws-greengrass-component-examples/)存储库下载 GitHub 到您的开发计算机上。

1. 导航到下载的 `/machine-learning/sagemaker-edge-manager` 文件夹。

   ```
   cd download-directory/machine-learning/sagemaker-edge-manager
   ```

1. 运行以下命令，创建示例组件并将其上传到 AWS 云。

   ```
   python3 create_components.py -r region -b amzn-s3-demo-bucket
   ```

   *region*替换为您创建 Greengrass 核心设备 AWS 区域 的位置，将 amzn-s3-demo-bucket1 替换为用于存储组件工件的 S3 存储桶的名称。
**注意**  
默认情况下，脚本会为图像分类和对象检测推理创建示例组件。要仅为特定类型的推理创建组件，请指定 `-i ImageClassification | ObjectDetection` 参数。

现在已在中创建了用于 SageMaker AI Edge Manager 的示例推理和模型组件。 AWS 账户要在 [AWS IoT Greengrass 控制台](https://console.aws.amazon.com/greengrass)中查看示例组件，请选择**组件**，然后在**我的组件**下搜索以下组件：
+  `com.greengrass.SageMakerEdgeManager.ImageClassification` 
+  `com.greengrass.SageMakerEdgeManager.ImageClassification.Model` 
+ `com.greengrass.SageMakerEdgeManager.ObjectDetection `
+ `com.greengrass.SageMakerEdgeManager.ObjectDetection.Model`

## 运行示例图像分类推理
<a name="run-sample-sme-image-classification-inference"></a>

要使用 AWS提供的示例组件和 SageMaker AI Edge Manager 代理运行图像分类推理，必须将这些组件部署到核心设备。部署这些组件会下载 A SageMaker I Neo 编译的预训练的 Resnet-50 模型，并在您的设备上安装 SageMaker AI Edge Manager 代理。 SageMaker AI Edge Manager 代理加载模型并发布有关该`gg/sageMakerEdgeManager/image-classification`主题的推理结果。要查看这些推理结果，请使用 AWS IoT 控制台中的 AWS IoT MQTT 客户端订阅此主题。

**Topics**
+ [订阅通知主题](#sme-image-classification-subscribe)
+ [部署示例组件](#sme-image-classification-deploy)
+ [查看推理结果](#sme-image-classification-inference-results)

### 订阅通知主题
<a name="sme-image-classification-subscribe"></a>

在此步骤中，您将在 AWS IoT 控制台中配置 AWS IoT MQTT 客户端，以查看示例推理组件发布的 MQTT 消息。默认情况下，组件会发布有关 `gg/sageMakerEdgeManager/image-classification` 主题的推理结果。在将组件部署到 Greengrass 核心设备之前，请订阅此主题，以便在组件首次运行时查看推理结果。



**订阅默认通知主题**

1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot/)导航菜单中，选择**测试、MQTT 测试客户端**。

1. 在**订阅主题**下的**主题名称**框中输入 **gg/sageMakerEdgeManager/image-classification**。

1. 选择**订阅**。

### 部署示例组件
<a name="sme-image-classification-deploy"></a>

在此步骤中，您配置以下组件并将其部署到核心设备：
+  `aws.greengrass.SageMakerEdgeManager` 
+  `com.greengrass.SageMakerEdgeManager.ImageClassification` 
+  `com.greengrass.SageMakerEdgeManager.ImageClassification.Model` 

#### 部署组件（控制台）
<a name="sme-image-classification-deploy-console"></a>

1. 在 [AWS IoT Greengrass 控制台](https://console.aws.amazon.com/greengrass)导航菜单中，选择**部署**，然后选择要修订的目标设备的部署。

1. 在部署页面上，选择**修订**，然后选择**修订部署**。

1. 在**指定目标**页面，选择**下一步**。

1. 在**选择用户**页面上，执行以下操作：

   1. 在**我的组件**下，选择以下组件：
      +  `com.greengrass.SageMakerEdgeManager.ImageClassification`
      + `com.greengrass.SageMakerEdgeManager.ImageClassification.Model` 

   1. 在**公有组件**下，关闭**仅显示选定组件**开关，然后选择 `aws.greengrass.SageMakerEdgeManager` 组件。

   1. 选择**下一步**。

1. 在**配置组件**页面上，选择 `aws.greengrass.SageMakerEdgeManager` 组件并执行以下操作。

   1. 选择**配置组件**。

   1. 在**配置更新**下的**要合并的配置**中，输入以下配置。

      ```
      {
          "DeviceFleetName": "device-fleet-name",
          "BucketName": "amzn-s3-demo-bucket"
      }
      ```

      *device-fleet-name*替换为您创建的边缘设备队列的名称，并替换为*amzn-s3-demo-bucket*与您的设备队列关联的 S3 存储桶的名称。

   1. 选择**确认**，然后选择**下一步**。

1. 在**配置高级设置**页面上，保留默认配置设置，然后选择**下一步**。

1. 在**检查**页面上，选择**部署**。

#### 部署组件 (AWS CLI)
<a name="sme-image-classification-deploy-cli"></a>

1. 在开发计算机上，创建一个`deployment.json`文件来定义 SageMaker AI 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` 字段中，按以下格式将 `targetArn` 替换为部署目标的事物或事物组的 Amazon 资源名称（ARN）：
     + 事物：`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 存储桶的名称。
   + 将每个组件的组件版本替换为最新的可用版本。

1. 运行以下命令以在设备上部署组件：

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

完成部署可能需要数分钟。在下一步中，检查组件日志，以验证部署是否成功完成并查看推理结果。

### 查看推理结果
<a name="sme-image-classification-inference-results"></a>

部署组件后，您可以在 Greengrass 核心设备的组件日志和控制台的 MQTT 客户端中 AWS IoT 查看推理结果。 AWS IoT 要订阅与组件所发布的推理结果有关的主题，请参阅[订阅通知主题](#sme-image-classification-subscribe)。
+ **AWS IoT MQTT 客户端**-要查看推理组件在[默认通知主题](#sme-image-classification-subscribe)上发布的结果，请完成以下步骤：

  1. 在 [AWS IoT 控制台](https://console.aws.amazon.com/iot/)导航菜单中，选择**测试、MQTT 测试客户端**。

  1. 在**订阅**下，选择 **gg/sageMakerEdgeManager/image-classification**。

   
+ **组件日志** – 要在组件日志中查看推理结果，请在 Greengrass 核心设备上运行以下命令。

  ```
  sudo tail -f /greengrass/v2/logs/com.greengrass.SageMakerEdgeManager.ImageClassification.log
  ```

如果您在组件日志或 MQTT 客户端中看不到推理结果，则表示部署失败或未到达核心设备。如果您的核心设备未连接到互联网或无权运行组件，则可能会发生这种情况。在您的核心设备上运行以下命令以查看 AWS IoT Greengrass 核心软件日志文件。此文件包含来自 Greengrass 核心设备的部署服务的日志。

```
sudo tail -f /greengrass/v2/logs/greengrass.log
```

有关更多信息，请参阅 [机器学习推理故障排除](ml-troubleshooting.md)。