

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 执行机器学习推理
<a name="ml-inference"></a>

此功能适用于 AWS IoT Greengrass 酷睿 v1.6 或更高版本。

借 AWS IoT Greengrass助，您可以使用云训练模型在边缘对本地生成的数据执行机器学习 (ML) 推理。您可以从运行本地推理的低延迟和成本节省中受益，且仍然可以利用云计算在训练模型和复杂处理方面的强大功能。

要开始执行本地推理，请参阅[如何使用配置机器学习推理 AWS 管理控制台](ml-console.md)。

## AWS IoT Greengrass 机器学习推理的工作原理
<a name="how-ml-inference-works"></a>

您可以在任何位置训练您的推理模型，在 Greengrass 组中将它们本地部署为*机器学习资源*，然后从 Greengrass Lambda 函数访问它们。例如，您可以在 [SageMaker AI](https://console.aws.amazon.com/sagemaker) 中构建和训练深度学习模型，然后将其部署到 Greengrass 核心中。然后，您的 Lambda 函数可以在连接的设备上使用本地模型来执行推理并将新训练数据发送回云中。

下图显示了 AWS IoT Greengrass ML 推理工作流程。

![\[机器学习工作流以及核心设备、 AWS IoT Greengrass 服务和云训练模型之间的信息流的组件。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/ml-inference/diagram-ml-overview.png)


AWS IoT Greengrass 机器学习推理简化了机器学习工作流程的每个步骤，包括：
+ 构建和部署机器学习框架原型。
+ 访问云训练的模型并将其部署到 Greengrass 核心设备。
+ 创建可以访问硬件加速器（例如 GPUs 和 FPGAs）作为[本地](access-local-resources.md)资源的推理应用程序。

## 机器学习资源
<a name="ml-resources"></a>

机器学习资源代表部署到核心的云训练推理模型。 AWS IoT Greengrass 要部署机器学习资源，首先请将资源添加到 Greengrass 组，然后定义组中的 Lambda 函数如何才能访问它们。在群组部署期间，从云端 AWS IoT Greengrass 检索源模型包并将其提取到 Lambda 运行时命名空间内的目录中。然后，Greengrass Lambda 函数会使用本地部署的模型来执行推理。

要更新本地部署的模型，首先请更新与机器学习资源对应的源模型 (在云中)，然后部署组。部署期间， AWS IoT Greengrass 会检查更改的来源。如果检测到更改，则 AWS IoT Greengrass 更新本地模型。

### 支持的模型源
<a name="supported-model-sources"></a>

AWS IoT Greengrass 支持 SageMaker AI 和 Amazon S3 模型源作为机器学习资源。

以下要求适用于模型源：
+ 存储您的 SageMaker AI 和 Amazon S3 模型源的 S3 存储桶不得使用 SSE-C 进行加密。 对于使用服务器端加密的存储桶， AWS IoT Greengrass 机器学习推理目前仅支持 SSE-S3 或 SSE-KMS 加密选项。有关服务器端加密选项的更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)。
+ 存储您的 A SageMaker I 和 Amazon S3 模型源的 S3 存储桶的名称不得包含句点 (`.`)。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[存储桶命名规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules)中有关通过 SSL 使用虚拟托管式存储桶的规则。
+ 必须同时为 [SageMaker AI [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)和 AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) 提供服务级别 AWS 区域 支持。目前， AWS IoT Greengrass 支持以下区域的 SageMaker AI 模型：
  + 美国东部（俄亥俄州）
  + 美国东部（弗吉尼亚州北部）
  + 美国西部（俄勒冈州）
  + 亚太地区（孟买）
  + 亚太地区（首尔）
  + 亚太地区（新加坡）
  + 亚太地区（悉尼）
  + 亚太地区（东京）
  + 欧洲地区（法兰克福）
  + 欧洲地区（爱尔兰）
  + 欧洲地区（伦敦）
+ AWS IoT Greengrass 必须拥有模型来源的`read`权限，如以下各节所述。

**SageMaker AI**  
AWS IoT Greengrass 支持保存为 SageMaker AI 训练作业的模型。 SageMaker AI 是一项完全托管的机器学习服务，您可以使用它来使用内置或自定义算法来构建和训练模型。有关更多信息，请参阅[什么是 SageMaker AI？](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 在 *SageMaker AI 开发者指南*中。  
如果您通过[创建名称包含的存储桶](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-config-permissions.html)来配置您的 SageMaker AI 环境`sagemaker`，则 AWS IoT Greengrass 拥有足够的权限来访问您的 SageMaker AI 训练作业。`AWSGreengrassResourceAccessRolePolicy` 托管策略允许访问名称包含字符串 `sagemaker` 的存储桶。此策略将附加到 [Greengrass 服务角色](service-role.md)。  
否则，您必须向存储训练作业的存储桶授予 AWS IoT Greengrass `read`权限。为此，请在服务角色中嵌入以下内联策略。您可以列出多个存储桶 ARNs。    
****  

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

**Amazon S3**  
AWS IoT Greengrass 支持以`tar.gz`或`.zip`文件形式存储在 Amazon S3 中的模型。  
 AWS IoT Greengrass 要允许访问存储在 Amazon S3 存储桶中的模型，您必须通过执行以下任**一**操作来授予访问存储桶的 AWS IoT Greengrass `read`权限：  
+ 将您的模型存储在名称包含 `greengrass` 的存储桶中。

  `AWSGreengrassResourceAccessRolePolicy` 托管策略允许访问名称包含字符串 `greengrass` 的存储桶。此策略将附加到 [Greengrass 服务角色](service-role.md)。

   
+ 在 Greengrass 服务角色中嵌入一个内联策略。

  如果您的存储桶名称不包含 `greengrass`，请将以下内联策略添加到服务角色。您可以列出多个存储桶 ARNs。

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

****  

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

------

  有关更多信息，请参阅 *IAM 用户指南*中的[嵌入内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console)。

## 要求
<a name="ml-requirements"></a>

以下要求适用于创建和使用机器学习资源：
+ 你必须使用 AWS IoT Greengrass 酷睿 v1.6 或更高版本。
+ 用户定义的 Lambda 函数可以对资源执行 `read` 或 `read and write` 操作。针对其他操作的权限不可用。附属 Lambda 函数的容器化模式决定如何设置访问权限。有关更多信息，请参阅 [从 Lambda 函数访问机器学习资源](access-ml-resources.md)。
+ 您必须提供核心设备的操作系统上的资源的完整路径。
+ 资源名称或 ID 的最大长度为 128 个字符，并且必须使用模式 `[a-zA-Z0-9:_-]+`。

## 用于 ML 推理的运行时和库
<a name="ml-libraries"></a>

您可以将以下 ML 运行时和库与配合 AWS IoT Greengrass使用。
+  [Amazon SageMaker Neo 深度学习运行时](#dlc-optimize-info) 
+ Apache MXNet
+ TensorFlow

这些运行时和库可以安装在 NVIDIA Jetson TX2、Intel Atom 和 Raspberry Pi 平台上。有关下载信息，请参阅[支持的机器学习运行时和库](what-is-gg.md#ml-runtimes-libs)。您可以将它们直接安装到核心设备上。

请务必阅读以下有关兼容性和限制的信息。

### SageMaker AI Neo 深度学习运行时
<a name="dlc-optimize-info"></a>

 您可以使用 SageMaker AI Neo 深度学习运行时在 AWS IoT Greengrass 设备上使用经过优化的机器学习模型执行推理。这些模型使用 SageMaker AI Neo 深度学习编译器进行了优化，以提高机器学习推理预测速度。有关 SageMaker AI 中模型优化的更多信息，请参阅 A [SageMaker I Neo 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)。

**注意**  
 目前，您只能在特定的 Amazon Web Services 区域使用 Neo 深度学习编译器来优化机器学习模型。但是，您可以将 Neo 深度学习运行时与每个支持内 AWS IoT Greengrass 核 AWS 区域 的优化模型一起使用。有关信息，请参阅[如何配置优化的机器学习推理](ml-dlc-console.md) 

### MXNet 版本控制
<a name="mxnet-version-compatibility"></a>

Apache 目前 MXNet 无法确保向前兼容性，因此使用更高版本的框架训练的模型可能无法在该框架的早期版本中正常运行。为避免模型训练阶段和模型服务阶段之间的冲突，并提供一致的 end-to-end体验，请在两个阶段使用相同的 MXNet 框架版本。

### MXNet 在树莓派上
<a name="mxnet-engine-rpi"></a>

访问 MXNet 本地模型的 Greengrass Lambda 函数必须设置以下环境变量：

```
MXNET_ENGINE_TYPE=NativeEngine
```

您可以在函数代码中设置该环境变量，或者将其添加到函数的组特定的配置。对于将该环境变量添加为配置设置的示例，请参阅此[步骤](ml-console.md#ml-console-config-lambda)。

**注意**  
要使用该 MXNet 框架，例如运行第三方代码示例，必须在 Raspberry Pi 上配置环境变量。

### TensorFlow Raspberry Pi 的模型服务限制
<a name="tensorflow-limitations"></a>

以下改善推理结果的建议基于我们在 Raspberry Pi 平台上 TensorFlow 对 32 位 Arm 库的测试。这些建议仅供高级用户参考，不包含任何类型的保证。
+ 使用[检查点](https://www.tensorflow.org/guide/checkpoint)格式训练的模型在服务之前应被“冻结”为协议缓冲格式。有关示例，请参阅 [TensorFlow-Slim 图像分类模型库](https://github.com/tensorflow/models/tree/master/research/slim)。
+ 请勿在训练或推理代码中使用 TF-Estimator 和 TF-Slim 库。而应使用以下示例中所示的 `.pb` 文件模型加载模式。

  ```
  graph = tf.Graph() 
  graph_def = tf.GraphDef()
  graph_def.ParseFromString(pb_file.read()) 
  with graph.as_default():
    tf.import_graph_def(graph_def)
  ```

**注意**  
有关支持的平台的更多信息 TensorFlow，请参阅 TensorFlow 文档 TensorFlow中的[安装](https://www.tensorflow.org/install/#installing_from_sources)。