自定义您的机器学习组件 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

自定义您的机器学习组件

在中Amazon IoT Greengrass,您可以配置示例机器学习组件,以自定义在设备上执行机器学习推理的方式,并将推理、模型和运行时组件作为构建模块。 Amazon IoT Greengrass还使您可以灵活地使用示例组件作为模板并根据需要创建自己的自定义组件。您可以混合搭配这种模块化方法,通过以下方式自定义机器学习推理组件:

使用示例推理组件
  • 部署推理组件时修改其配置。

  • 将样本模型存储组件替换为自定义模型组件,使用带有样本推理组件的自定义模型。您的自定义模型必须使用与样本模型相同的运行时进行训练。

使用自定义推理组件
  • 通过添加公共模型组件和运行时组件作为自定义推理组件的依赖关系,将自定义推理代码与示例模型和运行时一起使用。

  • 创建和添加自定义模型组件或运行时组件作为自定义推理组件的依赖关系。如果您想使用自定义推理代码或Amazon IoT Greengrass不提供示例组件的运行时,则必须使用自定义组件。

修改公共推理组件的配置

Amazon IoT Greengrass控制台中,组件页面显示该组件的默认配置。例如, TensorFlow Lite 图像分类组件的默认配置如下所示:

{ "accessControl": { "aws.greengrass.ipc.mqttproxy": { "aws.greengrass.TensorFlowLiteImageClassification:mqttproxy:1": { "policyDescription": "Allows access to publish via topic ml/tflite/image-classification.", "operations": [ "aws.greengrass#PublishToIoTCore" ], "resources": [ "ml/tflite/image-classification" ] } } }, "PublishResultsOnTopic": "ml/tflite/image-classification", "ImageName": "cat.jpeg", "InferenceInterval": 3600, "ModelResourceKey": { "model": "TensorFlowLite-Mobilenet" } }

部署公共推理组件时,可以修改默认配置以自定义部署。有关每个公共推理组件的可用配置参数的信息,请参阅中的组件主题Amazon-提供的机器学习组件

,Amazon IoT Greengrass。有关使用部署组件的信息Amazon CLI,请参见创建部署

部署修改后的公共推理组件(控制台)

  1. 登录到 Amazon IoT Greengrass 控制台

  2. ,Configurment)。

  3. 在 “组件” 页面的 “公共组件” 选项卡上,选择要部署的组件。

  4. 在组件页面上,选择 Deploy

  5. De ploymen t toployment,:

    1. 要将此组件合并到目标设备上的现有部署中,请选择 “添加到现有部署”,然后选择要修改的部署。

    2. 要在目标设备上创建新部署,请选择创建新部署。如果您的设备上已有部署,则选择此步骤将替换现有部署。

  6. S3,:

    1. 在 “部署信息” 下,输入或修改部署的友好名称。

    2. 在 “部署目标” 下,选择部署目标,然后选择 “下一步”。如果您正在修改现有部署,则无法更改部署目标。

  7. “选择组件” 页面的 “公共组件” 下,验证是否选择了具有修改配置的推理组件,然后选择 “下一步”。

  8. Config ure Co mplation(),:

    1. 选择推理组件,然后选择配置组件

    2. 在 “配置更新” 下,输入要更新的配置值。例如,在 “要合并的配置” 框中输入以下配置更新,将推理间隔更改为 15 秒,并指示组件在/custom-ml-inference/images/文件夹custom.jpg中查找名为的图像。

      { "InferenceInterval": "15", "ImageName": "custom.jpg", "ImageDirectory": "/custom-ml-inference/images/" }

      要将组件的整个配置重置为其默认值,请在 “重置路径” 框""中指定一个空字符串。

    3. 选择 “确认”,然后选择 “下一步”。

  9. 在 “配置高级设置” 页面上,保留默认配置设置,然后选择 “下一步”。

  10. 在 “查看” 页面上,选择 “部署

使用带有示例推理组件的自定义模型

如果您想在Amazon IoT Greengrass提供示例运行时组件的运行时将示例推理组件与自己的机器学习模型一起使用,则必须使用使用这些模型作为工件的组件覆盖公共模型组件。简而言之,您需要完成以下步骤以使用带有示例推理组件的自定义模型:

  1. 创建一个使用 S3 存储桶中的自定义模型作为构件的模型组件。您的自定义模型必须使用与要替换的模型相同的运行时进行训练。

  2. 修改推理组件中的ModelResourceKey配置参数以使用自定义模型。有关更新推理组件配置的信息,请参见修改公共推理组件的配置

部署推理组件时,会Amazon IoT Greengrass查找其组件依赖关系的最新版本。如果依赖公共模型组件的更高自定义版本存在于同一个Amazon Web Services 账户和中,则它会覆盖该组件Amazon Web Services 区域。

  1. S3。S3,Amazon Simple Storage Servic Amazon S3 imple Storage Service

    注意

    您必须将构件存储在Amazon Web Services 账户与Amazon Web Services 区域组件相同的 S3 存储桶中。Amazon IoT Greengrass要允许访问这些工件,Greengrass 设备角色必须允许该s3:GetObject操作。,授权核心设备与Amazon服务

  2. Amazon IoT Greengrass控制台导航菜单中,选择组件

  3. 检索公共模型存储组件的组件配方。

    1. 组件页面的公共组件选项卡上,查找并选择要为其创建新版本的公共模型组件。例如,variant.DLR.ImageClassification.ModelStore

    2. 在组件页面上,选择查看配方并复制显示的 JSON 配方。

  4. 在 “组件” 页面上的 “我的组件” 选项卡上,选择 “创建组件”。

  5. 在 “创建组件” 页面的 “组件信息” 下,选择 “将配方作为 JSON 输入” 作为组件源。

  6. 在 “配方” 框中,粘贴您之前复制的组件配方。

  7. ,:

    • ComponentVersion:增加组件的次要版本。

      创建自定义组件以覆盖公共模型组件时,必须仅更新现有组件版本的次要版本。例如,如果公共组件版本为2.1.0,则可以使用版本创建自定义组件2.1.1

    • Manifests.Artifacts.Uri:将每个 URI 值更新为要使用的模型的 Amazon S3 URI。

    注意

  8. 选择创建组件

  1. S3。S3,Amazon Simple Storage Servic Amazon S3 imple Storage Service

    注意

    您必须将构件存储在Amazon Web Services 账户与Amazon Web Services 区域组件相同的 S3 存储桶中。Amazon IoT Greengrass要允许访问这些工件,Greengrass 设备角色必须允许该s3:GetObject操作。,授权核心设备与Amazon服务

  2. 运行以下命令检索公共组件的组件配方。此命令将组件配方写入您在命令中提供的输出文件中。Base64。

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn <arn> \ --recipe-output-format <recipe-format> \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn <arn> ^ --recipe-output-format <recipe-format> ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn <arn> ` --recipe-output-format <recipe-format> ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
  3. 将配方文件的名称更新为<component-name>-<component-version>,其中组件版本是新组件的目标版本。例如,variant.DLR.ImageClassification.ModelStore-2.1.1.yaml

  4. ,:

    • ComponentVersion:增加组件的次要版本。

      创建自定义组件以覆盖公共模型组件时,必须仅更新现有组件版本的次要版本。例如,如果公共组件版本为2.1.0,则可以使用版本创建自定义组件2.1.1

    • Manifests.Artifacts.Uri:将每个 URI 值更新为要使用的模型的 Amazon S3 URI。

    注意

  5. ,。

    aws greengrassv2 create-component-version \ --inline-recipe fileb://path/to/component/recipe
    注意

    此步骤将在中的Amazon IoT Greengrass服务中创建组件Amazon Web Services 云。在将组件上传到云之前,您可以使用 Greengrass CLI 在本地开发、测试和部署组件。有关更多信息,请参阅 开发Amazon IoT Greengrass组件

开发Amazon IoT Greengrass组件

创建自定义机器学习组件

如果要使用自定义推理代码或Amazon IoT Greengrass不提供示例组件的运行时,则必须创建自定义组件。您可以将自定义推理代码与Amazon提供的示例机器学习模型和运行时一起使用,也可以使用自己的模型和运行时开发完全自定义的机器学习推理解决方案。如果您的模型使用的运行时Amazon IoT Greengrass提供了示例运行时组件,则可以使用该运行时组件,并且只需要为推理代码和要使用的模型创建自定义组件。

检索公共组件的配方

您可以使用现有公共机器学习组件的配方作为模板来创建自定义组件。要查看公共组件最新版本的组件配方,请使用控制台或Amazon CLI按以下方式使用:

  • 使用控制台

    1. 在 “组件” 页面的 “公共组件” 选项卡上,查找并选择公共组件。

    2. 在组件页面上,选择查看食谱

  • 使用 Amazon CLI

    运行以下命令检索公共变体组件的组件配方。此命令将组件配方写入您在命令中提供的 JSON 或 YAML 配方文件中。

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn <arn> \ --recipe-output-format <recipe-format> \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn <arn> ^ --recipe-output-format <recipe-format> ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn <arn> ` --recipe-output-format <recipe-format> ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>

    按如下方式替换命令中的值:

    • <arn>。 Amazon(ARN)。

    • <recipe-format>。 S3。支持的值为 JSONYAML

    • <recipe-file>。 格式为食谱的名称<component-name>-<component-version>

检索示例组件构件

您可以使用公共机器学习组件使用的工件作为模板来创建自定义组件工件,例如推理代码或运行时安装脚本。

要查看公共机器学习组件中包含的示例工件,请部署公共推理组件,然后在设备上的/greengrass/v2/packages/artifacts-unarchived/component-name/component-version/文件夹中查看这些工件。

S3

在创建自定义组件之前,必须将组件构件上传到 S3 存储桶并在组件配方中使用 S3 URI。例如,要在推理组件中使用自定义推理代码,请将代码上传到 S3 存储桶。然后,您可以使用推理代码的 Amazon S3 URI 作为组件中的工件。

S3,Amazon S3 Simple Stor age Service

注意

您必须将构件存储在Amazon Web Services 账户与Amazon Web Services 区域组件相同的 S3 存储桶中。Amazon IoT Greengrass要允许访问这些工件,Greengrass 设备角色必须允许该s3:GetObject操作。,授权核心设备与Amazon服务

创建自定义组件

您可以使用检索到的工件和配方来创建自定义的机器学习组件。有关示例,请参阅 创建自定义推理组件

有关创建组件并将其部署到 Greengrass 设备的详细信息,请参阅开发Amazon IoT Greengrass组件部署Amazon IoT Greengrass组件到设备

创建自定义推理组件

本节介绍如何使用 DLR 图像分类组件作为模板创建自定义推理组件。

Amazon S3

创建您的推理代码,然后将其上传到 S3 存储桶。S3,Amazon S3 Simple Stor age Service

注意

您必须将构件存储在Amazon Web Services 账户与Amazon Web Services 区域组件相同的 S3 存储桶中。Amazon IoT Greengrass要允许访问这些工件,Greengrass 设备角色必须允许该s3:GetObject操作。,授权核心设备与Amazon服务

为推理组件创建配方

  1. 运行以下命令检索 DLR 图像分类组件的组件配方。此命令将组件配方写入您在命令中提供的 JSON 或 YAML 配方文件中。

    Linux, macOS, or Unix
    aws greengrassv2 get-component \ --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version \ --recipe-output-format JSON | YAML \ --query recipe \ --output text | base64 --decode > <recipe-file>
    Windows Command Prompt (CMD)
    aws greengrassv2 get-component ^ --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ^ --recipe-output-format JSON | YAML ^ --query recipe ^ --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>
    PowerShell
    aws greengrassv2 get-component ` --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ` --recipe-output-format JSON | YAML ` --query recipe ` --output text > <recipe-file>.base64 certutil -decode <recipe-file>.base64 <recipe-file>

    <recipe-file>替换为格式中的食谱名称<component-name>-<component-version>

  2. 在配方中的ComponentDependencies对象中,根据要使用的模型和运行时组件,执行以下一项或多项操作:

    • 如果您想使用 DLR 编译的模型,请保留 DLR 组件依赖关系。Runtime Runtime Rontime Rontime Complating,。

      运行时组件

      JSON
      { "<runtime-component>": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      <runtime-component>: VersionRequirement: "<version>" DependencyType: HARD
    • 保留 DLR 图像分类模型存储依赖关系,以使用Amazon提供的预先训练的 ResNet -50 模型,或对其进行修改以使用自定义模型组件。当您为公共模型组件添加依赖关系时,如果该组件的更高自定义版本存在于同一Amazon Web Services 账户和中Amazon Web Services 区域,则推理组件将使用该自定义组件。,。

      公共模型组件

      JSON
      { "variant.DLR.ImageClassification.ModelStore": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      variant.DLR.ImageClassification.ModelStore: VersionRequirement: "<version>" DependencyType: HARD

      自定义模型组件

      JSON
      { "<custom-model-component>": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      <custom-model-component>: VersionRequirement: "<version>" DependencyType: HARD
  3. ComponentConfiguration对象中,添加此组件的默认配置。稍后可以在部署组件时修改此配置。以下摘录显示了 DLR 图像分类组件的组件配置。

    例如,如果您使用自定义模型组件作为自定义推理组件的依赖关系,则进行修改ModelResourceKey以提供您正在使用的模型的名称。

    JSON
    { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "aws.greengrass.ImageClassification:mqttproxy:1": { "policyDescription": "Allows access to publish via topic ml/dlr/image-classification.", "operations": [ "aws.greengrass#PublishToIoTCore" ], "resources": [ "ml/dlr/image-classification" ] } } }, "PublishResultsOnTopic": "ml/dlr/image-classification", "ImageName": "cat.jpeg", "InferenceInterval": 3600, "ModelResourceKey": { "armv7l": "DLR-resnet50-armv7l-cpu-ImageClassification", "x86_64": "DLR-resnet50-x86_64-cpu-ImageClassification", "aarch64": "DLR-resnet50-aarch64-cpu-ImageClassification" } }
    YAML
    accessControl: aws.greengrass.ipc.mqttproxy: 'aws.greengrass.ImageClassification:mqttproxy:1': policyDescription: 'Allows access to publish via topic ml/dlr/image-classification.' operations: - 'aws.greengrass#PublishToIoTCore' resources: - ml/dlr/image-classification PublishResultsOnTopic: ml/dlr/image-classification ImageName: cat.jpeg InferenceInterval: 3600 ModelResourceKey: armv7l: "DLR-resnet50-armv7l-cpu-ImageClassification" x86_64: "DLR-resnet50-x86_64-cpu-ImageClassification" aarch64: "DLR-resnet50-aarch64-cpu-ImageClassification"
  4. Manifests对象中,提供有关组件部署到不同平台时使用的构件和配置的信息,以及成功运行该组件所需的任何其他信息。以下摘录显示了 DLR 图像分类组件中适用于 Linux 平台的Manifests对象的配置。

    JSON
    { "Manifests": [ { "Platform": { "os": "linux", "architecture": "arm" }, "Name": "32-bit armv7l - Linux (raspberry pi)", "Artifacts": [ { "URI": "s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "Setenv": { "DLR_IC_MODEL_DIR": "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}", "DEFAULT_DLR_IC_IMAGE_DIR": "{artifacts:decompressedPath}/image_classification/sample_images/" }, "Run": { "RequiresPrivilege": true, "script": ". {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate\npython3 {artifacts:decompressedPath}/image_classification/inference.py" } } } ] }
    YAML
    Manifests: - Platform: os: linux architecture: arm Name: 32-bit armv7l - Linux (raspberry pi) Artifacts: - URI: s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip Unarchive: ZIP Lifecycle: Setenv: DLR_IC_MODEL_DIR: "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}" DEFAULT_DLR_IC_IMAGE_DIR: "{artifacts:decompressedPath}/image_classification/sample_images/" Run: RequiresPrivilege: true script: |- . {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate python3 {artifacts:decompressedPath}/image_classification/inference.py

有关创建组件配方的详细信息,请参阅Amazon IoT Greengrass组件配方参考

创建推理组件

使用Amazon IoT Greengrass控制台或Amazon CLI使用您刚才定义的配方创建组件。创建组件后,可以将其部署以在设备上执行推理。,:使用 TensorFlow Lite 进行样本图像分类推断

  1. 登录到 Amazon IoT Greengrass 控制台

  2. ,Configurment)。

  3. 在 “组件” 页面上的 “我的组件” 选项卡上,选择 “创建组件”。

  4. 在 “创建组件” 页面的 “组件信息” 下,选择 “将配方输入为 JSON” 或 “以 YAML 形式输入配方” 作为组件源。

  5. 食谱框中,输入您创建的自定义配方。

  6. 单击 “创建组件”。

S3,。

aws greengrassv2 create-component-version \ --inline-recipe fileb://path/to/recipe/file
注意

此步骤将在中的Amazon IoT Greengrass服务中创建组件Amazon Web Services 云。在将组件上传到云之前,您可以使用 Greengrass CLI 在本地开发、测试和部署组件。有关更多信息,请参阅开发Amazon IoT Greengrass组件