

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

# 執行機器學習推論
<a name="perform-machine-learning-inference"></a>

使用 AWS IoT Greengrass，您可以使用雲端訓練模型，在本機產生的資料上執行邊緣裝置上的機器學習 (ML) 推論。您可以從低延遲時間和節省執行本機推論成本中獲益，但仍同時充分利用雲端運算能力進行訓練模型和處理複雜地處理。

AWS IoT Greengrass 可讓執行推論所需的步驟更有效率。您可以在任何地方訓練推論模型，並將其部署為*機器學習元件*本機。例如，您可以在 [Amazon SageMaker AI ](https://console.aws.amazon.com/sagemaker)中建置和訓練深度學習模型。然後，您可以將這些模型存放在 [Amazon S3](https://console.aws.amazon.com/s3) 儲存貯體中，以便將這些模型用作元件中的成品，在核心裝置上執行推論。

**Topics**
+ [

## AWS IoT Greengrass ML 推論的運作方式
](#how-ml-inference-works)
+ [

## 第 2 AWS IoT Greengrass 版有何不同？
](#ml-differences)
+ [

## 要求
](#ml-requirements)
+ [

## 支援的模型來源
](#ml-model-sources)
+ [

## 支援的機器學習執行時間
](#ml-runtime-libraries)
+ [

## AWS提供的機器學習元件
](#ml-components)
+ [

# 在 Greengrass 核心裝置上使用 Amazon SageMaker AI Edge Manager
](use-sagemaker-edge-manager.md)
+ [

# 自訂您的機器學習元件
](ml-customization.md)
+ [

# 故障診斷機器學習推論
](ml-troubleshooting.md)

## AWS IoT Greengrass ML 推論的運作方式
<a name="how-ml-inference-works"></a>

AWS 提供[機器學習元件](#ml-components)，可讓您用來建立單一步驟部署，以在裝置上執行機器學習推論。您也可以使用這些元件做為範本來建立自訂元件，以符合您的特定需求。<a name="ml-component-types"></a>

AWS 提供以下類別的機器學習元件：
+ **模型元件** - 包含機器學習模型做為 Greengrass 成品。
+ **執行期元件** - 包含在 Greengrass 核心裝置上安裝機器學習架構及其相依性的指令碼。
+ **推論元件** - 包含推論程式碼，並包含元件相依性，以安裝機器學習架構並下載預先訓練的機器學習模型。

您為執行機器學習推論而建立的每個部署都包含至少一個執行推論應用程式的元件、安裝機器學習架構，以及下載機器學習模型。若要使用 AWS提供的元件執行範例推論，您可以將推論元件部署到核心裝置，其會自動將對應的模型和執行期元件納入做為相依性。若要自訂部署，您可以使用自訂模型元件來插入或交換範例模型元件，也可以使用 AWS所提供元件的元件配方做為範本，以建立您自己的自訂推論、模型和執行期元件。

若要使用自訂元件執行機器學習推論：

1. 建立模型元件。此元件包含您要用來執行 inference 的機器學習模型。 AWS 提供範例預先訓練的 DLR 和 TensorFlow Lite 模型。若要使用自訂模型，請建立您自己的模型元件。

1. 建立執行期元件。此元件包含為模型安裝機器學習執行期所需的指令碼。 AWS 提供[深度學習執行期 (DLR) 和 TensorFlow Lite 的範例執行期](https://github.com/neo-ai/neo-ai-dlr)元件。 [TensorFlow ](https://www.tensorflow.org/lite/guide/python) 若要將其他執行時間與自訂模型和推論程式碼搭配使用，請建立您自己的執行時間元件。

1. 建立推論元件。此元件包含您的推論程式碼，並將您的模型和執行期元件納入相依性。 AWS 提供範例推論元件，以使用 DLR 和 TensorFlow Lite 進行影像分類和物件偵測。若要執行其他類型的推論，或使用自訂模型和執行時間，請建立您自己的推論元件。

1. 部署推論元件。當您部署此元件時， AWS IoT Greengrass 也會自動部署模型和執行期元件相依性。

若要開始使用 AWS提供的元件，請參閱 [教學課程：使用 TensorFlow Lite 執行範例影像分類推論](ml-tutorial-image-classification.md)。

如需建立自訂機器學習元件的詳細資訊，請參閱 [自訂您的機器學習元件](ml-customization.md)。

## 第 2 AWS IoT Greengrass 版有何不同？
<a name="ml-differences"></a>

AWS IoT Greengrass 將機器學習的功能單位，例如模型、執行期和推論程式碼，合併成可讓您使用單一步驟程序來安裝機器學習執行期、下載訓練過的模型，以及在裝置上執行推論的元件。

透過使用 AWS提供的機器學習元件，您可以靈活地使用範例推論程式碼和預先訓練的模型開始執行機器學習推論。您可以插入自訂模型元件，將您自己的自訂訓練模型與 AWS 提供的推論和執行期元件搭配使用。對於完全自訂的機器學習解決方案，您可以使用公有元件做為範本來建立自訂元件，並使用您想要的任何執行時間、模型或推論類型。

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

若要建立和使用機器學習元件，您必須具備下列項目：
+ Greengrass 核心裝置。如果您沒有帳戶，請參閱 [教學課程：入門 AWS IoT Greengrass V2](getting-started.md)。
+ 至少 500 MB 的本機儲存空間，可使用 AWS提供的範例機器學習元件。

## 支援的模型來源
<a name="ml-model-sources"></a>

AWS IoT Greengrass 支援使用儲存在 Amazon S3 中的自訂訓練機器學習模型。您也可以使用 Amazon SageMaker AI 邊緣封裝任務，直接為 SageMaker AI Neo 編譯模型建立模型元件。如需搭配 使用 SageMaker AI Edge Manager 的詳細資訊 AWS IoT Greengrass，請參閱 [在 Greengrass 核心裝置上使用 Amazon SageMaker AI Edge Manager](use-sagemaker-edge-manager.md)。

包含模型的 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)。
+ 其名稱不得包含句點 (`.`)。如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的使用虛擬託管式儲存貯體搭配 SSL [的 儲存貯體命名規則](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules)。
+ <a name="sr-artifacts-req"></a>存放模型來源的 S3 儲存貯體必須與機器學習元件位於相同 AWS 帳戶 和 AWS 區域 。
+ AWS IoT Greengrass 必須具有模型來源的`read`許可。若要讓 AWS IoT Greengrass 存取 S3 儲存貯體，[Greengrass 裝置角色](device-service-role.md)必須允許 `s3:GetObject`動作。如需裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

## 支援的機器學習執行時間
<a name="ml-runtime-libraries"></a>

AWS IoT Greengrass 可讓您建立自訂元件，以使用您選擇的任何機器學習執行時間，透過自訂訓練模型執行機器學習推論。如需建立自訂機器學習元件的詳細資訊，請參閱 [自訂您的機器學習元件](ml-customization.md)。

為了讓機器學習入門的過程更有效率， AWS IoT Greengrass 提供使用下列機器學習執行期的範例推論、模型和執行期元件：
+  [深度學習執行期 ](https://github.com/neo-ai/neo-ai-dlr)(DLR) 1.6.0 版和 1.3.0 版
+  [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) 2.5.0 版 

## AWS提供的機器學習元件
<a name="ml-components"></a>

下表列出用於機器學習的 AWS所提供元件。

**注意**  <a name="component-nucleus-dependency-update-note"></a>
數個 AWS提供的元件取決於 Greengrass 核的特定次要版本。由於此相依性，當您將 Greengrass 核更新為新的次要版本時，您需要更新這些元件。如需每個元件所依賴之核的特定版本的資訊，請參閱對應的元件主題。如需更新核心的詳細資訊，請參閱 [更新 AWS IoT Greengrass 核心軟體 (OTA)](update-greengrass-core-v2.md)。


| 元件 | 說明 | [元件類型](develop-greengrass-components.md#component-types) | 支援的作業系統 | [開放原始碼](open-source.md) | 
| --- | --- | --- | --- | --- | 
| [SageMaker AI Edge Manager](sagemaker-edge-manager-component.md) | 在 Greengrass 核心裝置上部署 Amazon SageMaker AI Edge Manager 代理程式。 | 一般 | Linux、Windows | 否 | 
| [DLR 影像分類](dlr-image-classification-component.md) | 使用 DLR 影像分類模型存放區和 DLR 執行期元件做為相依性的推論元件，以安裝 DLR、下載範例影像分類模型，以及在支援的裝置上執行影像分類推論。 | 一般 | Linux、Windows | 否 | 
| [DLR 物件偵測](dlr-object-detection-component.md) | 使用 DLR 物件偵測模型存放區和 DLR 執行期元件做為相依性的推論元件，以安裝 DLR、下載範例物件偵測模型，以及在支援的裝置上執行物件偵測推論。 | 一般 | Linux、Windows | 否 | 
| [DLR 影像分類模型存放區](dlr-image-classification-model-store-component.md) | 模型元件，其中包含做為 Greengrass 成品的範例 ResNet-50 影像分類模型。 | 一般 | Linux、Windows | 否 | 
| [DLR 物件偵測模型存放區](dlr-object-detection-model-store-component.md) | 模型元件，其中包含做為 Greengrass 成品的範例 YOLOv3 物件偵測模型。 | 一般 | Linux、Windows | 否 | 
| [DLR 執行時間](dlr-component.md) | 包含安裝指令碼的執行期元件，用於在 Greengrass 核心裝置上安裝 DLR 及其相依性。 | 一般 | Linux、Windows | 否 | 
| [TensorFlow Lite 影像分類](tensorflow-lite-image-classification-component.md) | 使用 TensorFlow Lite 影像分類模型存放區和 TensorFlow Lite 執行期元件做為相依性的推論元件，以安裝 TensorFlow Lite、下載範例影像分類模型，以及在支援的裝置上執行影像分類推論。 | 一般 | Linux、Windows | 否 | 
| [TensorFlow Lite 物件偵測](tensorflow-lite-object-detection-component.md) | 使用 TensorFlow Lite 物件偵測模型存放區和 TensorFlow Lite 執行期元件做為相依性的推論元件，以安裝 TensorFlow Lite、下載範例物件偵測模型，以及在支援的裝置上執行物件偵測推論。 | 一般 | Linux、Windows | 否 | 
| [TensorFlow Lite 影像分類模型存放區](tensorflow-lite-image-classification-model-store-component.md) | 模型元件，其中包含做為 Greengrass 成品的範例 MobileNet v1 模型。 | 一般 | Linux、Windows | 否 | 
| [TensorFlow Lite 物件偵測模型存放區](tensorflow-lite-object-detection-model-store-component.md) | 模型元件，其中包含做為 Greengrass 成品的範例單一鏡頭偵測 (SSD) MobileNet 模型。 | 一般 | Linux、Windows | 否 | 
| [TensorFlow Lite 執行時間](tensorflow-lite-component.md) | 包含安裝指令碼的執行期元件，用於在 Greengrass 核心裝置上安裝 TensorFlow Lite 及其相依性。 | 一般 | Linux、Windows | 否 | 

# 在 Greengrass 核心裝置上使用 Amazon SageMaker AI Edge Manager
<a name="use-sagemaker-edge-manager"></a>

**重要**  
SageMaker AI Edge Manager 已於 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 核心裝置上封裝和使用 Amazon SageMaker AI Neo 編譯的模型。透過使用 SageMaker AI Edge Manager，您也可以從核心裝置取樣模型輸入和輸出資料，並將該資料傳送至 AWS 雲端 以進行監控和分析。由於 SageMaker AI Edge Manager 使用 SageMaker AI Neo 來最佳化目標硬體的模型，因此您不需要直接在裝置上安裝 DLR 執行期。在 Greengrass 裝置上，SageMaker AI Edge Manager 不會載入本機 AWS IoT 憑證或直接呼叫 AWS IoT 憑證提供者端點。反之，SageMaker AI Edge Manager 會使用[權杖交換服務](token-exchange-service-component.md)從 TES 端點擷取臨時憑證。

本節說明 SageMaker AI Edge Manager 如何在 Greengrass 核心裝置上運作。



## SageMaker AI Edge Manager 如何在 Greengrass 裝置上運作
<a name="how-to-use-sdge-manager-with-greengrass"></a>

若要將 SageMaker AI Edge Manager 代理程式部署至您的核心裝置，請建立包含 `aws.greengrass.SageMakerEdgeManager` component. AWS IoT Greengrass manages 在裝置上安裝 Edge Manager 代理程式和生命週期的部署。當新版本的代理程式二進位檔可用時，請部署更新的`aws.greengrass.SageMakerEdgeManager`元件版本，以升級安裝在裝置上的代理程式版本。

當您搭配 使用 SageMaker AI Edge Manager 時 AWS IoT Greengrass，您的工作流程包含下列高階步驟：

1. 使用 SageMaker AI Neo 編譯模型。

1. 使用 SageMaker AI 邊緣封裝任務封裝 SageMaker AI Neo 編譯模型。當您執行模型的邊緣封裝任務時，您可以選擇建立具有封裝模型的模型元件，做為可部署到 Greengrass 核心裝置的成品。

1. 建立自訂推論元件。您可以使用此推論元件與 Edge Manager 代理程式互動，以在核心裝置上執行推論。這些操作包括載入模型、叫用預測請求來執行推論，以及在元件關閉時卸載模型。

1. 部署 SageMaker AI Edge Manager 元件、封裝模型元件和推論元件，以在裝置上的 SageMaker AI 推論引擎 (Edge Manager 代理程式） 上執行模型。

如需有關建立與 SageMaker AI Edge Manager 搭配使用的邊緣封裝任務和推論元件的詳細資訊，請參閱《*Amazon SageMaker AI 開發人員指南*》中的[使用 部署模型套件和 Edge Manager Agent AWS IoT Greengrass](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-greengrass.html)。

本[教學課程：開始使用 SageMaker AI Edge Manager](get-started-with-edge-manager-on-greengrass.md)教學課程說明如何在現有的 Greengrass 核心裝置上設定和使用 SageMaker AI Edge Manager 代理程式，使用 AWS您可用來建立範例推論和模型元件的範例程式碼。

當您在 Greengrass 核心裝置上使用 SageMaker AI Edge Manager 時，您也可以使用擷取資料功能將範例資料上傳至 AWS 雲端。擷取資料是您用來將推論輸入、推論結果和其他推論資料上傳至 S3 儲存貯體或本機目錄以供未來分析的 SageMaker AI 功能。如需搭配 SageMaker AI Edge Manager 使用擷取資料的詳細資訊，請參閱《*Amazon SageMaker AI 開發人員指南*》中的[管理模型](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manage-model.html#edge-manage-model-capturedata)。

## 要求
<a name="greengrass-edge-manager-agent-requirements"></a>

您必須符合下列要求，才能在 Greengrass 核心裝置上使用 SageMaker AI Edge Manager 代理程式。<a name="sm-edge-manager-component-reqs"></a>
+ <a name="sm-req-core-device"></a>在 Amazon Linux 2 上執行的 Greengrass 核心裝置、以 Debian 為基礎的 Linux 平台 (x86\$164 或 Armv8) 或 Windows (x86\$164)。如果您沒有帳戶，請參閱 [教學課程：入門 AWS IoT Greengrass V2](getting-started.md)。
+ <a name="sm-req-python"></a>[Python](https://www.python.org/downloads/) 3.6 或更新版本，包括`pip`安裝在核心裝置上的 Python 版本。
+ 使用下列項目設定的 [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>[AmazonSageMakerEdgeDeviceFleetPolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AmazonSageMakerEdgeDeviceFleetPolicy) IAM 受管政策。
  + <a name="sm-req-iam-s3-putobject"></a>`s3:PutObject` 動作，如下列 IAM 政策範例所示。

    ```
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": [
            "s3:PutObject"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        }
      ]
    }
    ```
+ <a name="sm-req-s3-bucket"></a>在與 Greengrass 核心裝置相同的 AWS 帳戶 和 中建立 AWS 區域 的 Amazon S3 儲存貯體。SageMaker AI Edge Manager 需要 S3 儲存貯體來建立邊緣裝置機群，並儲存範例資料，避免在裝置上執行推論。如需建立 S3 儲存貯體的資訊，請參閱 [Amazon S3 入門](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。
+ <a name="sm-req-edge-device-fleet"></a>使用與 Greengrass 核心裝置相同 AWS IoT 角色別名的 SageMaker AI 邊緣裝置機群。如需詳細資訊，請參閱[建立邊緣裝置機群](get-started-with-edge-manager-on-greengrass.md#create-edge-device-fleet-for-greengrass)。
+ <a name="sm-req-edge-device"></a>您的 Greengrass 核心裝置已註冊為 SageMaker AI Edge 裝置機群中的邊緣裝置。邊緣裝置名稱必須與核心裝置的 AWS IoT 物件名稱相符。如需詳細資訊，請參閱[註冊您的 Greengrass 核心裝置](get-started-with-edge-manager-on-greengrass.md#register-greengrass-core-device-in-sme)。

## 開始使用 SageMaker AI Edge Manager
<a name="use-sm-edge-manager"></a>

您可以完成教學課程，開始使用 SageMaker AI Edge Manager。本教學課程說明如何開始使用 SageMaker AI Edge Manager AWS搭配現有核心裝置上提供的範例元件。這些範例元件使用 SageMaker AI Edge Manager 元件做為相依性來部署 Edge Manager 代理程式，並使用使用 SageMaker AI Neo 編譯的預先訓練模型執行推論。如需詳細資訊，請參閱[教學課程：開始使用 SageMaker AI Edge Manager](get-started-with-edge-manager-on-greengrass.md)。

# 自訂您的機器學習元件
<a name="ml-customization"></a>

在 中 AWS IoT Greengrass，您可以設定範例[機器學習元件](perform-machine-learning-inference.md#ml-components)，以自訂如何在裝置上執行機器學習推論，並以推論、模型和執行期元件做為建置區塊。 AWS IoT Greengrass 也可讓您靈活地使用範例元件做為範本，並視需要建立自己的自訂元件。您可以混合和比對此模組化方法，以下列方式自訂機器學習推論元件：

**使用範例推論元件**  
+ 當您部署推論元件時，請修改推論元件的組態。
+ 使用自訂模型搭配範例推論元件，方法是將範例模型存放區元件取代為自訂模型元件。您的自訂模型必須使用與範例模型相同的執行時間進行訓練。

**使用自訂推論元件**  
+ 透過新增公有模型元件和執行期元件做為自訂推論元件的相依性，搭配範例模型和執行期使用自訂推論程式碼。
+ 建立和新增自訂模型元件或執行期元件，做為自訂推論元件的相依性。如果您想要使用自訂推論程式碼，或未 AWS IoT Greengrass 提供範例元件的執行時間，則必須使用自訂元件。

**Topics**
+ [

## 修改公有推論元件的組態
](#modify-ml-component-config)
+ [

## 搭配範例推論元件使用自訂模型
](#override-public-model-store)
+ [

## 建立自訂機器學習元件
](#create-private-ml-components)
+ [

## 建立自訂推論元件
](#create-inference-component)

## 修改公有推論元件的組態
<a name="modify-ml-component-config"></a>

在 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/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提供的機器學習元件](perform-machine-learning-inference.md#ml-components)。

本節說明如何從 AWS IoT Greengrass 主控台部署修改過的元件。如需使用 部署元件的詳細資訊 AWS CLI，請參閱 [建立部署](create-deployments.md)。<a name="modify-ml-component-config-console"></a>

**部署修改過的公有推論元件 （主控台）**

1. 登入 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)。

1. 在導覽功能表中，選擇**元件**。

1. 在**元件**頁面上的**公有元件**索引標籤上，選擇您要部署的元件。

1. 在元件頁面上，選擇**部署**。

1. <a name="add-deployment"></a>從**新增至部署**中，選擇下列其中一項：

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

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

1. <a name="specify-deployment-target"></a>在**指定目標**頁面上，執行下列作業：

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

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

1. 在**選取元件**頁面的**公有元件**下，驗證已選取具有已修改組態的推論元件，然後選擇**下一步**。

1. 在**設定元件**頁面上，執行下列動作：

   1. 選取推論元件，然後選擇**設定元件**。

   1. 在**組態更新**下，輸入您要更新的組態值。例如，在**要合併的組態**方塊中輸入下列組態更新，將推論間隔變更為 15 秒，並指示元件尋找`/custom-ml-inference/images/`資料夾中名為 `custom.jpg`的映像。

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

      若要將元件的整個組態重設為其預設值，`""`請在**重設路徑**方塊中指定單一空白字串。

   1. 選擇**確認**，然後選擇**下一步**。

1. 在**設定進階設定**頁面上，保留預設組態設定，然後選擇**下一步**。

1. 在**檢閱**頁面上，選擇**部署**

## 搭配範例推論元件使用自訂模型
<a name="override-public-model-store"></a>

如果您想要將範例推論元件與您自己的機器學習模型搭配使用，以用於 AWS IoT Greengrass 提供範例執行期元件的執行期，您必須使用使用這些模型做為成品的元件覆寫公有模型元件。在高階，您需完成下列步驟，以搭配範例推論元件使用自訂模型：

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

1. 修改推論元件中的`ModelResourceKey`組態參數，以使用自訂模型。如需更新推論元件組態的資訊，請參閱 [修改公有推論元件的組態](#modify-ml-component-config)

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

### 建立自訂模型元件 （主控台）
<a name="create-model-store-component-console"></a>

1. 將模型上傳至 S3 儲存貯體。如需將模型上傳至 S3 儲存貯體的資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。 **
**注意**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>您必須將成品存放在與 AWS 帳戶 AWS 區域 元件相同的 S3 儲存貯體中。若要讓 AWS IoT Greengrass 存取這些成品，[Greengrass 裝置角色](device-service-role.md)必須允許 `s3:GetObject`動作。如需裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

1. 在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**元件**。

1. 擷取公有模型存放區元件的元件配方。

   1. 在**元件**頁面上的**公有元件**索引標籤上，尋找並選擇您要為其建立新版本的公有模型元件。例如 `variant.DLR.ImageClassification.ModelStore`。

   1. 在元件頁面上，選擇**檢視配方**並複製顯示的 JSON 配方。

1. 在**元件**頁面上的**我的元件**索引標籤上，選擇**建立元件**。

1. 在**建立元件**頁面的**元件資訊**下，選取**將配方輸入為 JSON** 做為元件來源。

1. 在**配方**方塊中，貼上您先前複製的元件配方。

1. <a name="override-model-recipe-config"></a>在配方中，更新下列值：
   + `ComponentVersion`：增加元件的次要版本。

     當您建立自訂元件以覆寫公有模型元件時，您只能更新現有元件版本的次要版本。例如，如果公有元件版本為 `2.1.0`，您可以使用版本 建立自訂元件`2.1.1`。
   + `Manifests.Artifacts.Uri`：將每個 URI 值更新為您要使用的模型的 Amazon S3 URI。
**注意**  
請勿變更元件的名稱。

1. 選擇**建立元件**。

### 建立自訂模型元件 (AWS CLI)
<a name="create-model-store-component-cli"></a>

1. 將模型上傳至 S3 儲存貯體。如需將模型上傳至 S3 儲存貯體的資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。 **
**注意**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>您必須將成品存放在與 AWS 帳戶 AWS 區域 元件相同的 S3 儲存貯體中。若要讓 AWS IoT Greengrass 存取這些成品，[Greengrass 裝置角色](device-service-role.md)必須允許 `s3:GetObject`動作。如需裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

1. 執行下列命令來擷取公有元件的元件配方。此命令會將元件配方寫入您在命令中提供的輸出檔案。視需要將擷取的 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>
   ```

------

1. 將配方檔案名稱更新為 `<component-name>-<component-version>`，其中元件版本是新元件的目標版本。例如 `variant.DLR.ImageClassification.ModelStore-2.1.1.yaml`。

1. <a name="override-model-recipe-config"></a>在配方中，更新下列值：
   + `ComponentVersion`：增加元件的次要版本。

     當您建立自訂元件以覆寫公有模型元件時，您只能更新現有元件版本的次要版本。例如，如果公有元件版本為 `2.1.0`，您可以使用版本 建立自訂元件`2.1.1`。
   + `Manifests.Artifacts.Uri`：將每個 URI 值更新為您要使用的模型的 Amazon S3 URI。
**注意**  
請勿變更元件的名稱。

1. 執行下列命令，使用您擷取和修改的配方建立新的元件。

   ```
   aws greengrassv2 create-component-version \
       --inline-recipe fileb://path/to/component/recipe
   ```
**注意**  
此步驟會在 的服務中建立 元件 AWS IoT Greengrass AWS 雲端。您可以使用 Greengrass CLI 在本機開發、測試和部署元件，然後再將其上傳至雲端。如需詳細資訊，請參閱[開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)。

如需建立元件的詳細資訊，請參閱 [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)。

## 建立自訂機器學習元件
<a name="create-private-ml-components"></a>

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

**Topics**
+ [

### 擷取公有元件的配方
](#get-ml-component-recipes)
+ [

### 擷取範例元件成品
](#get-ml-component-artifacts)
+ [

### 將元件成品上傳至 S3 儲存貯體
](#upload-ml-component-artifacts)
+ [

### 建立自訂元件
](#create-ml-components)

### 擷取公有元件的配方
<a name="get-ml-component-recipes"></a>

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

  1. 在**元件**頁面上的**公有元件**索引標籤上，尋找並選擇公有元件。

  1. 在元件頁面上，選擇**檢視配方**。
+ **使用 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 Resource Name (ARN)。
  + `<recipe-format>`。 您要建立配方檔案的格式。支援的值為 `JSON` 和 `YAML`。
  + `<recipe-file>`。 配方的名稱，格式為 `<component-name>-<component-version>`。

### 擷取範例元件成品
<a name="get-ml-component-artifacts"></a>

您可以使用公有機器學習元件所使用的成品做為範本，來建立自訂元件成品，例如推論程式碼或執行階段安裝指令碼。

若要檢視公有機器學習元件中包含的範例成品，請部署公有推論元件，然後在 `/greengrass/v2/packages/artifacts-unarchived/component-name/component-version/` 資料夾中檢視裝置上的成品。

### 將元件成品上傳至 S3 儲存貯體
<a name="upload-ml-component-artifacts"></a>

您必須先將元件成品上傳至 S3 儲存貯體，並在元件配方中使用 S3 URIs，才能建立自訂元件。例如，若要在推論元件中使用自訂推論程式碼，請將程式碼上傳至 S3 儲存貯體。然後，您可以使用推論程式碼的 Amazon S3 URI 做為元件中的成品。

如需將內容上傳至 S3 儲存貯體的資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。 **

**注意**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>您必須將成品存放在與 AWS 帳戶 AWS 區域 元件相同的 S3 儲存貯體中。若要讓 AWS IoT Greengrass 存取這些成品，[Greengrass 裝置角色](device-service-role.md)必須允許 `s3:GetObject`動作。如需裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

### 建立自訂元件
<a name="create-ml-components"></a>

您可以使用您擷取的成品和配方來建立自訂機器學習元件。如需範例，請參閱 [建立自訂推論元件](#create-inference-component)。

如需建立元件並將其部署至 Greengrass 裝置的詳細資訊，請參閱 [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)和 [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。

## 建立自訂推論元件
<a name="create-inference-component"></a>

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

**Topics**
+ [

### 將推論程式碼上傳至 Amazon S3 儲存貯體
](#create-inference-code)
+ [

### 為您的推論元件建立配方
](#create-inference-component-recipe)
+ [

### 建立推論元件
](#create-private-inference-component)

### 將推論程式碼上傳至 Amazon S3 儲存貯體
<a name="create-inference-code"></a>

建立推論程式碼，然後將其上傳至 S3 儲存貯體。如需將內容上傳至 S3 儲存貯體的資訊，請參閱《[Amazon Simple Storage Service 使用者指南》中的使用 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。 **

**注意**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>您必須將成品存放在與 AWS 帳戶 AWS 區域 元件相同的 S3 儲存貯體中。若要讓 AWS IoT Greengrass 存取這些成品，[Greengrass 裝置角色](device-service-role.md)必須允許 `s3:GetObject`動作。如需裝置角色的詳細資訊，請參閱 [授權核心裝置與 AWS 服務互動](device-service-role.md)。

### 為您的推論元件建立配方
<a name="create-inference-component-recipe"></a>

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>`。

1. 在配方中的 `ComponentDependencies` 物件中，根據您要使用的模型和執行時間元件，執行下列一或多個動作：
   + 如果您想要使用 DLR 編譯模型，請保留 DLR 元件相依性。您也可以將其取代為自訂執行期元件的相依性，如下列範例所示。

     **執行期元件**

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

     ```
     { 
         "<runtime-component>": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     <runtime-component>:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------
   + 保留 DLR 影像分類模型存放區相依性，以使用 AWS 提供的預先訓練 ResNet-50 模型，或修改它以使用自訂模型元件。當您包含公有模型元件的相依性時，如果元件的較新自訂版本存在於相同的 中 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
     ```

------

1. 在 `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"
   ```

------

1. 在 `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
   ```

------

 如需建立元件配方的詳細資訊，請參閱 [AWS IoT Greengrass 元件配方參考](component-recipe-reference.md)。

### 建立推論元件
<a name="create-private-inference-component"></a>

使用 AWS IoT Greengrass 主控台或 AWS CLI ，使用您剛定義的配方來建立元件。建立元件之後，您可以部署它，在裝置上執行推論。如需如何部署推論元件的範例，請參閱 [教學課程：使用 TensorFlow Lite 執行範例影像分類推論](ml-tutorial-image-classification.md)。

#### 建立自訂推論元件 （主控台）
<a name="create-inference-component-console"></a>

1. 登入 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)。

1. 在導覽功能表中，選擇**元件**。

1. 在**元件**頁面上的**我的元件**索引標籤上，選擇**建立元件**。

1. 在**建立元件**頁面的**元件資訊**下，選取將**配方輸入為 JSON** 或將**配方輸入為 YAML** 做為元件來源。

1. 在**配方**方塊中，輸入您建立的自訂配方。

1. 按一下**建立元件**。

#### 建立自訂推論元件 (AWS CLI)
<a name="create-inference-component-cli"></a>

執行下列命令，使用您建立的配方建立新的自訂元件。

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

**注意**  
此步驟會在 的服務中建立 AWS IoT Greengrass 元件 AWS 雲端。您可以使用 Greengrass CLI 在本機開發、測試和部署元件，然後再將其上傳至雲端。如需詳細資訊，請參閱[開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)。

# 故障診斷機器學習推論
<a name="ml-troubleshooting"></a>

使用本節中的疑難排解資訊和解決方案，以協助解決機器學習元件的問題。如需公有機器學習推論元件，請參閱下列元件日誌中的錯誤訊息：

------
#### [ Linux or Unix ]
+ `/greengrass/v2/logs/aws.greengrass.DLRImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.DLRObjectDetection.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteObjectDetection.log`

------
#### [ Windows ]
+ `C:\greengrass\v2\logs\aws.greengrass.DLRImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.DLRObjectDetection.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteObjectDetection.log`

------

如果元件已正確安裝，則元件日誌會包含用於推論的程式庫位置。

**Topics**
+ [

## 無法擷取程式庫
](#rpi-update-error)
+ [

## Cannot open shared object file
](#rpi-import-cv-error)
+ [

## Error: ModuleNotFoundError: No module named '<library>'
](#troubleshooting-venv-errors-not-found)
+ [

## 未偵測到支援 CUDA 的裝置
](#troubleshooting-cuda-error)
+ [

## 沒有此類檔案或目錄
](#troubleshooting-venv-errors-no-such-file)
+ [

## RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>
](#troubleshooting-rpi-numpy-version-error)
+ [

## picamera.exc.PiCameraError: Camera is not enabled
](#troubleshooting-rpi-camera-stack-error)
+ [

## 記憶體錯誤
](#troubleshooting-memory-errors)
+ [

## 磁碟空間錯誤
](#troubleshooting-disk-space-errors)
+ [

## 逾時錯誤
](#troubleshooting-timeout-errors)

## 無法擷取程式庫
<a name="rpi-update-error"></a>

當安裝程式指令碼無法在 Raspberry Pi 裝置上部署期間下載所需的程式庫時，會發生下列錯誤。

```
Err:2 http://raspbian.raspberrypi.org/raspbian buster/main armhf python3.7-dev armhf 3.7.3-2+deb10u1
404 Not Found [IP: 93.93.128.193 80] 
E: Failed to fetch http://raspbian.raspberrypi.org/raspbian/pool/main/p/python3.7/libpython3.7-dev_3.7.3-2+deb10u1_armhf.deb 404 Not Found [IP: 93.93.128.193 80]
```

再次執行`sudo apt-get update`並部署您的元件。

## Cannot open shared object file
<a name="rpi-import-cv-error"></a>

當安裝程式指令碼無法在 Raspberry Pi 裝置上部署`opencv-python`期間下載所需的相依性時，您可能會看到類似下列的錯誤。

```
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
```

執行下列命令來手動安裝 的相依性`opencv-python`：

```
sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
```

## Error: ModuleNotFoundError: No module named '<library>'
<a name="troubleshooting-venv-errors-not-found"></a>

當 ML 執行期程式庫或其相依性未正確安裝時，您可能會在 ML 執行期元件日誌 (`variant.DLR.log` 或 `variant.TensorFlowLite.log`) 中看到此錯誤。在下列情況下，可能會發生此錯誤：
+ 如果您使用預設啟用的 `UseInstaller`選項，則此錯誤表示 ML 執行期元件無法安裝執行期或其相依性。請執行下列操作：

  1. 設定 ML 執行期元件以停用 `UseInstaller`選項。

  1. 安裝 ML 執行時間及其相依性，並將其提供給執行 ML 元件的系統使用者。如需詳細資訊，請參閱下列內容：
     + [DLR 執行時間 UseInstaller 選項](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite 執行時間 UseInstaller 選項](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)
+ 如果您不使用 `UseInstaller`選項，此錯誤表示未為執行 ML 元件的系統使用者安裝 ML 執行時間或其相依性。請執行下列操作：

  1. 檢查是否已為執行 ML 元件的系統使用者安裝程式庫。將 *ggc\$1user* 取代為系統使用者名稱，並將 *tflite\$1runtime* 取代為要檢查的程式庫名稱。

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -c 'import tflite_runtime'"
     ```

------
#### [ Windows ]

     ```
     runas /user:ggc_user "py -3 -c \"import tflite_runtime\""
     ```

------

  1. 如果未安裝程式庫，請為該使用者安裝程式庫。將 *ggc\$1user* 取代為系統使用者的名稱，並將 *tflite\$1runtime* 取代為程式庫的名稱。

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -m pip install --user tflite_runtime"
     ```

------
#### [ Windows ]

     ```
     runas /user:ggc_user "py -3 -m pip install --user tflite_runtime"
     ```

------

     如需每個 ML 執行時間相依性的詳細資訊，請參閱下列內容：
     + [DLR 執行時間 UseInstaller 選項](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite 執行時間 UseInstaller 選項](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)

  1. 如果問題仍然存在，請為其他使用者安裝程式庫，以確認此裝置是否可以安裝程式庫。例如，使用者可以是您的使用者、根使用者或管理員使用者。如果您無法為任何使用者成功安裝程式庫，您的裝置可能不支援程式庫。請參閱程式庫的文件，以檢閱需求並疑難排解安裝問題。

## 未偵測到支援 CUDA 的裝置
<a name="troubleshooting-cuda-error"></a>

使用 GPU 加速時，您可能會看到下列錯誤。執行下列命令，為 Greengrass 使用者啟用 GPU 存取。

```
sudo usermod -a -G video ggc_user
```

## 沒有此類檔案或目錄
<a name="troubleshooting-venv-errors-no-such-file"></a>

下列錯誤表示執行時間元件無法正確設定虛擬環境：
+ `MLRootPath/greengrass_ml_dlr_conda/bin/conda: No such file or directory `
+ `MLRootPath/greengrass_ml_dlr_venv/bin/activate: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_conda/bin/conda: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_venv/bin/activate: No such file or directory `

檢查日誌，以確保所有執行時間相依性都已正確安裝。如需安裝程式指令碼所安裝程式庫的詳細資訊，請參閱下列主題：
+ [DLR 執行時間](dlr-component.md)
+ [TensorFlow Lite 執行時間](tensorflow-lite-component.md)

根據預設，*MLRootPath* 設定為 `/greengrass/v2/work/component-name/greengrass_ml`。若要變更此位置，請直接在部署中包含 [DLR 執行時間](dlr-component.md)或 [TensorFlow Lite 執行時間](tensorflow-lite-component.md) 執行期元件，並在組態合併更新中指定`MLRootPath`參數的修改值。如需設定元件的詳細資訊，請參閱 [更新元件組態](update-component-configurations.md)。

**注意**  
對於 DLR 元件 v1.3.x，您可以在推論元件的組態中設定 `MLRootPath` 參數，預設值為 `$HOME/greengrass_ml`。

## RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>
<a name="troubleshooting-rpi-numpy-version-error"></a>

當您在執行 Raspberry Pi OS Bullseye 的 Raspberry Pi 上執行機器學習推論時，您可能會看到下列錯誤。

```
RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd
ImportError: numpy.core.multiarray failed to import
```

發生此錯誤是因為 Raspberry Pi OS Bullseye 包含比 OpenCV 所需版本更舊的 NumPy 版本。若要修正此問題，請執行下列命令，將 NumPy 升級到最新版本。

```
pip3 install --upgrade numpy
```

## picamera.exc.PiCameraError: Camera is not enabled
<a name="troubleshooting-rpi-camera-stack-error"></a>

當您在執行 Raspberry Pi OS Bullseye 的 Raspberry Pi 上執行機器學習推論時，您可能會看到下列錯誤。

```
picamera.exc.PiCameraError: Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.
```

發生此錯誤是因為 Raspberry Pi OS Bullseye 包含與 ML 元件不相容的新攝影機堆疊。若要修正此問題，請啟用舊版攝影機堆疊。<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**啟用舊版攝影機堆疊**

1. 執行下列命令以開啟 Raspberry Pi 組態工具。

   ```
   sudo raspi-config
   ```

1. 選取**界面選項**。

1. 選取**舊版攝影機**以啟用舊版攝影機堆疊。

1. 重新啟動 Raspberry Pi。

## 記憶體錯誤
<a name="troubleshooting-memory-errors"></a>

當裝置沒有足夠的記憶體且元件程序中斷時，通常會發生下列錯誤。
+ `stderr. Killed.`
+ `exitCode=137`

我們建議至少部署 500 MB 的記憶體，以部署公有機器學習推論元件。

## 磁碟空間錯誤
<a name="troubleshooting-disk-space-errors"></a>

`no space left on device` 錯誤通常發生在裝置沒有足夠的儲存空間時。在再次部署元件之前，請確定您的裝置上有足夠的可用磁碟空間。我們建議至少 500 MB 的可用磁碟空間，以部署公有機器學習推論元件。

## 逾時錯誤
<a name="troubleshooting-timeout-errors"></a>

公有機器學習元件會下載大於 200 MB 的大型機器學習模型檔案。如果下載在部署期間逾時，請檢查您的網際網路連線速度，然後重試部署。