自訂您的機器學習元件 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自訂您的機器學習元件

在中AWS IoT Greengrass,您可以設定範例機器學習元件,以自訂在裝置上執行機器學習推論的方式,並將推論、模型和執行階段元件做為建置區塊。 AWS IoT Greengrass此外,您還可以靈活地使用範例元件做為範本,並視需要建立自己的自訂元件。您可以混搭這種模組化方法,以下列方式自訂機器學習推論元件:

使用範例推論元件
  • 在部署推論元件時修改它們的組態。

  • 將範例模型存放區元件取代為自訂模型元件,以使用範例推論元件的自訂模型。您的自訂模型必須使用與範例模型相同的執行階段進行訓練。

使用自訂推論元件
  • 透過新增公用模型元件和執行階段元件做為自訂推論元件的相依性,將自訂推論程式碼與範例模型和執行階段搭配使用。

  • 建立並新增自訂模型元件或執行階段元件,做為自訂推論元件的相依性。如果您想要使用自訂推論程式碼或AWS IoT Greengrass未提供範例元件的執行階段,則必須使用自訂組件。

修改公用推論元件的組態

AWS 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" } }

部署公用推論元件時,您可以修改預設組態以自訂部署。如需有關每個公用推論元件可用組態參數的資訊,請參閱中AWS-提供機器學習元件的元件主題。

本節說明如何從AWS IoT Greengrass主控台部署已修改的元件。如需有關使用部署元件的資訊AWS CLI,請參閱建立部署

若要部署修改過的公用推論元件 (主控台)
  1. 登入 AWS IoT Greengrass 主控台

  2. 在導覽功能表中,選擇 [元件]。

  3. 在 [件] 頁面的 [公用元件] 索引標籤上,選擇您要建置的元件。

  4. 在 [元件] 頁面上,選擇 [部署]。

  5. 新增至部署中,選擇下列其中一項:

    1. 若要將此元件合併至目標裝置上的現有部署,請選擇 [新增至現有部署],然後選取要修訂的部署。

    2. 若要在目標裝置上建立新部署,請選擇 [建立新部署]。如果您的設備上有現有的部署,則選擇此步驟將取代現有部署。

  6. 指定目標頁面上,執行下列作業:

    1. 部署資訊下,輸入或修改部署的易記名稱。

    2. 部署目標下,選取部署的目標,然後選擇下一步。如果您要修訂既有部署,則無法變更部署目標。

  7. 在 [選取元件] 頁面的 [公用元件] 下,確認已選取含有您修改之組態的推論元件,然後選擇下一步

  8. [設定元件] 頁面上,執行下列動作:

    1. 選取推論元件,然後選擇設定元件

    2. 在「組態更新」下,輸入您要更新的組態值。例如,在 [合併的組態] 方塊中輸入下列組態更新,將推論間隔變更為 15 秒,並指示元件尋找資料夾custom.jpg中指定的/custom-ml-inference/images/影像。

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

      若要將零組件的整個組態重設為預設值,請在「重設路徑」(Reset paths) 方塊""中指定單一空白字串。

    3. 選擇確認,然後選擇下一步

  9. 在 [設定進階設定] 頁面上,保留預設組態設定,然後選擇 [下一步]。

  10. 在「複查」頁面上,選擇「建置

搭配範例推論元件使用自訂模型

如果您想要在AWS IoT Greengrass提供範例執行階段元件的執行階段中,將範例推論元件與您自己的機器學習模型搭配使用,則必須使用使用這些模型作為人工因素的元件來覆寫公用模型元件。在高階中,您可以完成下列步驟,以便搭配範例推論元件使用自訂模型:

  1. 建立使用 S3 儲存貯體中的自訂模型作為成品的模型元件。您的自訂模型必須使用與您要取代的模型相同的執行階段進行訓練。

  2. 修改推論元件中的ModelResourceKey組態參數以使用自訂模型。如需更新推論元件組態的相關資訊,請參閱 修改公用推論元件的組態

當您部署推論元件時,會AWS IoT Greengrass尋找其元件相依性的最新版本。如果元件的較新自訂版本存在於相同的AWS 帳戶和中,則會覆寫相依公用模型元件AWS 區域。

  1. 將您的模型上傳到 S3 儲存貯體。如需將模型上傳到 S3 儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的使用 Amazon S3 儲存體。

    注意

    您必須將成品存放在AWS 帳戶與元件相同的 S3 儲AWS 區域存貯體中。若AWS IoT Greengrass要啟用存取這些成品,Greengrass 裝置角色必須允許動作。s3:GetObject如需有關裝置角色的詳細資訊,請參閱授權核心裝置與 AWS 服務互動

  2. AWS 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 簡單儲存服務使用者指南中的使用 Amazon S3 儲存體。

    注意

    您必須將成品存放在AWS 帳戶與元件相同的 S3 儲AWS 區域存貯體中。若AWS IoT Greengrass要啟用存取這些成品,Greengrass 裝置角色必須允許動作。s3:GetObject如需有關裝置角色的詳細資訊,請參閱授權核心裝置與 AWS 服務互動

  2. 執行下列命令以擷取 public 元件的元件方案。此指令會將元件 recipe 寫入您在指令中提供的輸出檔案。視需要將擷取的 base64 編碼字串轉換為 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>
  3. 將 recipe 檔案的名稱更新為<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
    注意

    此步驟會在中的AWS IoT Greengrass服務中建立元件AWS 雲端。在將元件上傳到雲端之前,您可以使用 Greengrass CLI 在本機開發、測試和部署元件。如需詳細資訊,請參閱 開發AWS IoT Greengrass元件

如需建立元件的更多資訊,請參閱開發AWS IoT Greengrass元件

建立自訂機器學習元件

如果您想要使用自訂推論程式碼或AWS IoT Greengrass未提供範例元件的執行階段,則必須建立自訂組件。您可以將自訂推論程式碼與AWS提供的範例機器學習模型和執行階段搭配使用,也可以使用自己的模型和執行階段來開發完全自訂的機器學習推論解決方案。如果您的模型使用AWS IoT Greengrass提供範例執行階段元件的執行階段,則您可以使用該執行階段元件,而且您只需要為您的推論程式碼和您想要使用的模型建立自訂組件。

檢索公共組件的配方

您可以使用現有公用機器學習元件的方案做為範本來建立自訂元件。若要檢視最新版公用元件的元件方案,請使用主控台或AWS CLI如下所示:

  • 使用主控台

    1. 在 [件] 頁面的 [公用元件] 索引標籤上,尋找並選擇公用元件。

    2. 在元件頁面上,選擇 [檢視方案]。

  • 使用 AWS 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>。 您要用來建立 recipe 檔案的格式。支援的值為 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 簡單儲存服務使用者指南中的使用 Amazon S3 儲存體。

注意

您必須將成品存放在AWS 帳戶與元件相同的 S3 儲AWS 區域存貯體中。若AWS IoT Greengrass要啟用存取這些成品,Greengrass 裝置角色必須允許動作。s3:GetObject如需有關裝置角色的詳細資訊,請參閱授權核心裝置與 AWS 服務互動

建立自訂元件

您可以使用擷取的成品和配方來建立自訂機器學習元件。如需範例,請參閱 建立自訂推論元件

如需建立和部署元件至 Greengrass 裝置的詳細資訊,請參閱和。開發AWS IoT Greengrass元件 將AWS IoT Greengrass元件部署到裝置

建立自訂推論元件

本節說明如何使用 DLR 影像分類元件做為範本來建立自訂推論元件。

將您的推論程式碼上傳到 Amazon S3 儲存貯體

建立您的推論程式碼,然後將其上傳到 S3 儲存貯體。如需將內容上傳到 S3 儲存貯體的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的使用 Amazon S3 儲存體。

注意

您必須將成品存放在AWS 帳戶與元件相同的 S3 儲AWS 區域存貯體中。若AWS IoT Greengrass要啟用存取這些成品,Greengrass 裝置角色必須允許動作。s3:GetObject如需有關裝置角色的詳細資訊,請參閱授權核心裝置與 AWS 服務互動

為您的推論元件建立配方

  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 組件的依賴關係。您也可以使用自訂執行階段元件的相依性來取代它,如下列範例所示。

      運行時組件

      JSON
      { "<runtime-component>": { "VersionRequirement": "<version>", "DependencyType": "HARD" } }
      YAML
      <runtime-component>: VersionRequirement: "<version>" DependencyType: HARD
    • 保留 DLR 映像分類模型存放區相依性,以使用預先訓練的 ResNet -50 模型,AWS提供或修改它以使用自訂模型元件。當您包含公用模型元件的相依性時,如果該元件的較新自訂版本存在於相同元件中 AWS 帳戶AWS 區域,則推論元件會使用該自訂元件。指定模型元件從屬關係,如下列範例所示。

      公共模型組件

      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 影像分類元Manifests件中 Linux 平台之物件的組態。

    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

如需建立元件配方的詳細資訊,請參閱AWS IoT Greengrass 元件配方參考

建立推論元件

使用AWS IoT Greengrass主控台或AWS CLI使用您剛定義的方案建立元件。建立元件之後,您可以將其部署在裝置上執行推論。如需如何部署推論元件的範例,請參閱教學課程:使 TensorFlow 用 Lite 執行範例影像分類推論

  1. 登入 AWS IoT Greengrass 主控台

  2. 在導覽功能表中,選擇 [元件]。

  3. 在 [件] 頁面的 [我的元件] 索引標籤上,選擇 [建立元件]。

  4. 在 [建立元件] 頁面的 [元件資訊] 下,選取 [以 JSON 格式輸入方案] 或 [將方案輸入為 YAML] 做為元件來源。

  5. 在「方」方塊中,輸入您建立的自訂配方。

  6. 按一下建立元件

執行下列命令,以使用您建立的方案建立新的自訂元件。

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

此步驟會在中的AWS IoT Greengrass服務中建立元件AWS 雲端。在將元件上傳到雲端之前,您可以使用 Greengrass CLI 在本機開發、測試和部署元件。如需更多詳細資訊,請參閱 開發AWS IoT Greengrass元件