

支援終止通知：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 Core v1.6 或更新版本。

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

若要取得已執行的本機推論，請參閱 [如何使用 設定機器學習推論 AWS 管理主控台](ml-console.md)。

## AWS IoT Greengrass ML 推論的運作方式
<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_tw/greengrass/v1/developerguide/images/ml-inference/diagram-ml-overview.png)


AWS IoT Greengrass ML 推論可簡化 ML 工作流程的每個步驟，包括：
+ 建立和部署 Machine Learning 架構的原型。
+ 存取雲端訓練模型和將其部署到 Greengrass 核心裝置。
+ 建立可以存取硬體 Accelerator (例如 GPU 和 FPGA) 做為[本機資源](access-local-resources.md)的推論應用程式。

## 機器學習資源
<a name="ml-resources"></a>

機器學習資源代表部署到 AWS IoT Greengrass 核心的雲端訓練推論模型。若要部署機器學習資源，請先將資源新增至 Greengrass 群組，然後定義群組中的 Lambda 函數如何存取這些資源。在群組部署期間， 從雲端 AWS IoT Greengrass 擷取來源模型套件，並將其擷取至 Lambda 執行時間命名空間內的目錄。然後，Greengrass Lambda 函數會使用本機部署的模型來執行推論。

若要更新本機部署模型，首先，請更新對應到 machine learning 資源的來源模型 (在雲端中)，然後部署群組。在部署期間， 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 加密。 Amazon S3 對於使用伺服器端加密的儲存貯體， AWS IoT Greengrass ML 推論目前僅支援 SSE-S3 或 SSE-KMS 加密選項。如需伺服器端加密選項的詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)。
+ 存放 SageMaker AI 和 Amazon S3 模型來源的 S3 儲存貯體名稱不得包含句點 (`.`)。 Amazon S3 如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的使用虛擬託管式儲存貯體搭配 SSL [的 儲存貯體命名規則](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules)。
+ 服務層級 AWS 區域 支援必須同時適用於 [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)和 [SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html)。目前， AWS IoT Greengrass 在下列區域中支援 SageMaker AI 模型：
  + 美國東部 (俄亥俄)
  + 美國東部 (維吉尼亞北部)
  + 美國西部 (奧勒岡)
  + 亞太區域 (孟買)
  + 亞太區域 (首爾)
  + 亞太區域 (新加坡)
  + 亞太地區 (雪梨)
  + 亞太地區 (東京)
  + 歐洲 (法蘭克福)
  + 歐洲 (愛爾蘭)
  + 歐洲 (倫敦)
+ AWS IoT Greengrass 必須具有模型來源的`read`許可，如以下各節所述。

**SageMaker AI**  
AWS IoT Greengrass 支援儲存為 SageMaker AI 訓練任務的模型。SageMaker AI 是一項全受管 ML 服務，可讓您使用內建或自訂演算法來建置和訓練模型。如需詳細資訊，請參閱《[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`存放訓練任務的 儲存貯體。若要這樣做，請在服務角色中內嵌下列政策。您可以列出多個儲存貯體 ARN。    
****  

```
{
    "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`，請將以下內嵌政策新增到服務角色中。您可以列出多個儲存貯體 ARN。

------
#### [ 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>

以下要求適用於建立和使用 machine learning 資源：
+ 您必須使用 AWS IoT Greengrass Core v1.6 或更新版本。
+ 使用者定義的 Lambda 函數可以對資源執行 `read`或 `read and write`操作。不提供其他操作的權限。附屬 Lambda 函數的容器化模式會決定您如何設定存取許可。如需詳細資訊，請參閱[從 Lambda 函數存取機器學習資源](access-ml-resources.md)。
+ 在 Greengrass 核心裝置的作業系統中，您必須提供完整的資源路徑。
+ 資源名稱或 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 平台上。如需下載資訊，請參閱 [支援的 Machine Learning 執行時間和程式庫](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 中模型最佳化的詳細資訊，請參閱 [SageMaker AI Neo 文件](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html)。

**注意**  
 目前，您只能在特定 Amazon Web Services 區域中使用 Neo 深度學習編譯器來最佳化機器學習模型。不過，您可以在支援 AWS 區域 AWS IoT Greengrass 核心的每個 中使用 Neo 深度學習執行期與最佳化模型。如需詳細資訊，請參閱[如何設定最佳化的機器學習推論](ml-dlc-console.md)。

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

Apache MXNet 目前不保證支援正向相容性，因此您使用較新的架構版本訓練模型時，可能會比使用舊版不順。為了避免模型訓練與模型服務階段兩者間的衝突，以及提供一致的端對端體驗，請在這兩者階段使用相同的 MXNet 架構版本。

### 在 Raspberry Pi 中的 MXNet
<a name="mxnet-engine-rpi"></a>

存取本機 MXNet 模型的 Greengrass Lambda 函數必須設定下列環境變數：

```
MXNET_ENGINE_TYPE=NativeEngine
```

您可以在函數程式碼中設定環境變數，或將其新增至特定群組函數的組態中。如需將其新增為組態設定的範例，請參閱[步驟](ml-console.md#ml-console-config-lambda)。

**注意**  
對於一般使用 MXNet 架構來說，如執行第三方程式碼範例，其環境變數必須設定在 Raspberry Pi 中。

### 在 Raspberry Pi 上的 TensorFlow 模型服務限制
<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)。