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.6path-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 接入设备并运行脚本
-
通过 SSH 接入设备。
-
运行以下脚本,验证是否正确安装了依赖项。
sudo python3.7 -c "import mxnet; print(mxnet.__version__)"
sudo python3.7 -c "import numpy; print(numpy.__version__)"
结果将输出版本号,而脚本应该顺利退出。
方式 2:运行 IDT 依赖项测试
-
确保已配置
device.json
用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json。 -
运行框架的依赖项测试。
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.6path-to-python-3.7
/python3.7 -
TensorFlow 1.x。
安装 TensorFlow
按照 TensorFlow 文档中的说明,使用 pip
注意
如果设备上同时安装了 Python 2.x 和 Python 3.x,请在运行来安装依赖项的命令中使用 Python 3.x。
验证 TensorFlow 安装
选择以下一种方式来验证 TensorFlow 安装。
方式 1:通过 SSH 接入设备并运行脚本
-
通过 SSH 接入设备。
-
运行以下脚本,验证是否正确安装了依赖项。
sudo python3.7 -c "import tensorflow; print(tensorflow.__version__)"
结果将输出版本号,而脚本应该顺利退出。
方式 2:运行 IDT 依赖项测试
-
确保已配置
device.json
用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json。 -
运行框架的依赖项测试。
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.6path-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 接入设备并运行脚本
-
通过 SSH 接入设备。
-
运行以下脚本,验证是否正确安装了依赖项。
sudo python3.7 -c "import dlr; print(dlr.__version__)"
sudo python3.7 -c "import numpy; print(numpy.__version__)"
结果将输出版本号,而脚本应该顺利退出。
方式 2:运行 IDT 依赖项测试
-
确保已配置
device.json
用于执行 ML 资格认证。有关更多信息,请参阅为 ML 资格认证配置 device.json。 -
运行框架的依赖项测试。
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 进行训练。
-
确认 SageMaker 是否支持您的设备类型。有关更多信息,请参阅 Amazon SageMaker API 参考中的目标设备选项。如果当前 SageMaker 不支持您的设备类型,请按 方式 2:使用 TVM 编译 DLR 模型 中的步骤操作。
注意
使用经 SageMaker 编译的模型运行 DLR 测试可能需要 4 到 5 分钟。在此过程中请勿停止 IDT。
-
下载包含 DLR 的未编译、预训练 MXNet 模型的 tarball 文件:
-
解压缩该 tarball 文件。此命令会生成以下目录结构。
-
将
synset.txt
移出resnet18
目录。记下新位置。稍后,您需要将此文件复制到已编译的模型目录中。 -
压缩
resnet18
目录的内容。tar cvfz model.tar.gz resnet18v1-symbol.json resnet18v1-0000.params
-
将压缩文件上传到 AWS 账户 中的 Amazon S3 存储桶中,然后按照编译模型(控制台)中的步骤创建编译作业。
-
对于输入配置,请使用以下值:
-
对于数据输入配置,请输入
{"data": [1, 3, 224, 224]}
。 -
对于机器学习框架,请选择
MXNet
。
-
-
对于输出配置,请使用以下值:
-
对于 S3 输出位置,请输入要存储已编译模型的 Amazon S3 存储桶或文件夹的路径。
-
对于目标设备,请选择您的设备类型。
-
-
-
从指定的输出位置下载已编译的模型,然后解压缩该文件。
-
将
synset.txt
复制到已编译的模型目录中。 -
将已编译的模型目录的名称更改为
resnet18
。已编译的模型目录必须具有以下目录结构。
方式 2:使用 TVM 编译 DLR 模型
按照以下步骤使用 TVM 编译 IDT 提供的 ML 模型。此模型已预先使用 Apache MXNet 进行训练,因此您必须在编译模型的计算机或设备上安装 MXNet。要安装 MXNet,请按照 MXNet 文档
注意
我们建议您在目标设备上编译模型。此做法是可选的,但它可以帮助确保兼容性并减少潜在问题。
-
下载包含 DLR 的未编译、预训练 MXNet 模型的 tarball 文件:
-
解压缩该 tarball 文件。此命令会生成以下目录结构。
-
按照 TVM 文档中的说明,从源代码为平台构建和安装 TVM
。 -
构建 TVM 后,为 resnet18 模型运行 TVM 编译。以下步骤根据 TVM 文档中的编译深度学习模型快速入门教程
的内容设计而成。 -
从克隆的 TVM 存储库中打开
relay_quick_start.py
文件。 -
更新在 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
-
-
-
将保存和加载已编译模块
的代码更新为以下代码。 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))
-
构建模型:
python3 tutorials/relay_quick_start.py --build-dir ./model
此命令会生成以下文件。
-
deploy_graph.json
-
deploy_lib.so
-
deploy_param.params
-
-
-
将生成的模型文件复制到名为
resnet18
的目录中。这是已编译的模型目录。 -
将已编译的模型目录复制到主机计算机。然后,将您在步骤 1 中下载的未编译模型中的
synset.txt
复制到已编译的模型目录中。已编译的模型目录必须具有以下目录结构。
接下来,配置 AWS 凭证和 device.json 文件。