一、一些概念
在正式开启 AWS 边缘智能之前,我们先了解一些基础概念:
1.1 边缘智能(Edge Intelligence,EI)是指在“终端侧”部署人工智能。为什么只在云端做推理不行?众所周知,人工智能(AI)正在成为改变各行各业的通用技术。此前绝大部分 AI 是依赖云端实现的,因为云端有更丰富的算力、GPU 资源、机器学习平台等。随着 AI 芯片和边缘算力的不断发展,EI 已成为未来的趋势。
1.2 边缘计算定义:OpenStack 基金会对外发布的白皮书《边缘计算 – 跨越传统数据中心》对“边缘计算”这一概念进行了清晰的阐述,边缘计算是为应用开发者和服务提供商在网络的边缘侧提供云服务和 IT 环境服务,“边缘”指的是位于管理域的边缘,尽可能地靠近数据源或用户。其目标是在靠近数据输入或用户的地方提供计算、存储和网络带宽。但不同的行业对应边缘计算的定义可能不同。基于物联网技术的行业更多的边缘侧旨在设备端。
1.3 Jetson Nano 是 NVIDIA 推出边缘 AI 的开发板,GPU 使用 NVIDIA Maxwell™ 架构,配备 128 个 NVIDIA CUDA® 核心,开发者们可以基于 Jetson Nano 开发很多 EI 的应用。
Jetson Nano Developer Kit
1.4 边缘计算与 IoT 云平台,边缘计算与云计算平台将是共生互补。边缘计算并不会取代云计算,而是通过边缘侧的算力,让传统的云计算框架进一步去中心化,在边缘侧完成部分计算工作,然后将结果汇聚到云端进行统一处理。云端也可以通过 OTA,模型的训练后的下放与边缘端集成到一起。云端仍旧可以处理时间不敏感的应用场景,通过数据的汇聚以及云端的大数据分析进一步为业务的决策提供数据支撑。
二、场景描述:
在本篇博客中,我们将通过 AWS Greengrass 和 Jetson Nano 实现图片的分类,AWS Greengrass 通过 Lambda 处理图像分类的消息与调用本地的 SageMaker 训练好的 Neo 模型,然后通过 Topic 把图像分类的结果发送至 AWS IoT Core。其中边缘推理部分使用了 Greengrass ML inference。本篇博客以乐高恐龙图像分类作为开启 EI 亦或 AIoT 应用的开端。
恐龙图片分类素材
三、技术架构:
AWS EI image classification
AWS IoT Greengrass 可将 AWS 无缝扩展至边缘设备,因此可以在本地操作其生成的数据,同时仍可将云用于管理、分析和持久存储。借助 AWS IoT Greengrass,边缘设备可以运行 AWS Lambda 函数、Docker 容器,基于机器学习模型执行预测、使设备数据保持同步以及与其他设备安全通信 – 甚至在没有连接 Internet 的情况下也可实现这些功能。
Amazon SageMaker 是一种完全托管的机器学习服务。借助 Amazon SageMaker,数据科学家和开发人员可以快速轻松地构建和训练机器学习模型,然后直接将模型部署到托管的生产就绪环境中。它提供了一个集成 Jupyter Notebook 的实例,供您轻松访问数据源以便进行探索和分析,因此您无需管理服务器。
Amazon SageMaker Ground Truth 是数据标注的服务,为机器学习模型构建高品质的训练数据集。
Amazon SageMaker Neo 使机器学习模型训练一次即可在云和边缘站点中的任何环境运行。Neo 可自动优化 TensorFlow、Apache MXNet、PyTorch、ONNX 和 XGBoost 模型以部署在 ARM、Intel 和 Nvidia 处理器上,减少移植所需的时间和工作。但需要注意一点的是,Neo 当前支持的是从 TensorFlow、MXNet 或 PyTorch 导出的图像分类模型,以及 XGBoost 模型。
本篇具体实现的流程如下图,在最后的参考链接会附有源代码和对应的库:
AWS EI Demo 流程图
四、AWS EI 实验步骤:
4.1 图片标注(SageMaker GroundTruth)
在这次试验中,我们将使用 SageMaker GroundTruth 的服务来标注由乐高恐龙组成的图像训练集。
步骤如下:
将未标注的数据集上传到 S3 上
在 Sagemaker GroundTruth 中创建一个私有的 Labeling workforce
创建一个 GroundTruth Labeling job
使用 GroundTruth 平台来标注图片
分析结果
4.1.1 下载未标注的数据集:
在这一步中,我们将未标注的数据集下载到本地,然后 upload 到刚刚创建的存储桶中作为 SageMaker GroundTruth 的数据输入。这个数据集中包含 388 个文件,其中包含 6 大分类(Brachiosaurus, Dilophosaurus, Spinosaurus, Stegosaurus, Triceratops and Unknown)。
数据集下载地址:
https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/lego_dinosaurs_dataset.zip
或者
https://sagemaker-nvidia-webinar.s3.amazonaws.com/lego_dinosaurs_dataset.zip
将未标注的数据集上传到 S3 上:
在 ap-northeast-1 区域中创建一个 S3 存储桶并给存储桶唯一的命名.(比如,ground-truth-labelling-job-initials-20200112)
将 download 的数据集上传到刚刚创建的桶中。(因为下面的步骤我们需要做人工标注,所以建议将 6 大类的乐高恐龙分别选取 2-3 张作为需要标注的数据集即可)
在设置权限这一步保持默认即可,然后完成设置。
4.1.2 在 GroundTruth 中创建一个私有的 Labeling workforce
这一步骤中我们将通过 Sagemaker GroundTruth 创建一个图像分类任务在 ap-northeast-1。
打开 AWS 控制台 > Amazon SageMaker > 标签工作人员(Labeling workforces)
选择私有(Private)的标签然后创建私有团队(Create private team)
给私有标注的工作组命名
填写一个有效的邮箱地址
…
创建私有团队
创建私有团队
当创建成功后,我们的邮箱会收到来自于 no-reply@verificationemail.com 发来的验证邮件,这个邮件包含了我们创建 workforce 的用户名和临时密码。
创建 workforce
使用 log in 的连接和临时密码登陆到标注控制台进行标注。
此时会要求我们更改临时密码。
因为我们还没有分配给 worker(我们自己)标注任务,此时标注任务是空 的,下一步我们将分配给自己标注乐高恐龙的标注任务。
4.1.3 创建一个 GroundTruth Labeling job
这一步骤就是我们创建一个标注的任务,然后分配给 workforce。
打开 AWS 控制台 > Amazon SageMaker > 标记任务(Labeling jobs)
Step1:指定任务详细信息中:
—定义任务名称(记住任务名称,我们在 notebook 中的代码会用到)
—创建清单文件(manifest),输入 S3 训练数据集的路径,注意要以/结尾。For e.g. : s3:///<prefix/foldername>/
- 创建manifest
—IAM 角色,在测试环境中我们可以允许它访问所有的 S3 bucket,当然我们可以指定它可以访问特定 S3 bucket。
—任务类型,我们选择图像分类。
任务类型
Step2: 选择工作人员并配置工具
选择“私有(Private)”>“私有团队(Private teams)在下拉框中我们已经在 1.2 创建过的”>“取消自动标记”>“其他配置中工作人员数量为 1”>“图像分类标记工具中添加 6 个标签:Brachiosaurus, Dilophosaurus, Spinosaurus, Stegosaurus, Triceratops and Unknown”
返回标注作业的页面查看 jobs 的状态,此时我们的邮箱会有 no-reply@verificationemail.com 发来的邮件,内容是分配给我 1 个 jobs 需要完成。
4.1.4 用 GroundTruth 平台来标注图片
这一步骤就是人工标注的过程,因为前面我们已经节选出 13 张有代表的图像,我们下面就对这 13 张图像进行标注即可。如下图:
当标注完成后,我们返回到 Sagemaker 平台上。可以跟踪标记任务的状态以及进度。
4.1.5 结果验证
我们可以用 sublime text 打开在 output 中的/manifests/output.manifest 文件,它是一个 json 文件包含一些被标记图片的 metadata.比如:
Manifests 格式
4.2 模型训练与优化
这一步我们主要的目的就是通过 Amazon SageMaker notebook 编写训练模型的代码,通过代码来调用云计算的资源,比如机器学习类型的 instance。它将执行数据训练,并将训练和优化好的模型以 Amazon SageMaker Neo 导出。下一步将 Amazon SageMaker Neo 模型部署到 Jetson Nano 的设备上。如果不想对模型进行训练的话可以到参考链接处下载训练好的模型。
这个 notebook 主要是展示端到端机器学习的工作流程
使用 Sagemaker GroundTruth 创建的标签数据集。然后将数据集分为训练和验证。
使用 Sagemaker 容器训练模型
使用 Sagemaker Neo 优化模型
4.2.1 下载代码 ipynb 并导入到 SageMaker notebook 中
注意不要使用参考链接中的 github 上的代码。
创建 Amazon SageMaker 笔记本
4.2.2 部分代码解析
在 OUTPUT_MANIFEST 要输入 Sagemaker GroundTruth 的 output 路径,前面的步骤已经验证过 output 的 manifest 的 json 格式。
代码解析-1
在创建 Sagemaker 训练任务的时候,请根据自己数据集训练的个数来调整超参数(hyperparamerter)和训练 instance 的类型(InstanceType)如下:
代码解析-2
在 InputDataConfig 替换 AttributeNames 为自己定义的 name,比如:
“AttributeNames”: [“source-ref”,”groundtruth-labeling-job-20191209-clone”]
启动训练作业,我们可以在 Sagemaker notebook 中查看到结果,也可以返回到 Sagemaker 控制台的训练任务中看到训练的状态。训练的时间长短取决于训练实例类型、数据集大小、超参数的定义。
Sagemaker notebook 的训练状态
Sagemaker console 的训练状态
通过使用 Sagemaker Neo 来优化压缩模型给终端 Jetson Nano 使用,导出的模型路径我们要记录一下,在下一步骤部署 GreenGrass 的时候会用到。
模型导出
小结:
回顾一下我们的 Demo 流程图,我们一起完成了第一部分:图片标注和第二部分模型训练与优化。下一章是我们的另一个重点,开始构建边缘环境与执行边缘推理。
AWS EI Demo 流程图
参考链接:
Nvidia Jetson Nano 介绍:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#intro
Nvidia Jetson Nano 镜像烧录:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
AWS IoT Greengrass:
https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/what-is-gg.html
NVIDIA Jetson Nano with AWS ML@Edge:
https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano
《智联网·未来的未来》电子工业出版社 2018,6 彭昭
Amazon Sagemaker Neo 模型下载:
https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/model-jetson_nano.tar.gz
作者介绍: 李强,AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在物联网和微软的技术栈有着广泛的设计和实践经验。在加入 AWS 之前,曾在东芝中国负责系统开发和运维工作,在微软中国负责中小企业的技术咨询和方案设计工作。
本文转载自 AWS 技术博客。
评论