

终止支持通知：2026 年 10 月 7 日， Amazon 将停止对的支持。 Amazon IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 Amazon IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 Amazon IoT Greengrass Version 1](https://docs.amazonaws.cn/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 可选：配置设备进行 ML 资格认证
<a name="idt-ml-qualification"></a>

IDT fo Amazon IoT Greengrass r 提供机器学习 (ML) 资格测试，以验证您的设备是否可以使用云训练模型在本地执行 ML 推理。

要运行 ML 资格认证测试，必须先按照[配置设备以运行 IDT 测试](device-config-setup.md)中的说明配置设备。然后，按照本主题中的步骤安装要运行的 ML 框架的依赖项。

需要有 IDT v3.1.0 或更高版本才能运行 ML 资格认证测试。

## 安装 ML 框架依赖项
<a name="ml-qualification-framework-dependencies"></a>

所有 ML 框架依赖项都必须安装在 `/usr/local/lib/python3.x/site-packages` 目录下。为确保将这些依赖项安装在正确的目录下，建议您在安装时使用 `sudo` root 权限。资格认证测试不支持虚拟环境。

**注意**  
如果您正在测试使用[容器化](lambda-group-config.md#lambda-containerization-considerations)运行的 Lambda 函数（在 **Greengrass 容器**模式下），则不支持为 `/usr/local/lib/python3.x` 下的 Python 库创建符号链接。为避免错误，必须在正确的目录下安装依赖项。

按照以下步骤安装目标框架的依赖项：
+ [安装 MXNet 依赖关系](#ml-qualification-mxnet-dependencies)
+ [安装 TensorFlow 依赖关系](#ml-qualification-tensorflow-dependencies)
+ [安装 DLR 依赖项](#ml-qualification-dlr-dependencies)

 

## 安装 Apache 依赖项 MXNet
<a name="ml-qualification-mxnet-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 资格认证测试具有以下依赖项：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，则必须创建从 Python 3.7 二进制文件到 Python 3.6 二进制文件的符号链接。这会将设备配置为满足 Amazon IoT Greengrass的 Python 要求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ Apache MXNet v1.2.1 或更高版本。
+ NumPy。 该版本必须与您的 MXNet 版本兼容。

### 正在安装 MXNet
<a name="ml-qualification-mxnet-install"></a>

按照 MXNet 文档中的说明进行[安装 MXNet](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&)。

**注意**  
<a name="run-python3-commands"></a>如果设备上同时安装了 Python 2.x 和 Python 3.x，请在运行来安装依赖项的命令中使用 Python 3.x。

### 正在验证安装 MXNet
<a name="ml-qualification-mxnet-validate"></a>

选择以下选项之一来验证 MXNet 安装。

#### 方式 1：通过 SSH 接入设备并运行脚本
<a name="ml-qualification-validate-mxnet-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>通过 SSH 接入设备。

1. <a name="ssh-validate-framework-install-run-scripts"></a>运行以下脚本，验证是否正确安装了依赖项。

   ```
   sudo python3.7 -c "import mxnet; print(mxnet.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>结果将输出版本号，而脚本应该顺利退出。

#### 方式 2：运行 IDT 依赖项测试
<a name="ml-qualification-validate-mxnet-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>运行框架的依赖项测试。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id mxnet_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>测试摘要会为 `mldependencies` 显示 `PASSED` 结果。

 

## 安装 TensorFlow 依赖关系
<a name="ml-qualification-tensorflow-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 资格认证测试具有以下依赖项：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，则必须创建从 Python 3.7 二进制文件到 Python 3.6 二进制文件的符号链接。这会将设备配置为满足 Amazon IoT Greengrass的 Python 要求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ TensorFlow 1.x。

### 正在安装 TensorFlow
<a name="ml-qualification-tensorflow-install"></a>

按照 TensorFlow 文档中的说明使用 [pip 或[从源](https://www.tensorflow.org/install/source)代码](https://www.tensorflow.org/install/pip)安装 TensorFlow 1.x。

**注意**  
<a name="run-python3-commands"></a>如果设备上同时安装了 Python 2.x 和 Python 3.x，请在运行来安装依赖项的命令中使用 Python 3.x。

### 正在验证安装 TensorFlow
<a name="ml-qualification-tensorflow-validate"></a>

选择以下选项之一来验证 TensorFlow 安装。

#### 方式 1：通过 SSH 接入设备并运行脚本
<a name="ml-qualification-validate-tensorflow-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>通过 SSH 接入设备。

1. 运行以下脚本，验证是否正确安装了依赖项。

   ```
   sudo python3.7 -c "import tensorflow; print(tensorflow.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>结果将输出版本号，而脚本应该顺利退出。

#### 方式 2：运行 IDT 依赖项测试
<a name="ml-qualification-validate-tensorflow-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>运行框架的依赖项测试。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id tensorflow_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>测试摘要会为 `mldependencies` 显示 `PASSED` 结果。

 

## 安装 Amazon SageMaker AI Neo 深度学习运行时 (DLR) 依赖项
<a name="ml-qualification-dlr-dependencies"></a>

<a name="test-framework-dependencies"></a>此框架的 IDT 资格认证测试具有以下依赖项：
+ <a name="ml-qualification-python-req"></a>Python 3.6 或 Python 3.7。
**注意**  <a name="python-symlink-command"></a>
如果您使用的是 Python 3.6，则必须创建从 Python 3.7 二进制文件到 Python 3.6 二进制文件的符号链接。这会将设备配置为满足 Amazon IoT Greengrass的 Python 要求。例如：  

  ```
  sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
  ```
+ SageMaker AI Neo DLR。
+ numpy。

安装 DLR 测试依赖项后，必须[编译模型](#ml-qualification-dlr-compile-model)。

### 安装 DLR
<a name="ml-qualification-dlr-install"></a>

按照 DLR 文档中的说明[安装 Neo DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html#building-on-linux)。

**注意**  
<a name="run-python3-commands"></a>如果设备上同时安装了 Python 2.x 和 Python 3.x，请在运行来安装依赖项的命令中使用 Python 3.x。

### 验证 DLR 安装
<a name="ml-qualification-dlr-validate"></a>

选择以下一种选项来验证 DLR 安装。

#### 方式 1：通过 SSH 接入设备并运行脚本
<a name="ml-qualification-validate-dlr-option-1"></a>

1. <a name="ssh-validate-framework-install-ssh"></a>通过 SSH 接入设备。

1. <a name="ssh-validate-framework-install-run-scripts"></a>运行以下脚本，验证是否正确安装了依赖项。

   ```
   sudo python3.7 -c "import dlr; print(dlr.__version__)"
   ```

   ```
   sudo python3.7 -c "import numpy; print(numpy.__version__)"
   ```

   <a name="ssh-passed-mldependencies"></a>结果将输出版本号，而脚本应该顺利退出。

#### 方式 2：运行 IDT 依赖项测试
<a name="ml-qualification-validate-dlr-option-2"></a>

1. <a name="idt-validate-framework-install-check-config"></a>确保已配置 `device.json` 用于执行 ML 资格认证。有关更多信息，请参阅 [为 ML 资格认证配置 device.json](set-config.md#device-json-ml-qualification)。

1. <a name="idt-validate-framework-install-run-test"></a>运行框架的依赖项测试。

   ```
   devicetester_[linux | mac | win_x86-64] run-suite --group-id mldependencies --test-id dlr_dependency_check
   ```

   <a name="idt-passed-mldependencies"></a>测试摘要会为 `mldependencies` 显示 `PASSED` 结果。

## 编译 DLR 模型
<a name="ml-qualification-dlr-compile-model"></a>

必须先编译 DLR 模型，然后才能将其用于 ML 资格认证测试。有关具体步骤，请选择以下一种选项：

### 选项 1：使用 Amazon SageMaker AI 编译模型
<a name="ml-qualification-compile-dlr-option-1"></a>

按照以下步骤使用 SageMaker AI 编译 IDT 提供的机器学习模型。此模型已使用 Ap MXNet ache 进行预训练。

1. 验证 A SageMaker I 是否支持您的设备类型。有关更多信息，请参阅 *Amazon AI AP SageMaker I 参考*中的[目标设备选项](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_OutputConfig.html#sagemaker-Type-OutputConfig-TargetDevice)。如果 SageMaker AI 目前不支持您的设备类型，请按照中的步骤操作[方式 2：使用 TVM 编译 DLR 模型](#ml-qualification-compile-dlr-option-2)。
**注意**  
使用 SageMaker AI 编译的模型运行 DLR 测试可能需要 4 或 5 分钟。在此过程中请勿停止 IDT。

1. <a name="compile-dlr-download-uncompiled-model"></a>下载包含未编译、预训练的 DLR MXNet 模型的 tarball 文件：
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.amazonaws.cn/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>解压缩该 tarball 文件。此命令会生成以下目录结构。  
![\[resnet18 目录中包含三个文件。\]](http://docs.amazonaws.cn/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. 将 `synset.txt` 移出 `resnet18` 目录。记下新位置。稍后，您需要将此文件复制到已编译的模型目录中。

1. 压缩 `resnet18` 目录的内容。

   ```
   tar cvfz model.tar.gz resnet18v1-symbol.json resnet18v1-0000.params
   ```

1. 将压缩文件上传到您的 Amazon S3 存储桶 Amazon Web Services 账户，然后按照[编译模型（控制台）](https://docs.amazonaws.cn/sagemaker/latest/dg/neo-job-compilation-console.html)中的步骤创建编译任务。

   1. 对于**输入配置**，请使用以下值：
      + 对于**数据输入配置**，请输入 `{"data": [1, 3, 224, 224]}`。
      + 对于**机器学习框架**，请选择 `MXNet`。

   1. 对于**输出配置**，请使用以下值：
      + 对于 **S3 输出位置**，请输入要存储已编译模型的 Amazon S3 存储桶或文件夹的路径。
      + 对于**目标设备**，请选择您的设备类型。

1. 从指定的输出位置下载已编译的模型，然后解压缩该文件。

1. 将 `synset.txt` 复制到已编译的模型目录中。

1. 将已编译的模型目录的名称更改为 `resnet18`。

   已编译的模型目录必须具有以下目录结构。  
![\[已编译的 resnet18 模型目录中包含四个文件。\]](http://docs.amazonaws.cn/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-sm.png)

### 方式 2：使用 TVM 编译 DLR 模型
<a name="ml-qualification-compile-dlr-option-2"></a>

按照以下步骤使用 TVM 编译 IDT 提供的 ML 模型。此模型已使用 Apache 进行预训练 MXNet，因此必须安装 MXNet 在编译模型的计算机或设备上。要安装 MXNet，请按照[ MXNet 文档](https://mxnet.apache.org/get_started/?platform=linux&language=python&processor=cpu&environ=pip&)中的说明进行操作。

**注意**  
我们建议您在目标设备上编译模型。此做法是可选的，但它可以帮助确保兼容性并减少潜在问题。

 

1. <a name="compile-dlr-download-uncompiled-model"></a>下载包含未编译、预训练的 DLR MXNet 模型的 tarball 文件：
   + [dlr-noncompiled-model-1.0.tar.gz](https://docs.amazonaws.cn/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>解压缩该 tarball 文件。此命令会生成以下目录结构。  
![\[resnet18 目录中包含三个文件。\]](http://docs.amazonaws.cn/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-uncompiled.png)

1. 按照 TVM 文档中的说明，[从源代码为平台构建和安装 TVM](https://docs.tvm.ai/install/from_source.html)。

1. 构建 TVM 后，为 resnet18 模型运行 TVM 编译。以下步骤根据 TVM 文档中的[编译深度学习模型快速入门教程](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#sphx-glr-tutorials-get-started-relay-quick-start-py)的内容设计而成。

   1. 从克隆的 TVM 存储库中打开 `relay_quick_start.py` 文件。

   1. 更新[在 Relay 中定义神经网络](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#define-neural-network-in-relay)的代码。可以使用以下选项之一：
      + 选项 1：使用 `mxnet.gluon.model_zoo.vision.get_model` 获取 Relay 模块和参数：

        ```
        from mxnet.gluon.model_zoo.vision import get_model
        block = get_model('resnet18_v1', pretrained=True)
        mod, params = relay.frontend.from_mxnet(block, {"data": data_shape})
        ```
      + 选项 2：将您在步骤 1 中下载的未编译模型中的以下文件复制到 `relay_quick_start.py` 文件所在的目录。这些文件中包含了 Relay 模块和参数。
        + `resnet18v1-symbol.json`
        + `resnet18v1-0000.params`

   1. 将[保存和加载已编译模块](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#save-and-load-compiled-module)的代码更新为以下代码。

      ```
      from tvm.contrib import util
      path_lib = "deploy_lib.so"
      #  Export the model library based on your device architecture
      lib.export_library("deploy_lib.so", cc="aarch64-linux-gnu-g++")
      with open("deploy_graph.json", "w") as fo:
          fo.write(graph)
      with open("deploy_param.params", "wb") as fo:
          fo.write(relay.save_param_dict(params))
      ```

   1. 构建模型：

      ```
      python3 tutorials/relay_quick_start.py --build-dir ./model
      ```

      此命令会生成以下文件。
      + `deploy_graph.json`
      + `deploy_lib.so`
      + `deploy_param.params`

1. 将生成的模型文件复制到名为 `resnet18` 的目录中。这是已编译的模型目录。

1. 将已编译的模型目录复制到主机计算机。然后，将您在步骤 1 中下载的未编译模型中的 `synset.txt` 复制到已编译的模型目录中。

   已编译的模型目录必须具有以下目录结构。  
![\[已编译的 resnet18 模型目录中包含四个文件。\]](http://docs.amazonaws.cn/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-tvm.png)

接下来，[配置您的 Amazon 凭据和`device.json`文件](set-config.md)。