教年轻 AIoT 创业者如何从 0 到 1 实现AIoT 创业项目 了解详情
写点什么

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

  • 2020-02-27
  • 本文字数:4795 字

    阅读完需:约 16 分钟

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

一、回顾

上一章我们通过 Amazon SageMaker 完成了边缘智能中的图像标注,模型训练和优化,最终将图像分类的 SageMaker Neo 模型导出到 S3 存储桶中。也就是我们完成了下图右下角阴影部分的内容。


本章重点分为两大部分:


  • 设备端,主要包含:安装 Jetson nano 的镜像、SageMaker Neo runtime、Greengrass 的部署、运行模型。

  • 云端,主要包含:配置 IoT core 与 Greengrass、开发与部署 Lambda 函数、model 到设备端。

AWS EI image classification

二、Jetson Nano 的镜像烧录

使用官方推荐的 Etcher 烧录镜像,不同的操作系统对应不同的操作方法,所以不再详细介绍,可以参考https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write,烧写成功后是如下图所示的基于 aarch64-linux。



另外在使用 CSI 接口的摄像头时排线不要插反,并测试摄像头。


Java


$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e
复制代码


可以顺利打开摄像头。代码的含义是使用 GStreamer 打开一个 3820 像素宽、2464 像素高的相机 stream,并在一个 960 像素宽、616 像素高的窗口中显示它。

CSI 排线

三、使用 AWS IoT Greengrass 部署模型到 Jetson Nano

这个步骤我们做如下的事情:


  • 3.1 安装 SageMaker Neo runtime

  • 3.2 安装 AWS IoT Greengrass

  • 3.3 配置和部署 AWS Lambda

  • 3.4 设置机器学习模型部署环境

  • 3.5 部署机器学习模型 Sagemaker Neo 到边缘

  • 3.6 启动模型并测试

3.1 安装 SageMaker Neo runtime

下载 .whl 文件并安装,其中包含 SageMaker Neo 的一些依赖库来运行 model。可以通过以下链接下载:


https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/dlr-1.0-py2.py3-none-any.whl


如果是 Jetson Nano 以外的设备也可以通过 SageMaker Neo git https://neo-ai-dlr.readthedocs.io/en/latest/install.html 找到对应 Device Name 进行下载。


下载完成后,SSH 到设备中,然后安装.whl 文件:


Java


sudo apt-get install python3-pip
sudo pip install dlr-1.0-py2.py3-none-any.whl
复制代码


也要安装 AWS Python SDK boto3


Java


sudo pip install boto3
复制代码


3.2 安装 AWS IoT Greengrass


在 Jetson Nano 的系统中运行如下命令创建 Greengrass user 和 group


Java


$ sudo adduser --system ggc_user$ sudo addgroup --system ggc_group
复制代码


在 AWS 控制台上(北京 cn-north-1)通过以下链接来创建证书资源并 SCP 给 Jetson Nano:https://docs.amazonaws.cn/greengrass/latest/developerguide/gg-config.html。



在 Jetson Nano 中下载 AWS IoT Greengrass Core Software(v1.10)的 aarch64 版本(注意版本,只有对应最新的大版本才能部署成功)。https://ml-jetson-greengrass.s3.cn-north-1.amazonaws.com.cn/greengrass-linux-aarch64-1.10.0.tar.gz


解压缩 Greengrass core 和刚刚我们下载的证书资源文件:


Java


$ sudo tar -xzvf greengrass-linux-aarch64-1.10.0.tar.gz -C /$ sudo tar -xzvf <hash>-setup.tar.gz -C /greengrass   # these are the security keys downloaded above
复制代码



下载AWS ATS 终端根证书(CA):
Java

复制代码


$ cd /greengrass/certs/


$ sudo wget -O root.ca.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem



```
启动Greengrass Core在我们的Jetson Nano上:
Java
```$ cd /greengrass/ggc/core/$ sudo ./greengrassd start```
执行完成后我们终端会返回一个:
Java
```Greengrass successfully started with PID: XXXX```
3.3 使用AWS Lambda配置推理代码
登陆回控制台(北京 cn-north-1),创建Lambda函数。先将github中的aws-samples/aws-greengrass-samples中的hello-world-python下载下来并部署到AWS Lambda中,链接如下:
https://github.com/aws-samples/aws-greengrass-samples/tree/master/hello-world-python
然后替换hello-world-python的默认代码如下面的链接,但该代码需要引入一些模块入numpy、jetbot、cv2等,请确认Jetson Nano环境包含这些依赖。 https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano/blob/master/inference-lambda.py
Java
```import timeimport datetimeimport numpy as npimport cv2import boto3from jetbot import Camerafrom dlr import DLRModelimport greengrasssdk```
3.4 设置机器学习模型部署环境
* 登陆AWS管理控制台(cn-north-1),进入Greengrass。* 选择并进入我们在2步骤中所创建的group* 选择我们在3步骤中创建的Lambda函数* 然后使此函数长时间运行(Make this function long-lived and keep it running indefinitely)并分配内存为1000MB参考链接如下: https://docs.aws.amazon.com/greengrass/latest/developerguide/long-lived.html 如下图: 长时间生存(long-lived)的 Lambda 函数在 AWS IoT Greengrass 启动后函数会自动在自己的容器中保持运行。这与按需 Lambda 函数相反,后者在调用时启动,并在没有要执行的任务时停止。有关更多信息,请参考[](https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/lambda-functions.html#lambda-lifecycle)。
#### [](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-25.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-25.jpg)Keep Lambda long-lived
* 在资源中添加Machine Learning模型,添加机器学习资源如下图,在模型源中选择我们上传过的Sagemaker Neo的模型。本地路径设置为/ml_model
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-26.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-26.jpg)
* 添加本地资源, 这里要注意的是回到Jetson Nano中查看/dev/下的文件是否与下面列出的路径对应,如果没有请创建并分配目录拥有者为ggc_user和ggc_group。例如:
Java
```/dev$ cd /$ sudo mkdir /nvmap$ sudo chown ggc_user:ggc_group *```
#### [](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-27.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-27.jpg)Local Resource
* 在部署模型之前,需要安装openjdk-8。这是GGC v1.10新功能,用于本地处理数据流并自动将其导出到 AWS 云的流管理器。此功能需要 Greengrass 核心设备上的 Java 8。
Java
``` sudo apt install openjdk-8-jdk ```
如果没有安装会报错如下图:
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-28.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-28.jpg)
* 配置Greengrass role,我们回到Greengrass Group中选择设置(Settings),选择Greengrass service role,然后跳转到AWS IAM console中添加Greengrass的角色所需要的权限,”AmazonS3fullAccess”, “CloudWatchFullAccess” and “AWSGreengrassResourceAccessRolePolicy” “AWSIoTFullAccess”..
#### [](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-29.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-29.jpg)Greengrass Service Role
* 3.5 部署SageMaker Neo训练的模型到边缘
最后,我们需要把在终端图像分类后的消息。 通过MQTT方式上报给云端的AWS IoT Core,所以还需要添加订阅操作,并进行部署。回到Greengrass Group中,左侧的工具栏中选择订阅(subscription),然后选择源(source)选择我们在步骤3.3中部署好的Lambda,目标我们选择IoT Cloud,然后定义一个Topic如”dino-detect”。
当配置完成之后,单击右上角的操作(Actions),选择部署。部署成功后如下图,如果部署失败请查找失败原因:
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-210.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-210.jpg)
* 3.6 启动模型并测试
所有步骤都配置成功后,我们就可以测试乐高恐龙的分类器了。在 AWS IoT 控制台中,选择测试,并订阅主题dino-detect或#,然后启用Jeston Nano的摄像头捕获并对图像进行分类,最后将结果发送回 AWS IoT 控制台。
## 总结:
再次回顾一下我们的Demo流程图:
#### [](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-211.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-jetson-nano-with-aws-machine-learning-and-Iot-for-edge-intelligence-part-211.jpg)AWS EI Demo流程图
我们共同完成了边缘智能应用的所有步骤。AIoT或EI随着AI芯片低功耗和低成本使得越来越多的企业关注智联网这个领域。边缘智能正在促成人工智能(AI)与物联网(IoT)的混合,AI与IoT相辅相成:如果没有AI,IoT只是收集数据的sensor,如果没有IoT,AI也不会应用到边缘。AIoT项目确实比其他单纯的一个软件或硬件的研发更加复杂,它是多学科或技术栈的融合。比如,数据的采集、分析、展现可能需要大数据的技术,边缘逻辑的推理、判断需要机器学习的模型,对数据加工后又要与大数据结合去ETL。云端的逻辑编写、OTA升级、安全、设备管理也要与终端集成。另外,如果是视频流交互还涉及到编解码、媒体等技术。正是因为它的复杂性,我们可以利用云计算提供的服务和接口来快速原型和开发。
参考链接:
1. Nvidia Jetson Nano介绍:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#intro
2. Nvidia Jetson Nano 镜像烧录:
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
3. AWS IoT Greengrass:
https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/what-is-gg.html
4. NVIDIA Jetson Nano with AWS ML@Edge:
https://github.com/mahendrabairagi/AWS_ML_At_Edge_With_NVIDIA_Jetson_Nano
5. 《智联网·未来的未来》电子工业出版社 2018,6 彭昭
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技术博客。**
**原文链接:**https://amazonaws-china.com/cn/blogs/china/using-jetson-nano-with-aws-machine-learning-and-iot-for-edge-intelligence-part-2/
复制代码


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-02-27 16:59613

评论

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

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

鲲鹏迁移第一批吃螃蟹的人,践行技术国际化

华为云开发者联盟

鲲鹏920 服务器 华为云 ARM芯片 X86

滴滴数据仓库指标体系建设实践

滴滴技术

大数据 数据仓库 滴滴技术

拥抱K8S系列-03-服务器部署应用和docker部署应用区别(MySQL篇)

张无忌

MySQL Docker 运维

迭代技术方案设计文档规范

程序员架构进阶

技术方案

程序员如何获取一份高薪工作?阿里P8大牛给你一些中肯的建议

Java迁哥

Java 华为 程序员 面试 资料

区块链支付系统源码开发,USDT承兑支付平台

13530558032

浅析LR.Net工作流引擎

Learun

.net 敏捷开发 工作流

基于Prometheus的微服务应用监控

易观大数据

滴滴推理引擎IFX:千万规模设备下AI部署实践

滴滴技术

人工智能 学习 AI 滴滴技术 IFX

实时数仓在滴滴的实践和落地

滴滴技术

大数据 滴滴技术 数据通道服务

第 0 期架构师训练营第 8 周作业 1

fujin

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

LeetCode题解:84. 柱状图中最大的矩形,双循环暴力,JavaScript,详细注释

Lee Chen

大前端 LeetCode

35K成功上岸华为商城事业部,只因学透了这几个开源的商城项目

Java迁哥

Java 华为 源码 资料 商城项目

9块钱,构建个私有网盘,关键不限速

华为云开发者联盟

网站 OBS 在线网盘 华为云 云存储

数字货币钱包系统定制开发,区块链钱包源码

13530558032

隐私计算会成为“金融”向“数科”转型的一剂猛药?

hellompc

花两个半月吃透这份Java手打面经,成功从外包上岸到京东

Java迁哥

Java 学习 腾讯 面试 资料

区块链交易所开发源码,数字货币交易所app开发

13530558032

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

分布式QoS算法解析

焱融科技

分布式 算法 焱融科技 分布式文件存储 QoS

滴滴数据通道服务演进之路

滴滴技术

大数据 滴滴技术 数据服务通道

week12学习总结

burner

第 0 期架构师训练营第 8 周作业2-总结

fujin

突破传统 区块链如何实现病历永存

CECBC

区块链 电子病历 信息共享

滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

滴滴技术

大数据 elasticsearch 滴滴技术

GPU虚拟机创建时间深度优化

滴滴技术

云计算 虚拟化 滴滴技术

week12 homework

burner

区块链技术成为金融业务应用热点

CECBC

区块链 人工智能 金融

可编程网卡芯片在滴滴云网络的应用实践

滴滴技术

云计算 芯片 滴滴技术

  • 扫码添加小助手
    领取最新资料包
使用 Jetson nano 结合 AWS 机器学习和 IoT 实现边缘智能(下)_文化 & 方法_AWS_InfoQ精选文章