可选:配置设备进行 ML 资格认证 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1 维护策略。在此日期之后,将 AWS IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 AWS IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

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

可选:配置设备进行 ML 资格认证

适用于 AWS IoT Greengrass 的 IDT 提供机器学习 (ML) 资格认证测试,以验证设备是否可以使用经过云训练的模型在本地执行 ML 推理。

要运行 ML 资格认证测试,必须先按照配置设备以运行 IDT 测试中的说明配置设备。然后,按照本主题中的步骤安装要运行的 ML 框架的依赖项。

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

安装 ML 框架依赖项

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

注意

如果您正在测试使用容器化运行的 Lambda 函数(在 Greengrass 容器模式下),则不支持为 /usr/local/lib/python3.x 下的 Python 库创建符号链接。为避免错误,必须在正确的目录下安装依赖项。

按照以下步骤安装目标框架的依赖项:

 

安装 Apache MXNet 依赖项

此框架的 IDT 资格认证测试具有以下依赖项:

  • Python 3.6 或 Python 3.7。

    注意

    如果您使用的是 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

按照 MXNet 文档中的说明安装 MXNet

注意

如果设备上同时安装了 Python 2.x 和 Python 3.x,请在运行来安装依赖项的命令中使用 Python 3.x。

验证 MXNet 安装

选择以下一种方式来验证 MXNet 安装。

方式 1:通过 SSH 接入设备并运行脚本

  1. 通过 SSH 接入设备。

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

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

    结果将输出版本号,而脚本应该顺利退出。

方式 2:运行 IDT 依赖项测试

  1. 确保已配置 device.json 用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json

  2. 运行框架的依赖项测试。

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

    测试摘要会为 mldependencies 显示 PASSED 结果。

 

安装 TensorFlow 依赖项

此框架的 IDT 资格认证测试具有以下依赖项:

  • Python 3.6 或 Python 3.7。

    注意

    如果您使用的是 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

按照 TensorFlow 文档中的说明,使用 pip从源代码安装 TensorFlow 1.x。

注意

如果设备上同时安装了 Python 2.x 和 Python 3.x,请在运行来安装依赖项的命令中使用 Python 3.x。

验证 TensorFlow 安装

选择以下一种方式来验证 TensorFlow 安装。

方式 1:通过 SSH 接入设备并运行脚本

  1. 通过 SSH 接入设备。

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

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

    结果将输出版本号,而脚本应该顺利退出。

方式 2:运行 IDT 依赖项测试

  1. 确保已配置 device.json 用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json

  2. 运行框架的依赖项测试。

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

    测试摘要会为 mldependencies 显示 PASSED 结果。

 

安装 Amazon SageMaker Neo 深度学习运行时 (DLR) 依赖项

此框架的 IDT 资格认证测试具有以下依赖项:

  • Python 3.6 或 Python 3.7。

    注意

    如果您使用的是 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 Neo DLR。

  • numpy。

安装 DLR 测试依赖项后,必须编译模型

安装 DLR

按照 DLR 文档中的说明安装 Neo DLR

注意

如果设备上同时安装了 Python 2.x 和 Python 3.x,请在运行来安装依赖项的命令中使用 Python 3.x。

验证 DLR 安装

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

方式 1:通过 SSH 接入设备并运行脚本

  1. 通过 SSH 接入设备。

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

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

    结果将输出版本号,而脚本应该顺利退出。

方式 2:运行 IDT 依赖项测试

  1. 确保已配置 device.json 用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json

  2. 运行框架的依赖项测试。

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

    测试摘要会为 mldependencies 显示 PASSED 结果。

编译 DLR 模型

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

方式 1:使用 Amazon SageMaker 编译模型

按照以下步骤使用 SageMaker 编译 IDT 提供的 ML 模型。该模型已预先使用 Apache MXNet 进行训练。

  1. 确认 SageMaker 是否支持您的设备类型。有关更多信息,请参阅 Amazon SageMaker API 参考中的目标设备选项。如果当前 SageMaker 不支持您的设备类型,请按 方式 2:使用 TVM 编译 DLR 模型 中的步骤操作。

    注意

    使用经 SageMaker 编译的模型运行 DLR 测试可能需要 4 到 5 分钟。在此过程中请勿停止 IDT。

  2. 下载包含 DLR 的未编译、预训练 MXNet 模型的 tarball 文件:

  3. 解压缩该 tarball 文件。此命令会生成以下目录结构。

    resnet18 目录中包含三个文件。
  4. synset.txt 移出 resnet18 目录。记下新位置。稍后,您需要将此文件复制到已编译的模型目录中。

  5. 压缩 resnet18 目录的内容。

    tar cvfz model.tar.gz resnet18v1-symbol.json resnet18v1-0000.params
  6. 将压缩文件上传到 AWS 账户 中的 Amazon S3 存储桶中,然后按照编译模型(控制台)中的步骤创建编译作业。

    1. 对于输入配置,请使用以下值:

      • 对于数据输入配置,请输入 {"data": [1, 3, 224, 224]}

      • 对于机器学习框架,请选择 MXNet

    2. 对于输出配置,请使用以下值:

      • 对于 S3 输出位置,请输入要存储已编译模型的 Amazon S3 存储桶或文件夹的路径。

      • 对于目标设备,请选择您的设备类型。

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

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

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

    已编译的模型目录必须具有以下目录结构。

    已编译的 resnet18 模型目录中包含四个文件。

方式 2:使用 TVM 编译 DLR 模型

按照以下步骤使用 TVM 编译 IDT 提供的 ML 模型。此模型已预先使用 Apache MXNet 进行训练,因此您必须在编译模型的计算机或设备上安装 MXNet。要安装 MXNet,请按照 MXNet 文档中的说明进行操作。

注意

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

 

  1. 下载包含 DLR 的未编译、预训练 MXNet 模型的 tarball 文件:

  2. 解压缩该 tarball 文件。此命令会生成以下目录结构。

    resnet18 目录中包含三个文件。
  3. 按照 TVM 文档中的说明,从源代码为平台构建和安装 TVM

  4. 构建 TVM 后,为 resnet18 模型运行 TVM 编译。以下步骤根据 TVM 文档中的编译深度学习模型快速入门教程的内容设计而成。

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

    2. 更新在 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

    3. 保存和加载已编译模块的代码更新为以下代码。

      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))
    4. 构建模型:

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

      此命令会生成以下文件。

      • deploy_graph.json

      • deploy_lib.so

      • deploy_param.params

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

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

    已编译的模型目录必须具有以下目录结构。

    已编译的 resnet18 模型目录中包含四个文件。

接下来,配置 AWS 凭证和 device.json 文件