麦斯科技 · 5月1日

使用K3s和NVIDIA Jetson Nano的边缘AI:目标检测和实时视频分析

https://www.suse.com/c/ai-at-the-edge-with-k3s-nvidia-jetson-nano-object-detection-real-time-video-analytics-src/

2021年4月20日 |作者:普拉奈·巴克尔(Pranay Bakre)

随着新的、功能强大的GPU设备的出现,我们可以在边缘执行的可能用例正在扩展。随着技术的进步,这种优势的规模越来越大,效率也越来越高。拥有业界领先GPU的NVIDIA和处理器IP的领先技术提供商Arm正在边缘生态系统领域进行重大创新和投资。例如,nvidia jetson nano是最具成本效益的设备,它可以运行GPU支持的工作负载,并可以处理AI/ML数据处理作业。此外,像Kubernetes这样的云本地技术使开发人员能够使用边缘容器构建轻量级应用程序。为了在计算多样的边缘生态系统中实现无缝的云本地软件体验,Arm启动了Cassini项目——一个开放的、基于标准的协作计划。它利用这些异构的基于ARM的平台的能力为边缘应用创建安全的基础。

K3s由Rancher Labs开发,现在是CNCF沙盒项目,已经成为这些紧凑型footprint edge设备的关键协调平台。作为为edge构建的Kubernetes发行版,它足够轻,不会给设备RAM和CPU带来压力。利用Kubernetes设备插件框架,运行在这些设备上的工作负载可以高效地访问GPU功能。

在典型的场景中,边缘的设备被用来收集数据,而分析和解码则是通过云计算来完成的。随着边缘设备变得越来越强大,我们现在可以在边缘位置本身执行AI/ML处理。

正如SUSE的Mark Abrams在上一篇关于如何在部署在云上的Rancher Kubernetes集群上使用gpu的博客中强调的那样,它非常无缝和高效。

在这个博客中,我们将看到NVIDIA的Jetson Nano和K3s的结合如何在边缘实现gpu,并成为一个引人注目的平台。下图描述了用例的高级架构:

微信图片_20210501224620.png

边缘对象检测和视频分析

我们看到一个边缘位置,摄像机连接到Jetson Nano设备。NVIDIA Jetson Nano芯片与JetPack操作系统-一组库启用GPU设备。

在此设置中,我们有两个视频流作为输入传递到 NVIDIA DeepStream容器:

摄像机向停车场倾斜的实时视频源

第二个视频源是预构建的视频,其中具有不同类型的对象-汽车、自行车、人类等。

我们还有一个 K3s 集群部署在Jetson Nano上, 承载着 Nvidia 深流舱。当视频流传递到深度流吊舱时,分析在设备本身完成。

然后,输出传递到附加到Jetson Nano的显示器上。在显示屏上,我们可以看到对象分类-汽车,人类等。

有关架构和使用案例演示的更多详细信息,请查看此视频:边缘的对象检测和视频分析(https://www.youtube.com/watch?v=LVLllVIQUDA)

微信图片_20210501224727.png

配置

先决条件:应安装和配置以下组件

  • Jetson Nano板
  • Jetson 操作系统 (Tegra)
  • 通过 HDMI 连接到Jetson Nano的显示屏
  • 通过 USB 连接到Jetson Nano的网络摄像头
  • 将Docker的运行时间更改为 Nvidia 运行时间并安装 K3s

Jetson 操作系统附带的码头安装开箱即用。我们需要使用最新的Docker版本,因为它是GPU兼容的。要检查默认的运行时间,请使用以下命令:

sudo docker info | grep Runtime

您还可以通过检查docker守护进程来查看当前运行时:

cat /etc/docker/daemon.json

现在,将docker守护进程的内容更改为:

{
 "default-runtime": "nvidia",

"runtimes": {

"nvidia": {
 "path": "nvidia-container-runtime", "runtimeArgs": []

} }

}

Picture2-1024x417.png

编辑daemon.json后,重新启动docker服务。然后您应该能够看到Nvidia默认运行时。

sudo systemctl restart docker
sudo docker info | grep Runtime

在安装K3s之前,请运行以下命令:

sudo apt update sudo apt upgrade -y sudo apt install curl

这将确保我们使用的是最新版本的软件堆栈。

要安装K3s,请使用以下命令

curl -sfL https://get.k3s.io/ | INSTALL_K3S_EXEC="--docker" sh -s –

Picture3-1024x151.png

要检查安装的版本,请执行以下命令

sudo kubectl version

现在,让我们用deepstreamsdk示例容器创建一个pod并运行示例应用程序。

使用您选择的文本编辑器创建一个pod清单文件。向文件中添加以下内容:


apiVersion: v1

kind: Pod

metadata:

  name: demo-pod

  labels:

    name: demo-pod

spec:

  hostNetwork: true

  containers:

  - name: demo-stream

    image: nvcr.io/nvidia/deepstream-l4t:5.0-20.07-samples

    securityContext:

      privileged: true

      allowPrivilegeEscalation: true

    command:

    - sleep

    -  "150000"

    workingDir: /opt/nvidia/deepstream/deepstream-5.0

    volumeMounts:

    - mountPath: /tmp/.X11-unix/

      name: x11

    - mountPath: /dev/video0

      name: cam

  volumes:

    - name: x11

      hostPath:

        path: /tmp/.X11-unix/

    - name: cam

      hostPath:

        path: /dev/video0

使用上一步中的YAML清单创建pod。

sudo kubectl apply -f pod.yaml

Pod使用的是deepstream-l4t:5.0-20.07-samples容器,需要在容器启动前将其拉出。

使用sudo kubectl get pods命令检查pod状态。请等到它开始运行。

当pod部署并运行时,使用以下命令登录并取消设置pod内的显示变量:


sudo kubectl exec -ti demo-pod /bin/bash unset DISPLAY

“unset DISPLAY”命令应该在pod内部运行。

要在pod内运行示例应用程序,请使用以下命令:

deepstream-app -c /opt/nvidia/deepstream/deepstream-5.0/samples/configs/deepstream-app/source1_usb_dec_infer_resnet_int8.txt

这可能需要几分钟视频流才能启动。

您的视频分析应用程序现在正在使用网络摄像头输入端,在连接到Jetson Nano板的显示器上提供实时结果。要退出应用程序,只需在pod中按“q”。

要退出pod,请使用“退出”命令。

要提供Jetson Nano的完整硬件详细信息,请使用以下命令运行另一个pod:

kubectl run -i -t nvidia --image=jitteam/devicequery --restart=Never

Picture4-1024x705.png

结论

正如我们在博客中看到的,使用基于Arm的nvidia jetson nano和K3s在边缘运行人工智能和分析是非常无缝的。这些具有成本效益的设备可以快速部署,并且仍然提供执行视频分析和人工智能的有效方式。

欢迎随时联系我们sw-ecosystem@arm.com 关于在基于Arm Neoverse的设备上运行AI和分析的查询。

你如何在边缘使用人工智能?加入SUSE&Rancher社区的对话。https://community.suse.com/?_ga=2.84414425.1968515409.1619879217-847090527.1619879217

Pranay Bakre是Arm的首席解决方案工程师。他热衷于将Kubernetes、Docker等云本地技术融入Arm的Neoverse平台。他喜欢与合作伙伴合作,在基于Arm的云和边缘产品上构建解决方案/演示。他撰写了多篇关于容器编排和相关用例的博客。

3 阅读 95
推荐阅读
0 条评论
关注数
1586
内容数
95
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
Arm中国学堂公众号
关注Arm中国学堂
实时获取免费 Arm 教学资源信息
Arm中国招聘公众号
关注Arm中国招聘
实时获取 Arm 中国职位信息