在基于GPU的边缘设备上使用AWS IoT Greengrass 部署和基准测试 YOLOv8 官方

YOLOv8 在基于 GPU 的边缘设备上使用 AWS IoT Greengrass 部署与基准测试

主要重点

本文介绍了如何在基于 GPU 的边缘设备上使用 AWS IoT Greengrass 部署和测试 YOLOv8 模型。尤其针对制造、物流和能源等领域的客户,这些领域有著低延迟处理、网络连接不佳或无连接的要求。我们使用 NVIDIA 基础的 Seeed Studio reComputer J4012 来展示如何部署 YOLOv8 模型以及测试其性能。

引言

在制造、物流和能源行业,客户对于在边缘运行机器学习ML模型有著严格的要求,如低延迟处理、弱或无网络连接及数据安全性。对于这些客户,在边缘运行 ML 流程相比于云计算提供了许多优势,因为数据可以快速、局部且私密地处理。基于深度学习的 ML 模型,GPU 基础的边缘设备能够增强边缘运行 ML 模型的能力。

AWS IoT Greengrass 可帮助管理边缘设备并将 ML 模型部署到这些设备上。在本文中,我们将演示如何在基于 NVIDIA 的边缘设备上部署及运行由 Ultralytics 提供的 YOLOv8 模型,这些模型采用了 GPLv3 许可证。特别的是,我们将使用 Seeed Studio 的 reComputer J4012,这款设备使用 NVIDIA Jetson Orin NX 16GB 模组来进行测试和基准测试,并使用 PyTorch 和 TensorRT 等各种 ML 库进行 YOLOv8 模型的编译。我们将展示这些不同 YOLOv8 模型格式在 reComputer J4012 上的性能。AWS IoT Greengrass 组件提供了一种高效的方式来将模型和推理代码部署到边缘设备上。通过 MQTT 消息调用推理,并通过订阅 MQTT 主题来获得推理输出。对于有兴趣在云端托管 YOLOv8 的客户,我们有一篇 部落格 展示如何在 Amazon SageMaker 端点上托管 YOLOv8。

解决方案概览

以下图示显示了解决方案的整体 AWS 架构。Seeed Studio 的 reComputer J4012 通过 AWS IoT Core 配置为 AWS IoT Thing 并连接到摄影机。开发者可以从其环境构建并发布 comawsyolov8inference Greengrass 组件到 AWS IoT Core。一旦组件被发布,就可以将其部署到指定的边缘设备上,并通过 AWS IoT 控制台以 MQTT 进行该组件的消息管理。发布后,边缘设备将运行推理并通过 MQTT 将结果发布回 AWS IoT Core。

前提条件

一个拥有 AWS IoT Core、AWS IoT Greengrass 和 Amazon S3 权限的 AWS 帐户一台 Seeed Studio reComputer J4012 边缘设备可选连接到摄影机或 RTSP 流的边缘设备

操作指南

步骤 1:设置边缘设备

这里我们将描述正确配置边缘设备 reComputer J4012 的步骤,包括安装必要的库依赖、将设备设置为最大功率模式,以及用 AWS IoT Greengrass 配置设备。目前,reComputer J4012 已预装 JetPack 51 和 CUDA 114,且默认情况下,JetPack 51 系统未配置为在最大功率模式运行。在步骤 11 和 12 中,我们将安装其他必要的依赖并将设备切换到最大功率模式。最后,在步骤 13 中,我们将在 AWS IoT Greengrass 中配置设备,以使边缘设备可以安全地连接到 AWS IoT Core 并与其他 AWS 服务通信。

步骤 11:安装依赖

从边缘设备的终端中,使用以下命令克隆 GitHub 仓库:

bash git clone https//githubcom/awssamples/deployyolov8onedgeusingawsiotgreengrass

在基于GPU的边缘设备上使用AWS IoT Greengrass 部署和基准测试 YOLOv8 官方

进入 utils 目录,运行 installdependenciessh 脚本,如下所示:

bash cd deployyolov8onedgeusingawsiotgreengrass/utils/ chmod ux installdependenciessh /installdependenciessh

步骤 12:将边缘设备设置为最大功率模式

从边缘设备的终端,运行以下命令以切换到最大功率模式:

bash sudo nvpmodel m 0 sudo jetsonclocks

为了应用上述更改,请在执行以上命令后,当提示时输入‘yes’以重启设备。

步骤 13:用 IoT Greengrass 设置边缘设备

要自动配置设备,请从 reComputer J4012 终端运行以下命令:

bash cd deployyolov8onedgeusingawsiotgreengrass/utils/ chmod ux provisioningsh /provisioningsh

可选如需手动配置设备,请按照 AWS 公共文档 中描述的程序进行操作。这些文档会指导您完成设备注册、身份验证及安全设置、配置安全通信、IoT Thing 创建、政策及权限设置等过程。

当提示输入 IoT Thing 和 IoT Thing Group 时,请为您的设备输入唯一名称。否则,它们将使用默认值GreengrassThing 和 GreengrassThingGroup。配置完成后,这些项目将在 AWS IoT Core 控制台中可见,如下图所示:

步骤 2:在边缘设备上下载/转换模型

在这里,我们将专注于 YOLOv8 PyTorch 模型的三大类别:检测、分割和分类。每个模型任务根据性能和复杂性进一步细分为 5 种型别,总结如下表。每个模型类型的范围从Nano低延迟,低准确性到Extra Large高延迟,高准确性。

模型类型检测分割分类Nanoyolov8nyolov8nsegyolov8nclsSmallyolov8syolov8ssegyolov8sclsMediumyolov8myolov8msegyolov8mclsLargeyolov8lyolov8lsegyolov8lclsExtra Largeyolov8xyolov8xsegyolov8xcls

我们将展示如何在边缘设备上下载默认的 PyTorch 模型,并将其转换为 ONNX 和 TensorRT 框架。

步骤 21:下载 PyTorch 基础模型

从 reComputer J4012 终端,将路径从 edge/device/path/to/models 切换到您希望下载模型的路径,并运行以下命令来配置环境:

bash echo export PATH=/home/USER/local/binPATH gtgt /bashrc source /bashrc cd {edge/device/path/to/models} MODELHEIGHT=480 MODELWIDTH=640

在 reComputer J4012 终端上运行以下命令以下载 PyTorch 基础模型:

bash yolo export model=[yolov8npt OR yolov8nsegpt OR yolov8nclspt] imgsz=MODELHEIGHTMODELWIDTH

surfshark机场步骤 22:将模型转换为 ONNX 和 TensorRT

使用以下命令将 PyTorch 模型转换为 ONNX 模型:

bash yolo export model=[yolov8npt OR yolov8nsegpt OR yolov8nclspt] format=onnx imgsz=MODELHEIGHTMODELWIDTH

使用以下命令将 ONNX 模型转换为 TensorRT 模型:

bash

将 YOLOv8 ONNX 模型转换为 TensorRT 模型

echo export LDLIBRARYPATH=LDLIBRARYPATH/usr/local/cuda/targets/aarch64linux/lib gtgt /bashrc echo alias trtexec=/usr/src/tensorrt/bin/trtexec gtgt /bashrc source /bashrc trtexec onnx={absolute/path/edge/device/path/to/models}/yolov8nonnx saveEngine={absolute/path/edge/device/path/to/models}/yolov8ntrt

步骤 3:设置本地机器或 EC2 实例,并在边缘设备上运行推理

在这里,我们将演示如何使用 Greengrass Development Kit (GDK) 在本地计算机上构建组件,将其发布到 AWS IoT Core,然后部署到边缘设备,并使用 AWS IoT 控制台运行推理。该组件的责任是加载 ML 模型,运行推理并通过 MQTT 将输出发布到 AWS IoT Core。要在边缘设备上部署推理组件,则需要将推理代码转换为 Greengrass 组件。这可以在本地计算机或配置了 AWS 凭证和与 Amazon S3 相关的 IAM 策略的 Amazon Elastic Compute Cloud (EC2) 实例上进行。

步骤 31:从本地机器或 EC2 实例构建/发布/部署组件到边缘设备

从本地机器或 EC2 实例终端,克隆 GitHub 仓库并配置环境:

bash git clone https//githubcom/awssamples/deployyolov8onedgeusingawsiotgreengrass export AWSACCOUNTNUM=ADDACCOUNTNUMBER export AWSREGION=ADDREGION export DEVIOTTHING=NAMEOFOFTHING export DEVIOTTHINGGROUP=NAMEOFIOTTHINGGROUP

在 components/comawsyolov8inference 目录下打开 recipejson,并修改 Configuration 中的项目。在这里,modelloc 是在步骤 21 中定义的边缘设备上的模型位置:

jsonConfiguration { eventtopic inference/input outputtopic inference/output cameraid 0 modelloc edge/device/path/to/yolov8npt OR edge/device/path/to/models/yolov8ntrt}

在本地机器或 EC2 实例上运行以下命令安装 GDK:

bash python3 m pip install U githttps//githubcom/awsgreengrass/awsgreengrassgdkcligit@v120 [Linux] aptget install jq [MacOS] brew install jq

通过运行本地机器或 EC2 实例中的 utils 目录下的 deploygdkbuildsh 脚本来自动构建、发布和部署组件:

bash cd utils/ chmod ux deploygdkbuildsh /deploygdkbuildsh

步骤 32:使用 AWS IoT Core 运行推理

在这里,我们将演示如何使用 AWS IoT Core 控制台运行这些模型并检索结果。在本地机器或 EC2 实例中的 recipejson 中选择模型后,将必须使用 deploygdkbuildsh 脚本重新部署。推理开始后,边缘设备将识别模型框架并相应地运行工作负载。边缘设备生成的输出通过 MQTT 推送到云端,并在订阅该主题时可以查看。下图显示了推理时间戳、模型类型、运行时间、每秒帧数和模型格式。

要在 AWS 控制台中查看 MQTT 消息,请按照以下步骤操作:

在 AWS IoT Core 控制台的左侧菜单中,在测试下选择 MQTT 测试客户端。在 订阅主题 标签中,输入主题 inference/output,然后选择订阅。

在 发布主题 标签中,输入主题 inference/input,然后输入以下 JSON 作为消息有效载荷。将状态修改为 start、pause 或 stop,以启动/暂停/停止推理:

json{ status start}

一旦推理开始,您可以看到输出返回到控制台。

在 Seeed Studio reComputer J4012 上基准测试 YOLOv8

我们比较了不同 YOLOv8 模型在 reComputer J4012 上的 ML 运行时间,结果总结如下。这些模型在测试视频上运行,并为不同的模型格式和输入形状获得延迟指标。有趣的是,PyTorch 模型的运行时间在不同模型输入大小下变化不大,而 TensorRT 在减少输入形状时则

在 Amazon DynamoDB 中启用 API 操作的细粒度访问控制和可观察性 数据库博客
< 上一篇
如何管理 AWS IoT Greengrass 核心设备证书 官方博客 物联网
下一篇 >

评论