K3s+Jetson Nano,在边缘端实现实时视频分析!

随着越来越多功能强大的新设备开始支持GPU,边缘场景的用例不断扩展到各行各业。随着技术的发展,边缘的规模越来越大,效率越来越高。NVIDIA凭借其行业领先的GPU携手领先的处理器IP技术提供商ARM在边缘生态系统领域进行重大创新和投资。NVIDIA Jetson Nano便是其中的代表产品之一,它功能强大但花销极低,它可以运行支持GPU的工作负载并处理AI / ML数据处理任务。此外,Kubernetes等云原生技术还使开发人员能够使用容器为边缘构建轻量级应用程序。为了在整个计算多样化的边缘生态系统中实现无缝的云原生软件体验,Arm推出了Cassini项目
(https://www.arm.com/solutions/infrastructure/edge-computing/project-cassini)——基于标准的开放式协作计划。它利用这些基于Arm的异构平台的功能为边缘应用程序创建安全的基础。

K3s最初由Rancher Labs 在2019年年初推出,于2020年8月成为CNCF沙箱项目,目前Github Star超过16,000颗,已经成为小型设备的关键编排平台。 作为专为边缘而建的Kubernetes发行版, 它足够轻巧,不会给设备RAM和CPU带来压力。利用Kubernetes设备插件框架,运行在这些设备上的工作负载可以高效地访问GPU功能。

在边缘典型场景下,边缘设备主要用于收集数据,然后在云端对数据进行分析以及解码。但是随着边缘设备变得越来越强大,我们现在可以直接在边缘端执行AI/ML流程。

在此前的文章中,我们了解到使用GPU在云端部署Rancher Kubernetes集群是极为高效的。

在本文中,我们将了解NVIDIA的Jetson Nano如何与K3s结合并且在边缘启用GPU功能,最终我们将会拥有一个极为出色的边缘平台。下图描述了案例中的整体架构:

在这里插入图片描述
              图1:边缘对象检测和视频分析

从上图中,我们可以看到在边缘端的摄像机连接到Jetson Nano设备。NVIDIA Jetson Nano上搭载JetPack OS ——一组启用GPU设备的堆栈。在此设置中,我们有两个视频流作为输入传递到NVIDIA DeepStream容器:

  • 来自摄像机的实时视频源与停车场成一定角度
  • 第二个视频是带有不同类型对象(汽车、自行车、人等)的预制视频。
  • 我们还在Jetson Nano上部署了一个K3s集群,该集群托管NVIDIA DeepStream
    Pod。当视频流传递到DeepStream Pod时,设备将进行分析。
  • 然后将输出传递到与连接的Jetson Nano的显示器上。
  • 在显示屏上,我们可以看到对象分类——汽车、人等。

配置

前期准备:本教程需要安装和配置以下组件:

  • Jetson Nano board
  • Jetson OS(Tegra)
  • 通过HDMI连接到Jetson Nano的显示器
  • 通过USB连接到Jetson Nano的网络摄像头
  • 将Docker运行时更改为Nvidia运行时并安装K3s

Jetson OS开箱即用地安装了Docker。我们需要使用最新的Docker版本,因为它与GPU兼容。请使用以下命令检查默认的运行时:

sudo docker info | grep Runtime

您还可以通过检查docker daemon来查看当前运行时:

cat /etc/docker/daemon.json

现在,将docker daemon的内容更改为以下内容:

{
 "default-runtime": "nvidia",

"runtimes": {

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

} }

}
在这里插入图片描述

编辑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 –

执行以下命令检查安装的版本:

sudo kubectl version

现在,让我们使用Deepstream SDK示例容器创建一个pod,然后运行示例应用。

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

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 manifest创建pod。

sudo kubectl apply -f pod.yaml

pod使用的是deepstream-l4t:5.0-20.07-samples container,需要先拉取它,然后才能启动容器。

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

部署和运行Pod后,请使用以下命令登录并取消设置Pod内部的Display变量:

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 board上的显示屏上提供实时结果。要退出该应用,只需按在Pod中按“q”。

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

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

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

总结

正如我们在上文中所看到的,使用基于Arm的NVIDIA Jetson Nano和K3s可以在边缘无缝运行AI和进行数据分析。这些花销低同时功能强大的设备可以快速部署,并且提供一种高效的方式进行视频分析,实现边缘AI。

在实践过程中,如果有任何问题,也欢迎扫描文末二维码,添加小助手为好友,进入K3s官方技术交流群与各位K3s用户一起交流。

作者简介
Pranay Bakre
Arm的首席解决方案工程师。他热衷于将Arm的Neoverse平台与Kubernetes、Docker等云原生技术相结合。他喜欢与合作伙伴一起在基于Arm的云和边缘产品上搭建各类解决方案。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容