

支援終止通知：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 for AWS IoT Greengrass 可以測試您的裝置之前，請確定您已如 [入門 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 for 會 AWS IoT Greengrass 測試您的裝置與特定 版本的相容性 AWS IoT Greengrass。IDT 提供兩種 AWS IoT Greengrass 在裝置上進行測試的選項：
+ 下載並使用某個版本的 [AWS IoT Greengrass Core 軟體](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 Core 軟體並設定 AWS IoT Device Tester 使用它
<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 Device Tester 使用 的現有安裝
<a name="existing-gg"></a>

設定 IDT 將 `greengrassLocation` 屬性新增至 `<device-tester-extract-location>/configs` 資料夾中的 `device.json` 檔案，以測試安裝在裝置上的 AWS IoT Greengrass Core 軟體。例如：

```
"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/) 或 [ PuTTYgen](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-copy-id** 命令，授權您的 SSH 私有金鑰登入待測裝置。此命令會將您的公有金鑰新增至待測裝置上的 `~/.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`)。如果您給公有金鑰不同的名稱，或將其存放在不同的位置中，則必須在 **ssh-copy-id** 中使用 **-i** 選項，以指定 SSH 公有金鑰的完整路徑 (例如，**ssh-copy-id -i \$1/my/path/myKey.pub**)。如需有關建立 SSH 金鑰和複製公有金鑰的詳細資訊，請參閱 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

**使用 PuTTYgen 建立 SSH 金鑰 (僅限 Windows)**

1. 確定您的待測裝置上已安裝 OpenSSH 伺服器和用戶端。如需詳細資訊，請參閱 [OpenSSH](https://www.openssh.com/)。

1. 在您的待測裝置上安裝 [PuTTYgen](https://www.puttygen.com/)。

1. 開啟 PuTTYgen。

1. 選擇 **Generate (產生)**，並將滑鼠游標移到方塊內以產生私有金鑰。

1. 從 **Conversions (轉換)** 功能表中，選擇 **Export OpenSSH key (匯出 OpenSSH 金鑰)**，然後以 `.pem` 副檔名儲存私有金鑰。

1. 將公有金鑰新增至待測裝置上的 `/home/<user>/.ssh/authorized_keys` 檔案。

   1. 從 PuTTYgen 視窗複製公有金鑰文字。

   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 for AWS IoT Greengrass 必須能夠使用 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 for 的 Docker 容器 AWS IoT Greengrass](docker-config-setup.md)
+ [選用：設定您的裝置以取得 ML 資格](idt-ml-qualification.md)

# 選用：設定 IDT for 的 Docker 容器 AWS IoT Greengrass
<a name="docker-config-setup"></a>

AWS IoT Greengrass 提供 Docker 映像和 Dockerfile，可讓您更輕鬆地在 Docker 容器中執行 AWS IoT Greengrass Core 軟體。設定 AWS IoT Greengrass 容器之後，您可以執行 IDT 測試。目前，僅支援 x86\$164 Docker 架構來執行 IDT for AWS IoT Greengrass。

此功能需要 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。

當您 AWS IoT Greengrass 在 Docker 容器中執行 時，無法使用下列功能：<a name="docker-image-unsupported-features"></a>
+ 在 **Greengrass 容器**模式下執行[的連接器](connectors.md)。若要在 Docker 容器中執行連接器，連接器必須以 **No container (無容器)** 模式執行。若要尋找支援 **No container (無容器)** 模式的連接器，請參閱 [AWS提供的 Greengrass 連接器](connectors-list.md)。其中一些連接器具有隔離模式參數，您必須設定為 **No container (無容器)**。
+ [本機裝置和磁碟區資源](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 版或更新版本。
    + 若要安裝第 2 AWS CLI 版，請參閱[安裝第 2 AWS CLI 版](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 版或更新版本
    + 若要安裝第 1 AWS CLI 版，請參閱[安裝第 1 AWS CLI 版](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 上使用 AWS CLI 版本 1 的 [MSI 安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows)，請注意下列事項：  
如果第 1 AWS CLI 版安裝無法安裝 botocore，請嘗試使用 [Python 和 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>` 裝載組態檔

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

     **範例：**若要從 `proc/config.gz` 裝載組態檔

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

請依照下列步驟設定從 Dockerfile 建置的 AWS IoT Greengrass Docker 映像檔，以執行 IDT 測試。

1. 從 [AWS IoT Greengrass Docker 軟體](what-is-gg.md#gg-docker-download) 中，將 Dockerfile 套件下載到您的主機電腦，並將其解壓縮。

1. 打開 `README.md`. 接下來的三個步驟，請參閱此檔案中的章節。

1. 請確定您符合**先決條件**一節中的需求。

1. 僅限 Linux 使用者：完成**啟用 Symlink 和 Hardlink 保護**和**啟用 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>` 裝載組態檔

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

     **範例：**若要從 `proc/config.gz` 裝載組態檔

     ```
     -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 for 的 Docker 容器設定進行故障診斷 AWS IoT Greengrass
<a name="docker-config-setup-troubleshooting"></a>

使用下列資訊來協助疑難排解執行 Docker 容器進行 IDT AWS IoT Greengrass 測試的問題。

### 警告：載入 config file:/home/user/.docker/config.json - stat /home/<user>/.docker/config.json 時發生錯誤：權限遭拒
<a name="docker-config-permissions-linux"></a>

如果在 Linux 上執行 `docker` 命令時發生錯誤，請執行下列命令。使用執行 IDT 的使用者取代下列命令中的 *<user>*。

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

# 選用：設定您的裝置以取得 ML 資格
<a name="idt-ml-qualification"></a>

IDT for AWS IoT Greengrass 提供機器學習 (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) （在 **Greengrass 容器**模式下） 執行的 Lambda 函數，`/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>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](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/pip) 或[從來源](https://www.tensorflow.org/install/source)安裝 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>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](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 Deep Learning Runtime (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>確定已針對 ML 資格設定 `device.json`。如需詳細資訊，請參閱[設定 device.json 以取得 ML 資格](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 提供的 ML 模型。此模式已使用 Apache MXNET 預先訓練。

1. 確認 SageMaker AI 支援您的裝置類型。如需詳細資訊，請參閱 *Amazon SageMaker AI API 參考*中的[目標裝置選項](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_tw/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. 對於 **Input configuration (輸入組態)**，請使用下列值：
      + 對於 **Data input configuration (資料輸入組態)**，請輸入 `{"data": [1, 3, 224, 224]}`。
      + 對於 **Machine learning framework (機器學習框架)**，請選擇 `MXNet`。

   1. 對於 **Output configuration (輸出組態)**，請使用下列值：
      + 針對 **S3 輸出位置**，輸入您要存放已編譯模型之 Amazon S3 儲存貯體或資料夾的路徑。
      + 對於 **Target device (目標裝置)**，選擇您的裝置類型。

1. 從您指定的輸出位置下載已編譯的模型，然後解壓縮檔案。

1. 將 `synset.txt` 複製到已編譯的模型目錄中。

1. 將已編譯模型目錄的名稱變更為 `resnet18`。

   您編譯的模型目錄必須具有以下目錄結構。  
![\[resnet18 編譯的模型目錄包含四個檔案。\]](http://docs.aws.amazon.com/zh_tw/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_tw/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. 更新[在轉送中定義神經網路](https://tvm.apache.org/docs/tutorial/relay_quick_start.html#define-neural-network-in-relay)的程式碼。您可以使用下列其中一個選項：
      + 選項 1：使用 `mxnet.gluon.model_zoo.vision.get_model` 取得轉送模組和參數：

        ```
        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` 檔案相同的目錄中。這些檔案包含轉送模組和參數。
        + `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_tw/greengrass/v1/developerguide/images/idt/idt-ml-qualification-dlr-compiled-tvm.png)

接著，[設定您的 AWS 登入資料和`device.json`檔案](set-config.md)。