

终止支持通知：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)。

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

# 配置设备以运行 IDT 测试
<a name="device-config-setup"></a>

要配置您的设备，您必须安装 AWS IoT Greengrass 依赖项、配置 AWS IoT Greengrass Core 软件、配置主机以访问您的设备，并在设备上配置用户权限。

## 验证与被测设备的 AWS IoT Greengrass 依赖关系
<a name="install-gg-dependencies"></a>

在 IDT f AWS IoT Greengrass or 测试您的设备之前，请确保您已[按照 AWS IoT Greengrass入门](https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-gs.html)中所述设置设备。有关支持的平台的信息，请参阅[支持的平台](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html#gg-platforms)。

## 配置 AWS IoT Greengrass 软件
<a name="config-gg"></a>

IDT 用于 AWS IoT Greengrass 测试您的设备是否与特定版本的 AWS IoT Greengrass兼容。IDT 提供了两种 AWS IoT Greengrass 在您的设备上进行测试的选项：
+ 下载并使用某一版本的 [AWS IoT Greengrass 核心软件](what-is-gg.md#gg-core-download-tab)。IDT 为您安装此软件。
+ 使用设备上已安装的 AWS IoT Greengrass Core 软件版本。

**注意**  
的 AWS IoT Greengrass 每个版本都有相应的 IDT 版本。您必须下载与 AWS IoT Greengrass 您正在使用的版本相对应的 IDT 版本。

以下各节介绍了这些选项。您只需要使用其中一个选项。

### 选项 1：下载 AWS IoT Greengrass 核心软件并配置 AWS IoT 设备测试器以使用它
<a name="download-gg"></a>

您可以从 AWS IoT Greengrass 核心软件下载页面下载[AWS IoT Greengrass 核心软件](what-is-gg.md#gg-core-download-tab)。

1. 找到正确的架构和 Linux 发行版，然后选择 **Download (下载)**。

1. 将该 tar.gz 文件复制到 `<device-tester-extract-location>/products/greengrass/ggc`。

**注意**  
请勿更改 AWS IoT Greengrass tar.gz 文件的名称。对于相同的操作系统和架构，请勿在此目录中放置多个文件。例如，在该目录中同时放置 `greengrass-linux-armv7l-1.7.1.tar.gz` 和 `greengrass-linux-armv7l-1.8.1.tar.gz` 文件将导致测试失败。

### 选项 2：将现有安装的 AWS IoT Greengrass 与 AWS IoT 设备测试器一起使用
<a name="existing-gg"></a>

通过向`<device-tester-extract-location>/configs`文件夹中的`device.json`文件添加`greengrassLocation`属性，配置 IDT 以测试设备上安装的 C AWS IoT Greengrass ore 软件。例如：

```
"greengrassLocation" : "<path-to-greengrass-on-device>"
```

有关 `device.json` 文件的更多信息，请参阅[配置 device.json](set-config.md#device-config)。

在 Linux 设备上， AWS IoT Greengrass 核心软件的默认位置是`/greengrass`。

**注意**  
您的设备应该安装了尚未启动的 AWS IoT Greengrass Core 软件。  
确保您已在设备上添加 `ggc_user` 用户和 `ggc_group`。有关更多信息，请参阅 [AWS IoT Greengrass的环境设置](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html)。

## 配置主机以访问被测设备
<a name="configure-host"></a>

IDT 在主机上运行，并且必须能够使用 SSH 连接到您的设备。有两个选项允许 IDT 获得对被测设备的 SSH 访问权限：

1. 按照此处的说明创建一个 SSH 密钥对并授权您的密钥，以便登录被测设备而无需指定密码。

1. 在 `device.json` 文件中为每个设备提供用户名和密码。有关更多信息，请参阅 [配置 device.json](set-config.md#device-config)。

您可以使用任何 SSL 实现创建 SSH 密钥。以下说明向你展示了如何使用 [SSH-KEYGEN](https://www.ssh.com/ssh/keygen/) 或 [Pu TTYgen](https://www.ssh.com/ssh/putty/windows/puttygen)（适用于 Windows）。如果您使用的是另一个 SSL 实现，请参阅该实现的文档。

IDT 使用 SSH 密钥对被测设备进行身份验证。

**使用 SSH-KEYGEN 创建 SSH 密钥**

1. 创建 SSH 密钥。

   您可以使用 Open SSH **ssh-keygen** 命令创建 SSH 密钥对。如果您的主机上已有一个 SSH 密钥对，则最佳做法是专门为 IDT 创建一个 SSH 密钥对。这样，完成测试后，如果没有输入密码，主机将无法再连接到设备。它还使您能够仅向需要访问远程设备的人员授予访问权限。
**注意**  
Windows 没有安装 SSH 客户端。有关在 Windows 上安装 SSH 客户端的信息，请参阅[下载 SSH 客户端软件](https://www.ssh.com/ssh/#sec-Download-client-software)。

   **ssh-keygen** 命令会提示您输入要存储密钥对的名称和路径。默认情况下，密钥对文件的名称为 `id_rsa`（私有密钥）和 `id_rsa.pub`（公有密钥）。在 macOS 和 Linux 上，这些文件的默认位置为 `~/.ssh/`。在 Windows 上，默认位置为 `C:\Users\<user-name>\.ssh`。

   根据提示，输入密钥短语来保护您的 SSH 密钥。有关更多信息，请参阅[生成新的 SSH 密钥](https://www.ssh.com/ssh/keygen/)。

1. 向被测设备添加经过授权的 SSH 密钥。

   IDT 必须使用您的 SSH 私有密钥登录被测设备。要授权 SSH 私有密钥以登录被测设备，请在主机上使用 **ssh-copy-id** 命令。此命令会将您的公有密钥添加到被测设备上的 `~/.ssh/authorized_keys` 文件中。例如：

   **\$1 ssh-copy-id *<remote-ssh-user>*@*<remote-device-ip>***

   哪里*remote-ssh-user*是用于登录被测设备的用户名，以及*remote-device-ip*用于运行测试的被测设备的 IP 地址。例如：

   **ssh-copy-id pi@192.168.1.5**

   系统提示时，输入在 **ssh-copy-id** 命令中指定的用户名所对应的密码。

   **ssh-copy-id** 公有密钥的名称为 `id_rsa.pub` 并且存储在默认位置（macOS 和 Linux 上的位置为 `~/.ssh/`，Windows 上的位置为 `C:\Users\<user-name>\.ssh`）。如果公有密钥采用其他名称或存储在其他位置，则必须使用 **-i** 选项与 **ssh-copy-id** 指定 SSH 公有密钥的完全限定路径（例如，**ssh-copy-id -i \$1/my/path/myKey.pub**）。有关创建 SSH 密钥和复制公有密钥的更多信息，请参阅 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

**使用 Pu 创建 SSH 密钥TTYgen （仅限 Windows）**

1. 确保您在被测设备上安装了 OpenSSH 服务器和客户端。有关更多信息，请参阅 [OpenSSH](https://www.openssh.com/)。

1. 在被测设备TTYgen上安装 [Pu](https://www.puttygen.com/)。

1. 打开 Pu TTYgen。

1. 选择 **Generate (生成)**，然后在框中移动鼠标光标以生成私有密钥。

1. 从 **Conversions (转换)** 菜单中，选择 **Export OpenSSH key (导出 OpenSSH 密钥)**，然后使用 `.pem` 文件扩展名保存私有密钥 。

1. 将公有密钥添加到被测设备上的 `/home/<user>/.ssh/authorized_keys` 文件中。

   1. 从 Pu TTYgen 窗口复制公钥文本。

   1. 使用 PuTTY 在被测设备上创建会话。

      1. 从命令提示符或 Windows Powershell 窗口中，运行以下命令：

         **C:/*<path-to-putty>*/putty.exe -ssh *<user>*@*<dut-ip-address>***

      1. 在系统提示时，输入您的设备密码。

      1. 使用 vi 或其他文本编辑器将公有密钥附加到被测设备上的 `/home/<user>/.ssh/authorized_keys` 文件中。

1. 使用您的用户名、IP 地址以及您刚刚为每个被测设备保存在主机上的私钥文件的路径更新 `device.json` 文件。有关更多信息，请参阅 [配置 device.json](set-config.md#device-config)。确保提供私有密钥的完整路径和文件名，并使用正斜杠（“/”）。例如，对于 Windows 路径 `C:\DT\privatekey.pem`，请在 `device.json` 文件中使用 `C:/DT/privatekey.pem`。

## 在您的设备上配置用户权限
<a name="root-access"></a>

IDT 将对被测设备中的各种目录和文件执行操作。其中一些操作需要升级权限（使用 **sudo**）。要自动执行这些操作，IDT fo AWS IoT Greengrass r 必须能够在不被提示输入密码的情况下使用 sudo 运行命令。

请在被测设备上执行以下步骤，以允许在不提示输入密码的情况下进行 sudo 访问。

**注意**  
`username` 是指 IDT 用来访问被测设备的 SSH 用户。

**将用户添加到 sudo 组**

1. 在被测设备上，运行 `sudo usermod -aG sudo <username>`。

1. 注销，然后重新登录，以使变更生效。

1. 要验证您的用户名是否已成功添加，请运行 **sudo echo test**。如果系统未提示您输入密码，则说明已正确配置您的用户。

1. 打开 `/etc/sudoers` 文件，并将以下行添加到文件末尾：

   `<ssh-username> ALL=(ALL) NOPASSWD: ALL`

## 配置设备以测试可选功能
<a name="optional-feature-config"></a>

以下主题介绍如何配置设备以针对可选功能运行 IDT 测试。请仅在要测试这些功能时才执行以下配置步骤。否则，请继续查看 [配置 IDT 设置以运行 AWS IoT Greengrass 资格套件](set-config.md)。

**Topics**
+ [验证与被测设备的 AWS IoT Greengrass 依赖关系](#install-gg-dependencies)
+ [配置 AWS IoT Greengrass 软件](#config-gg)
+ [配置主机以访问被测设备](#configure-host)
+ [在您的设备上配置用户权限](#root-access)
+ [配置设备以测试可选功能](#optional-feature-config)
+ [可选：为 IDT 配置你的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)
+ [可选：配置设备进行 ML 资格认证](idt-ml-qualification.md)

# 可选：为 IDT 配置你的 Docker 容器 AWS IoT Greengrass
<a name="docker-config-setup"></a>

AWS IoT Greengrass 提供了 Docker 镜像和 Dockerfile，可以更轻松地在 Docker 容器中运行 AWS IoT Greengrass 核心软件。设置 AWS IoT Greengrass 容器后，您可以运行 IDT 测试。目前，只有 x86\$164 Docker 架构支持运行适用于 AWS IoT Greengrass的 IDT。

此功能需要 IDT v2.3.0 或更高版本。

设置 Docker 容器以运行 IDT 测试的过程取决于您使用的是提供的 Docker 镜像还是使用的 Dockerfile。 AWS IoT Greengrass
+ [使用 Docker 映像](#docker-config-setup-docker-image)。Docker 镜像安装了 AWS IoT Greengrass 核心软件和依赖项。
+ [使用 Dockerfile](#docker-config-setup-dockerfile)。Dockerfile 包含可用于构建自定义 AWS IoT Greengrass 容器镜像的源代码。可对镜像进行修改以在不同的平台架构上运行或减少镜像的大小。
**注意**  
AWS IoT Greengrass 不为 AWS IoT Greengrass 核心软件版本 1.11.1 提供 Dockerfile 或 Docker 镜像。要对您自己的自定义容器映像运行 IDT 测试，您的映像必须包含在提供的 Dockerfile 中定义的依赖关系。 AWS IoT Greengrass

在 Docker 容器 AWS IoT Greengrass 中运行时，以下功能不可用：<a name="docker-image-unsupported-features"></a>
+ 在 **Greengrass 容器模式**下运行的[连接器](connectors.md)。要在 Docker 容器中运行连接器，该连接器必须在**无容器**模式下运行。要查找支持**无容器**模式的连接器，请参阅[AWS提供的 Greengrass 连接器](connectors-list.md)。其中一些连接器具有隔离模式参数，您必须将此参数设为**无容器**。
+ [本地设备和卷资源](access-local-resources.md)。在 Docker 容器中运行的用户定义 Lambda 函数必须直接访问核心上的设备和卷。

## 配置由提供的 Docker 镜像 AWS IoT Greengrass
<a name="docker-config-setup-docker-image"></a>

按照以下步骤配置 AWS IoT Greengrass Docker 镜像以运行 IDT 测试。

**先决条件**

在开始本教程之前，必须执行以下操作。<a name="docker-image-prereq-list"></a>
+ 您必须根据您选择的 AWS Command Line Interface (AWS CLI) 版本在主机上安装以下软件和版本。

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) 版本 18.09 或更高版本。早期版本也可能有效，但我们建议使用 18.09 或更高版本。
  + AWS CLI 版本 2.0.0 或更高版本。
    + 要安装 AWS CLI 版本 2，请参阅[安装 AWS CLI 版本 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
    + 要配置 AWS CLI，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
**注意**  
要在 Windows 计算机上升级到更高 AWS CLI 版本 2，必须重复 [MSI 安装](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html)过程。

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) 版本 18.09 或更高版本。早期版本也可能有效，但我们建议使用 18.09 或更高版本。
  + [Python](https://www.python.org/downloads/) 版本 3.6 或更高版本。
  + [pip](https://pip.pypa.io/en/stable/installing) 版本 18.1 或更高版本。
  + AWS CLI 版本 1.17.10 或更高版本
    + 要安装 AWS CLI 版本 1，请参阅[安装 AWS CLI 版本 1](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html)。
    + 要配置 AWS CLI，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
    + 要升级到版本 1 的最新 AWS CLI 版本，请运行以下命令。

      ```
      pip install awscli --upgrade --user
      ```
**注意**  
如果你在 Windows 上使用 [MSI 安装](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) AWS CLI 版本 1，请注意以下几点：  
如果 AWS CLI 版本 1 安装无法安装 botocore，请尝试使用 Pyth [on 和 pip](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) 安装。
要升级到更高 AWS CLI 版本 1，必须重复 MSI 安装过程。

------
+ 要访问 Amazon Elastic Container Registry (Amazon ECR) 资源，您必须授予以下权限。
  + Amazon ECR 要求用户通过 AWS Identity and Access Management (IAM) 策略授予`ecr:GetAuthorizationToken`权限，然后才能向注册表进行身份验证以及从 Amazon ECR 存储库推送或拉取映像。有关更多信息，请参阅 *Amazon Elastic Container Registry 用户指南*中的 [Amazon ECR 存储库策略示例](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)和[访问一个 Amazon ECR 存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket)。

 

1. 下载 Docker 映像并配置容器。您可以从 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 或 [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR) 下载预构建的映像并在 Windows、macOS 和 Linux (x86\$164) 平台上运行它。

   要从 Amazon ECR 下载 Docker 映像，请完成 [第 1 步：从 Amazon ECR 获取 AWS IoT Greengrass 容器镜像](run-gg-in-docker-container.md#docker-pull-image) 中的所有步骤。然后，返回到本主题以继续配置。

1. <a name="docker-linux-non-root"></a>仅限 Linux 用户：请确保运行 IDT 的用户有权运行 Docker 命令。有关更多信息，请参阅 Docker 文档中的[以非根用户身份管理 Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。

1. <a name="docker-run-gg-container"></a>要运行 AWS IoT Greengrass 容器，请使用适用于您的操作系统的命令：

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + *<host-path-to-kernel-config-file>*替换为主机上内核配置文件的路径以及*<container-path>*容器中装入卷的路径。

     主机上的内核配置文件通常位于 `/proc/config.gz` 或 `/boot/config-<kernel-release-date>` 中。你可以跑`uname -r`去找*<kernel-release-date>*值。

     **示例：**从 `/boot/config-<kernel-release-date>` 装载 Config 文件

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **示例：**从 `proc/config.gz` 装载 Config 文件

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令。

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

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

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**重要**  
使用 IDT 进行测试时，请勿包含用于运行图像以供一般 AWS IoT Greengrass 用途的`--entrypoint /greengrass-entrypoint.sh \`参数。

1. <a name="docker-config-next-steps"></a>下一步：[配置您的 AWS 凭据和`device.json`文件](set-config.md)。

## 配置由提供的 dockerfile AWS IoT Greengrass
<a name="docker-config-setup-dockerfile"></a>

按照以下步骤配置从 Dockerf AWS IoT Greengrass ile 构建的 Docker 镜像以运行 IDT 测试。

1. 从 [AWS IoT Greengrass Docker 软件](what-is-gg.md#gg-docker-download)，将 Dockerfile 包下载到您的主机并将其解压缩。

1. 打开 `README.md`。接下来的三个步骤将参考此文件中的部分。

1. 请确保您满足**先决条件**部分中的要求。

1. 仅限 Linux 用户：完成**启用符号链接和硬链接保护**以及**启用 IPv4 网络转发步骤**。

1. 要构建 Docker 映像，请完成**步骤 1。构建 AWS IoT Greengrass Docker 镜像**。然后，返回到本主题以继续配置。

1. <a name="docker-run-gg-container"></a>要运行 AWS IoT Greengrass 容器，请使用适用于您的操作系统的命令：

------
#### [ Linux ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   -v <host-path-to-kernel-config-file>:<container-path> \
   <image-repository>:<tag>
   ```
   + *<host-path-to-kernel-config-file>*替换为主机上内核配置文件的路径以及*<container-path>*容器中装入卷的路径。

     主机上的内核配置文件通常位于 `/proc/config.gz` 或 `/boot/config-<kernel-release-date>` 中。你可以跑`uname -r`去找*<kernel-release-date>*值。

     **示例：**从 `/boot/config-<kernel-release-date>` 装载 Config 文件

     ```
     -v /boot/config-4.15.0-74-generic:/boot/config-4.15.0-74-generic \
     ```

     **示例：**从 `proc/config.gz` 装载 Config 文件

     ```
     -v /proc/config.gz:/proc/config.gz \
     ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令。

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
#### [ macOS ]

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

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

   ```
   docker run --rm --init -it -d --name aws-iot-greengrass \
   -p 8883:8883 \
   <image-repository>:<tag>
   ```
   + 将*<image-repository>*：*<tag>*在命令中替换为存储库的名称和目标图像的标签。

     **示例：**指向最新版本的 AWS IoT Greengrass Core 软件

     ```
     216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
     ```

     要获取 AWS IoT Greengrass Docker 镜像列表，请运行以下命令：

     ```
     aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
     ```

------
**重要**  
使用 IDT 进行测试时，请勿包含用于运行图像以供一般 AWS IoT Greengrass 用途的`--entrypoint /greengrass-entrypoint.sh \`参数。

1. <a name="docker-config-next-steps"></a>下一步：[配置您的 AWS 凭据和`device.json`文件](set-config.md)。

## 对适用于 IDT 的 Docker 容器设置进行故障排除 AWS IoT Greengrass
<a name="docker-config-setup-troubleshooting"></a>

使用以下信息来帮助解决运行适用于 IDT 的 Docker 容器进行测试时遇到的问题。 AWS IoT Greengrass 

### 警告：加载配置时出错 <user>//.docker file:/home/user/.docker/config.json - stat /home /config.json：权限被拒绝
<a name="docker-config-permissions-linux"></a>

如果在 Linux 上运行 `docker` 命令时出现此错误，请运行以下命令。将以下命令替换*<user>*为运行 IDT 的用户。

```
sudo chown <user>:<user> /home/<user>/.docker -R
sudo chmod g+rwx /home/<user>/.docker -R
```

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

IDT fo AWS 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 二进制文件的符号链接。这会将设备配置为满足 AWS 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 二进制文件的符号链接。这会将设备配置为满足 AWS 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 二进制文件的符号链接。这会将设备配置为满足 AWS 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.aws.amazon.com/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.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

1. <a name="compile-dlr-decompress-uncompiled-model"></a>解压缩该 tarball 文件。此命令会生成以下目录结构。  
![\[resnet18 目录中包含三个文件。\]](http://docs.aws.amazon.com/zh_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 存储桶 AWS 账户，然后按照[编译模型（控制台）](https://docs.aws.amazon.com/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.aws.amazon.com/zh_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.aws.amazon.com/greengrass/latest/developerguide/download-dlr-noncompiled-model-1.0.html)

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

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