写点什么

使用 Jetson nano 结合 AWS 机器学习和 IoT 实现边缘智能(上)

2020 年 2 月 27 日

使用 Jetson nano 结合 AWS 机器学习和 IoT 实现边缘智能(上)

一、一些概念

在正式开启 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 的服务来标注由乐高恐龙组成的图像训练集。


步骤如下:


  1. 将未标注的数据集上传到 S3 上

  2. 在 Sagemaker GroundTruth 中创建一个私有的 Labeling workforce

  3. 创建一个 GroundTruth Labeling job

  4. 使用 GroundTruth 平台来标注图片

  5. 分析结果


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 中


图像分类代码https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/sagemaker_image_classification-Copy1.ipynb


注意不要使用参考链接中的 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 流程图

参考链接:


  1. Nvidia Jetson Nano 介绍:


https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#intro


  1. Nvidia Jetson Nano 镜像烧录:


https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write


  1. AWS IoT Greengrass:


https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/what-is-gg.html


  1. NVIDIA Jetson Nano with AWS ML@Edge:


https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano


  1. 《智联网·未来的未来》电子工业出版社 2018,6 彭昭

  2. Amazon Sagemaker Neo 模型下载:


https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/model-jetson_nano.tar.gz


作者介绍: 李强,AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在物联网和微软的技术栈有着广泛的设计和实践经验。在加入 AWS 之前,曾在东芝中国负责系统开发和运维工作,在微软中国负责中小企业的技术咨询和方案设计工作。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/using-jetson-nano-with-aws-machine-learning-and-iot-for-edge-intelligence-part-1/


2020 年 2 月 27 日 16:57243

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

《华为数据之道》读书笔记:第 8 章 打造“清洁数据”的质量综合管理能力

方志

数字化转型 数据质量管理

蘑菇街Java大牛熬夜纯手写肛出的Spring AOP/IOC思维导图及源码笔记,赶紧收藏学习!

Java成神之路

Java 编程 程序员 架构 面试

前嗅教你大数据:常见几种编码介绍

前嗅大数据

大数据 编码 编码指南 前嗅大数据

苹果开始告别英特尔

罗燕珊

macOS Big Sur 芯片 苹果 MacBook 英特尔

阿里内部“高并发通关秘籍”曝光,看完带给你独一无二的认知!

比伯

Java 编程 架构 面试 计算机

5分钟学会6个阿里内部编程的方法

Java架构师迁哥

微博和B站屏蔽马保国相关信息:自媒体蹭热度要适可而止

石头IT视角

shell脚本的使用该熟练起来了,你说呢?(篇二)

良知犹存

Shell

阿里云在应用扩缩容下遇到的挑战与选型思考

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生

完了!这57道面试题(美团、BAT、携程),我咋一个都不会?

比伯

Java 程序员 架构 面试 计算机

SpringBoot有多重要?面试用SpringBoot把面试官唬住了要30k都行!

Java成神之路

Java 程序员 架构 面试 编程语言

现在Php、Java、Python横行霸道的市场,C++程序员们都在干什么呢?

ShenDu_Linux

c++ 程序员 编程语言 C语言 软件工程师

架构师训练营第一期-第十周学习总结

卖猪肉的大叔

极客大学架构师训练营

阿里技术专家熬夜一个月肛出内部“微服务学习笔记”,太完美了

小Q

Java 学习 编程 面试 微服务

京东11.11大促背后,那些系统架构经历了些什么?

京东科技开发者

数据库 云计算 云服务

小白也能看懂!教你如何快速搭建实用的爬虫管理平台

华为云开发者社区

Python Docker jenkins

架构师训练营第一期-第十周课后作业

卖猪肉的大叔

极客大学架构师训练营

anyRTC 11月SDK更新

anyRTC开发者

flutter uni-app WebRTC RTC sdk

软件架构指南

信码由缰

软件架构

消防物联网,为逆行英雄守住第一道生命线

华为云开发者社区

物联网 控制 消防

盘点c++几种常见的设计模式及具体实现

linux大本营

c++ Linux 后台开发

不要再满世界找linux命令了,常用的我都给你整理了

北游学Java

Linux 程序人生 C/C++ 后端开发 linux命令

今年最火的 Golang 云原生开源项目,可能就是它了!

孙健波

Kubernetes k8s OAM KubeVela CloudNative

40 张图带你搞懂 TCP 和 UDP

云流

编程 程序员 前端 后端 网络

1. 揭秘Spring类型转换 - 框架设计的基石

YourBatman

Spring Framework 类型转换 Converter

优秀商业可视化大屏(BI)设计演示

Marilyn

UI 商业智能

阿里P8Java大牛总结的MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒!

Java成神之路

Java 程序员 架构 面试 编程语言

牛批!阿里P8Java架构师总结整理了一份Spring MVC详细教程。真香系列!

Java成神之路

Java 程序员 架构 面试 编程语言

根治可扩展、高可用、高性能“神器”:SpringCloud+Nginx高并发编程手册

Java架构追梦

Java nginx 架构 面试 微服务

【经验分享】打破CMDB认知误区,掌握建设关键!

嘉为蓝鲸

运维 运维自动化 数据可视化 CMDB 配置信息

面试大厂被MyBatis源码问到“哑口无言”?这份《MyBatis源码学习笔记+面试真题》助你吊打面试官!

Java成神之路

Java 程序员 架构 面试 编程语言

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

使用 Jetson nano 结合 AWS 机器学习和 IoT 实现边缘智能(上)-InfoQ