AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

执行机器学习推理

此功能适用于 AWS IoT Greengrass 核心 v1.6 or later。

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

要开始执行本地推理,请参阅如何使用 AWS 管理控制台配置机器学习推理

AWS IoT Greengrass ML 推理的工作原理

您可以在任何位置训练您的推理模型,在 Greengrass 组中将它们本地部署为机器学习资源,然后从 Greengrass Lambda 函数访问它们。例如,您可以在 Amazon SageMaker 中构建并训练深度学习模型,然后将其部署到 Greengrass 核心。然后,您的 Lambda 函数可以在连接的设备上使用本地模型来执行推理并将新训练数据发送回云中。

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


        机器学习工作流以及核心设备、AWS IoT Greengrass 服务和云训练模型之间的信息流的组件。

AWS IoT Greengrass ML 推理简化了 ML 工作流的每个步骤,包括:

  • 构建和部署机器学习框架原型。

  • 访问云训练的模型并将其部署到 Greengrass 核心设备。

  • 创建可以将硬件加速器 (如 GPU 和 FPGA) 作为本地资源访问的推理应用程序。

机器学习资源

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

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

支持的模型源

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

以下要求适用于模型源:

  • 存储您的 Amazon SageMaker 和 Amazon S3 模型源的 S3 存储桶不得使用 SSE-C 加密。对于使用服务器端加密的存储桶,AWS IoT Greengrass ML 推理目前仅支持 SSE-S3 或 SSE-KMS 加密选项。有关服务器端加密选项的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的使用服务器端加密保护数据

  • 存储您的 Amazon SageMaker 和 Amazon S3 模型源的 S3 存储桶的名称不得包含句点 (.)。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的存储桶命名规则中有关通过 SSL 使用虚拟托管式存储桶的规则。

  • 服务级别 AWS 区域支持必须同时可用于 AWS IoT GreengrassAmazon SageMaker。请参阅下表。

    AWS 区域 Amazon SageMaker 模型 Amazon S3 模型
    美国东部(俄亥俄州)
    
        Available
    
        Available
    美国东部(弗吉尼亚北部)
    
        Available
    
        Available
    美国西部(俄勒冈)
    
        Available
    
        Available
    亚太地区(孟买)
    
        Available
    
        Available
    亚太区域(首尔)
    
        Available
    
        Available
    亚太区域(新加坡)
    
        Available
    
        Available
    亚太区域(悉尼)
    
        Available
    
        Available
    亚太区域(东京)
    
        Available
    
        Available
    欧洲(法兰克福)
    
        Available
    
        Available
    欧洲(爱尔兰)
    
        Available
    
        Available
    欧洲 (伦敦)
    
        Available
    
        Available
  • AWS IoT Greengrass 必须具有对模型源的 read 权限,如以下部分中所述。

Amazon SageMaker

AWS IoT Greengrass 支持另存为 Amazon SageMaker 训练作业的模型。

如果您通过创建存储桶(存储桶名称包含 sagemaker)来配置 Amazon SageMaker 环境,则 AWS IoT Greengrass 具有访问 Amazon SageMaker 训练作业的足够权限。AWSGreengrassResourceAccessRolePolicy 托管策略允许访问名称包含字符串 sagemaker 的存储桶。此策略将附加到 Greengrass 服务角色。

否则,您必须为 AWS IoT Greengrass 授予对存储您的训练作业的存储桶的 read 权限。为此,请在 Greengrass 服务角色中嵌入以下内联策略。您可以列出多个存储桶 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws-cn:s3:::my-bucket-name" ] } ] }

Amazon SageMaker 是一项完全托管的 ML 服务,可用于使用内置或自定义算法构建和训练模型。有关更多信息,请参阅 Amazon SageMaker 开发人员指南中的什么是 Amazon SageMaker?

Amazon S3

AWS IoT Greengrass 支持以 tar.gz.zip 文件形式存储在 Amazon S3 中的模型。

要支持 AWS IoT Greengrass 访问在 Amazon S3 存储桶中存储的模型,您必须通过执行以下操作之一为 AWS IoT Greengrass 授予访问存储桶的 read 权限:

  • 将您的模型存储在名称包含 greengrass 的存储桶中。

    AWSGreengrassResourceAccessRolePolicy 托管策略允许访问名称包含字符串 greengrass 的存储桶。此策略将附加到 Greengrass 服务角色。

     

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

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws-cn:s3:::my-bucket-name" ] } ] }

    有关更多信息,请参阅IAM 用户指南中的嵌入内联策略

要求

以下要求适用于创建和使用机器学习资源:

  • 您必须使用 AWS IoT Greengrass 核心 v1.6 or later。

  • Lambda 函数可以对资源执行 readread and write 操作。针对其他操作的权限不可用。

  • 配置为访问 ML 模型资源的 Lambda 函数无法在非容器化模式下运行。

  • 您必须提供核心设备的操作系统上的资源的完整路径。

  • 资源名称或 ID 的最大长度为 128 个字符,并且必须使用模式 [a-zA-Z0-9:_-]+

ML 推理的运行时和预编译框架库

为了帮助您快速开始试用 ML 推理,AWS IoT Greengrass 提供了运行时和预编译框架库。

这些运行时和预编译库可以安装在 NVIDIA Jetson TX2、Intel Atom 和 Raspberry Pi 平台上。运行时和库可从 AWS IoT Greengrass 机器学习运行时和预编译库 下载 页面获得。您可以将它们直接安装在核心上,也可以将它们作为软件的一部分包括在 Greengrass 组中。

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

Amazon SageMaker Neo 深度学习运行时

您可以使用 Amazon SageMaker Neo 深度学习运行时在 AWS IoT Greengrass 设备上执行具有优化机器学习模型的推理。使用 Amazon SageMaker Neo 深度学习编译器对这些模型进行优化,以提高机器学习推理预测的速度。有关 Amazon SageMaker 中的模型优化的更多信息,请参阅 Amazon SageMaker Neo 文档

注意

目前,您只能在美国西部(俄勒冈)、美国东部(弗吉尼亚)和欧洲(爱尔兰)AWS 区域中使用 Neo 深度学习编译器来优化机器学习模型。但是,您可以在所有支持 AWS IoT Greengrass Core的 AWS 区域中对优化的模型使用 Neo 深度学习运行时。有关信息,请参阅如何配置优化的机器学习推理

MXNet 版本控制

Apache MXNet 目前不确保向前兼容性,因此您使用框架的较高版本训练的模型可能无法在框架的较低版本中正常工作。为了避免模型训练和模型服务阶段之间的冲突,以及为了提供一致的端到端体验,请在这两个阶段使用相同的 MXNet 框架版本。

Raspberry Pi 上的 MXNet

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

MXNET_ENGINE_TYPE=NaiveEngine

您可以在函数代码中设置该环境变量,或者将其添加到函数的组特定的配置。对于将该环境变量添加为配置设置的示例,请参阅此步骤

注意

对于 MXNet 框架的一般用途,如运行第三方代码示例,必须在 Raspberry Pi 上配置该环境变量。

对 Raspberry Pi 的 TensorFlow 模型服务限制

当前,AWS IoT Greengrass TensorFlow 安装程序仅支持在 32 位平板电脑或台式机操作系统上进行安装。要在 64 位平台上构建 TensorFlow,请参阅 TensorFlow 文档中的安装 TensorFlow

以下改进推理结果的建议基于我们在 Raspberry Pi 平台上使用 32 位 Arm 预编译库进行的测试。这些建议仅供高级用户参考,不包含任何类型的保证。

  • 使用检查点格式训练的模型在服务之前应被“冻结”为协议缓冲格式。有关示例,请参阅 TensorFlow-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