K3s+Jetson Nano,在邊緣端實(shí)現(xiàn)實(shí)時(shí)視頻分析!

隨著越來(lái)越多功能強(qiáng)大的新設(shè)備開(kāi)始支持GPU,邊緣場(chǎng)景的用例不斷擴(kuò)展到各行各業(yè)。隨著技術(shù)的發(fā)展,邊緣的規(guī)模越來(lái)越大,效率越來(lái)越高。NVIDIA憑借其行業(yè)領(lǐng)先的GPU攜手領(lǐng)先的處理器IP技術(shù)提供商ARM在邊緣生態(tài)系統(tǒng)領(lǐng)域進(jìn)行重大創(chuàng)新和投資。NVIDIA Jetson Nano便是其中的代表產(chǎn)品之一,它功能強(qiáng)大但花銷極低,它可以運(yùn)行支持GPU的工作負(fù)載并處理AI / ML數(shù)據(jù)處理任務(wù)。此外,Kubernetes等云原生技術(shù)還使開(kāi)發(fā)人員能夠使用容器為邊緣構(gòu)建輕量級(jí)應(yīng)用程序。為了在整個(gè)計(jì)算多樣化的邊緣生態(tài)系統(tǒng)中實(shí)現(xiàn)無(wú)縫的云原生軟件體驗(yàn),Arm推出了Cassini項(xiàng)目
(https://www.arm.com/solutions/infrastructure/edge-computing/project-cassini)——基于標(biāo)準(zhǔn)的開(kāi)放式協(xié)作計(jì)劃。它利用這些基于Arm的異構(gòu)平臺(tái)的功能為邊緣應(yīng)用程序創(chuàng)建安全的基礎(chǔ)。

K3s最初由Rancher Labs 在2019年年初推出,于2020年8月成為CNCF沙箱項(xiàng)目,目前Github Star超過(guò)16,000顆,已經(jīng)成為小型設(shè)備的關(guān)鍵編排平臺(tái)。 作為專為邊緣而建的Kubernetes發(fā)行版, 它足夠輕巧,不會(huì)給設(shè)備RAM和CPU帶來(lái)壓力。利用Kubernetes設(shè)備插件框架,運(yùn)行在這些設(shè)備上的工作負(fù)載可以高效地訪問(wèn)GPU功能。

在邊緣典型場(chǎng)景下,邊緣設(shè)備主要用于收集數(shù)據(jù),然后在云端對(duì)數(shù)據(jù)進(jìn)行分析以及解碼。但是隨著邊緣設(shè)備變得越來(lái)越強(qiáng)大,我們現(xiàn)在可以直接在邊緣端執(zhí)行AI/ML流程。

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

在本文中,我們將了解NVIDIA的Jetson Nano如何與K3s結(jié)合并且在邊緣啟用GPU功能,最終我們將會(huì)擁有一個(gè)極為出色的邊緣平臺(tái)。下圖描述了案例中的整體架構(gòu):

在這里插入圖片描述
              圖1:邊緣對(duì)象檢測(cè)和視頻分析

從上圖中,我們可以看到在邊緣端的攝像機(jī)連接到Jetson Nano設(shè)備。NVIDIA Jetson Nano上搭載JetPack OS ——一組啟用GPU設(shè)備的堆棧。在此設(shè)置中,我們有兩個(gè)視頻流作為輸入傳遞到NVIDIA DeepStream容器:

  • 來(lái)自攝像機(jī)的實(shí)時(shí)視頻源與停車場(chǎng)成一定角度
  • 第二個(gè)視頻是帶有不同類型對(duì)象(汽車、自行車、人等)的預(yù)制視頻。
  • 我們還在Jetson Nano上部署了一個(gè)K3s集群,該集群托管NVIDIA DeepStream
    Pod。當(dāng)視頻流傳遞到DeepStream Pod時(shí),設(shè)備將進(jìn)行分析。
  • 然后將輸出傳遞到與連接的Jetson Nano的顯示器上。
  • 在顯示屏上,我們可以看到對(duì)象分類——汽車、人等。

配置

前期準(zhǔn)備:本教程需要安裝和配置以下組件:

  • Jetson Nano board
  • Jetson OS(Tegra)
  • 通過(guò)HDMI連接到Jetson Nano的顯示器
  • 通過(guò)USB連接到Jetson Nano的網(wǎng)絡(luò)攝像頭
  • 將Docker運(yùn)行時(shí)更改為Nvidia運(yùn)行時(shí)并安裝K3s

Jetson OS開(kāi)箱即用地安裝了Docker。我們需要使用最新的Docker版本,因?yàn)樗cGPU兼容。請(qǐng)使用以下命令檢查默認(rèn)的運(yùn)行時(shí):

sudo docker info | grep Runtime

您還可以通過(guò)檢查docker daemon來(lái)查看當(dāng)前運(yùn)行時(shí):

cat /etc/docker/daemon.json

現(xiàn)在,將docker daemon的內(nèi)容更改為以下內(nèi)容:

{
 "default-runtime": "nvidia",

"runtimes": {

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

} }

}
在這里插入圖片描述

編輯daemon.json后,重新啟動(dòng)docker服務(wù)。然后,您應(yīng)該能夠看到Nvidia的默認(rèn)運(yùn)行時(shí)。

sudo systemctl restart docker
sudo docker info | grep Runtime

在安裝K3s之前,請(qǐng)運(yùn)行以下命令:

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

這將確保我們使用的是最新版本。

要安裝K3s,請(qǐng)使用以下命令:

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

執(zhí)行以下命令檢查安裝的版本:

sudo kubectl version

現(xiàn)在,讓我們使用Deepstream SDK示例容器創(chuàng)建一個(gè)pod,然后運(yùn)行示例應(yīng)用。

使用您選擇的文本編輯器創(chuàng)建一個(gè)pod manifest文件。將以下內(nèi)容添加到文件中:

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創(chuàng)建pod。

sudo kubectl apply -f pod.yaml

pod使用的是deepstream-l4t:5.0-20.07-samples container,需要先拉取它,然后才能啟動(dòng)容器。

使用sudo kubectl get pods命令檢查pod狀態(tài)。請(qǐng)等待它開(kāi)始運(yùn)行。

部署和運(yùn)行Pod后,請(qǐng)使用以下命令登錄并取消設(shè)置Pod內(nèi)部的Display變量:

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

“unset DISPLAY”命令應(yīng)在pod中運(yùn)行。

輸入以下命令,以在pod內(nèi)運(yùn)行示例應(yīng)用:

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

視頻流可能要花幾分鐘才能開(kāi)始運(yùn)行。

您的視頻分析應(yīng)用程序現(xiàn)在正在使用網(wǎng)絡(luò)攝像頭輸入端,并在連接到Jetson Nano board上的顯示屏上提供實(shí)時(shí)結(jié)果。要退出該應(yīng)用,只需按在Pod中按“q”。

要退出pod,請(qǐng)使用“exit”命令。

要獲取Jetson Nano的完整硬件詳細(xì)信息,請(qǐng)使用以下命令運(yùn)行另一個(gè)Pod:

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

總結(jié)

正如我們?cè)谏衔闹兴吹降?,使用基于Arm的NVIDIA Jetson Nano和K3s可以在邊緣無(wú)縫運(yùn)行AI和進(jìn)行數(shù)據(jù)分析。這些花銷低同時(shí)功能強(qiáng)大的設(shè)備可以快速部署,并且提供一種高效的方式進(jìn)行視頻分析,實(shí)現(xiàn)邊緣AI。

在實(shí)踐過(guò)程中,如果有任何問(wèn)題,也歡迎掃描文末二維碼,添加小助手為好友,進(jìn)入K3s官方技術(shù)交流群與各位K3s用戶一起交流。

作者簡(jiǎn)介
Pranay Bakre
Arm的首席解決方案工程師。他熱衷于將Arm的Neoverse平臺(tái)與Kubernetes、Docker等云原生技術(shù)相結(jié)合。他喜歡與合作伙伴一起在基于Arm的云和邊緣產(chǎn)品上搭建各類解決方案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容