在NVIDIA Jetson集群上運行集群管理軟體K3s

2021-02-25 GPUS開發者

本文是這個系列的第三部分。

我們回顧一下前兩個部分:

開箱篇:巴掌大的空間可以組成一個Jetson集群?讓我來揭秘(1)

運行MPI:巴掌大的空間可以組成一個Jetson集群?讓我來揭秘(2)

這次我們以Kubernet的輕量級管理工具K3S在這個4節點設備上搭建Docker容器集群管理功能,主要目的如下:

1. Docker容器是軟體發展的大趨勢,也包括人工智慧應用

2. Kubernet是目前作為Docker領域普及度最高的管理方案

3. K3S輕量級管理工具,使用資源更節省、安裝更容易。更適合嵌入式AIOT平臺的應用

本實驗以一片Xavier NX作為master節點,以及3片Jetson Nano 4GB作為Worker節點,所有設備的開發環境均為Jetpack 4.4.1版本,上面都預安裝好Docker 1.19版與nvidia-docker2管理工具。

過程中需要從NGC( ngc.nvidia.com)下載匹配Jetpack 4.4.1的NVIDIA l4t-ml:r32.4.4-py3鏡像來做實驗,因為這個鏡像完整地支持多種深度學習應用框架與Jupyter互動式環境,只要一道指令

集群環境說明:

在Seeed設備中指派一個節點擔任 Master角色,其他擔任worker角色。本範例各節點配置如下:(IP部分請根據自己的環境去給定)

將上面四個IP與 Host Name 全部加入四個節點內的 /etc/hosts 文件裡

127.0.0.1      localhost

127.0.1.1      node3<= 這臺設備自己的 hostname

# 在下面添加本集群所有節點的 IP 與 Hostname

xx.xx.xx.30     node0

xx.xx.xx.31     node1

xx.xx.xx.32     node2

xx.xx.xx.33     node3

(存檔)

這樣的好處,就是後面的執行操作可以直接使用每個節點的 hostname而不用去記IP

用 K3S 搭建Nano管理集群

執行指令如下:

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

檢測是否安裝完成:

docker images

sudo kubectl get node

測試能否執行計算,執行一個第三方打包好的 cuda devicequery 容器:

sudo kubectl run -it nvidia --image=jitteam/devicequery --restart=Never

正確的話就會出現下面截屏:

1. 首先在Master(這裡是 node0)上找到k3s Server的密鑰(token),執行以下指令

sudo cat /var/lib/rancher/k3s/server/node-token

會看到一串類似下面長度的字符串(但一定是不一樣的):

2. 在每個 worker(node1/node2/node3)上執行

export k3s_token="<前一步顯示的node-token字符串>」

export k3s_url="https://<IP_OF_MASTER>:6443"# 這裡的<IP_OF_MASTER>為 node0 

然後執行下面指令:

curl -sfL https://get.k3s.io | K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -

* 上述步驟在每個worker節點上執行

3. 在 Master上執行下面指令,檢測 agent 安裝:

sudo kubectl get nodes

這就表示3個worker節點已經進入這個 k3s 管理範圍內,只不過還沒設定角色

4. 為每個 worker 設定角色:在 Master節點(node0)上執行角色設定指令

sudo kubectl label node node1 node2 node3 node-role.kubernetes.io/worker=worker

再檢測一下節點狀態:

sudo kubectl get nodes

這樣就完成這個 k3s 集群的搭建。

5. 檢查集群信息,執行以下指令:

sudo kubectl cluster-info

執行NVIDIA l4t-ml容器的tensorflow

1. 下載 l4t-ml:r32.4.4-py3 鏡像

docker pull nvcr.io/nvidia/l4t-ml:r32.4.4-py3

2. 撰寫 jetson-tf.yaml 

apiVersion: v1kind: Podmetadata:  name: jetson-tfspec:  restartPolicy: OnFailure  containers:  - name: nvidia-l4t-ml    image: "nvcr.io/nvidia/l4t-ml:r32.4.4-py3"    command: [ "/bin/bash", "-c", "--" ]    args: [ "while true; do sleep 30; done;" ]

3. 檢查 Pod 狀態,執行:

sudo kubectl get pod

確認目標 pod (這裡為 jetson-tf)處於 Running 狀態,表示可以使用,如果處於「ContainerCreating」狀態,請等候處理

4. 啟動這個容器,請執行

sudo kubectl exec -it jetson-tf -- python3

直接進入容器的 python3 互動式環境,然後執行以下代碼:

from tensorflow.python.client import device_libdevice_lib.list_local_devices()

就能顯示k3s容器裡面Tensorflow支持的GPU。

完整的測試可以進一步在 Python3 裡面執行以下代碼:

from tensorflow.python.client import device_libdef get_available_gpus():    local_device_protos = device_lib.list_local_devices()return [x.name for x in local_device_protos if x.device_type == 'GPU']
get_available_gpus()

執行後會得到以下輸出:

相關焦點

  • 15分鐘連接Jetson Nano與K8S,輕鬆搭建機器學習集群
    我將介紹使用GPU運行容器所需的NVIDIA docker設置,以及將Jetson連接到Kubernetes集群。在成功將節點連接到集群後,我還將展示如何在Jetson Nano上使用GPU運行簡單的TensorFlow 2訓練會話。K3s是一個輕量級Kubernetes發行版,其大小不超過100MB。在我看來,它是單板計算機的理想選擇,因為它所需的資源明顯減少。
  • 一文搞懂最火的 4 種邊緣集群管理方案的優劣勢
    1.背景邊緣計算平臺,旨在將邊緣端靠近數據源的計算單元納入到中心雲,實現集中管理,將雲服務部署其上,及時響應終端請求。然而,成千上萬的邊緣節點散布於各地,例如銀行網點、車載節點、加油站等基於一些邊緣設備管理場景,伺服器分散在不同城市,無法統一管理,為了優化集群部署以及統一管理,特探索邊緣計算場景方案。
  • 在k3s集群中部署TCP server服務
    # 在你漸漸迷失在你的人生道路上的時候,記得這句話:千萬不要因為走得太久,而忘記我們為什麼出發。
  • 使用 K3s 快速上手 Kubernetes 集群指南
    我們都知道 Kubernetes 是一個容器編排平臺,可以用來管理我們的容器集群。但是如果我們只是作為學習來使用的話,Kubernetes 未免有些太重了,有些人的本機估計都沒有辦法來運行完整的 3 實例(一個 master,兩個 agent)的集群環境。
  • 在樹莓派上構建你的專屬K8S集群!
    在本文中,我們將在家庭WIFI網絡中使用K3s在樹莓派上設置私有Kubernetes集群。我們的設置幾位簡單:單個master節點和worker節點。當然,如果你願意的話也可以添加更多節點。下圖是我們本文採用的大致架構:簡而言之,我們會藉助K3s綁定兩個樹莓派並且將他們連接到本地WLAN。
  • 使用 K3S 創建本地開發集群
    這使 K3s 可以自動化和管理複雜的集群操作,例如分發證書。外部依賴性已最小化(僅需要現代內核和 cgroup 掛載)。這意味著,您可以使用docker在單臺計算機上啟動多節點k3s集群。可以使用 Docker 在單臺計算機上啟動多節點 k3s 集群。
  • K3S入門指南-安裝部署
    Kubernetes(簡稱k8s)是Google在2014年6月開源的一個容器集群管理系統,使用Go語言開發,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效,Kubernetes提供了資源調度、部署管理、服務發現、擴容縮容、監控、維護等一整套功能。努力成為跨主機集群的自動部署、擴展以及運行應用程式容器的平臺。
  • 使用k3s部署輕量Kubernetes集群快速教程
    運行k3s的方式有很多,最快的方式是通過提供的bash腳本進行安裝,同時該腳本提供了一個便捷的方式來安裝到systemd或openrc。k3s-uninstall.sh要在Woker節點上安裝k3s,我們應該將K3S_URL以及K3S_TOKEN或K3S_CLUSTER_SECRET環境變量一起傳遞。
  • 再教一招NVIDIA Jetson TX2上的騷操作
    本文將演示如何在NVIDIA嵌入式開發平臺Jetson TX2上運行DeepStream SDK 。>    deepstream_sdk_on_jetson.tbz2    deepstream_sdk_on_jetson_models.tbz2        Product documentation        License file        This README所需的其他軟體:1.CUDA
  • 【用戶經驗分享】NVIDIA Jetson TX2開發板運行 jetson-inference 出現問題的終極解決辦法
    說說的遇到的情況吧,就是git clone  jetson-inference後,執行cmake ../後老是報nvidia.app.box.com連接不上,有的開發者的解決辦法是fan牆 ,然後下載,即使能翻出去,也是運氣好的情況下才能運行,最後不報錯。
  • 如何使用 NVIDIA Jetson 和 Amazon SageMaker 結合打造智能邊緣
    4.9.140-tegra  aarch64架構,所以NVIDIA給了我們一個microSD card的鏡像來燒錄到板子上,但由於推理框架、庫、軟體、驅動等等都要遵循其架構。鏡像燒錄參考:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#writeNIVIDA JetPack 可以實現在 Jetson 平臺上快速構建機器學習環境,JetPack 包括系統鏡像、TensorRT、CUDA、各種庫和 API、開發工具
  • 使用 AWS、k3s、Rancher、Vault 和 ArgoCD 在 Kubernetes 上集成 GitOps
    這篇文章中,我將帶領大家在 AWS 上設置一個 k3s Kubernetes 集群,然後集成 ArgoCD 和 Vault 創建一個安全的 GitOps。可以從這裡檢出基礎設施代碼和 Kubernetes unbrella 應用代碼。以下是我們將會使用的組件/工具:AWS – 底層基礎設施雲服務方案提供商。它將管理讓 Kubernetes 正常運行的虛擬機和網絡。
  • 如何設置一個生產級別的高可用etcd集群
    在我的實驗環境中,我運行著4臺Intel NUC迷你電腦,這4臺電腦上運行著Ubuntu 18.04,IP位址從10.0.0.60到10.0.0.63不等。我們將在IP位址為10.0.0.60、10.0.0.61和10.0.0.62的主機上安裝etcd。你在自己進行實踐時務必用你自己的一套地址來替換這些IP位址。
  • Docker Swarm集群管理
    1、Swarm原理Swarm集群由多個運行在swarm mode的docker主機組成,這些docker主機分為管理節點(manager)和工作節點(work node)。Swarm mananger節點負責整個集群的管理工作包括集群配置、服務管理等;Work node節點主要負責運行相應的服務來執行任務(task)。
  • K3s-初體驗
    K3s 相較於 K8s 其較大的不同點如下:存儲etcd 使用 嵌入的 sqlite 替代,但是可以外接 etcd 存儲apiserver 、schedule 等組件全部簡化,並以進程的形式運行在節點上網絡插件使用 Flannel, 反向代理入口使用 traefik 代替 ingress nginx默認使用 local-path-provisioner 提供本地存儲卷
  • K3s技術實踐訓練營,下周四開營!
    隨著Kubernetes技術的飛速發展,研發/運維人員對個性化集群的呼聲不斷提高,我們希望可以利用Kata-Containers結合K3s來幫助我們快速創建輕量級Kubernetes集群,以此為目的來滿足研發/運維人員對個性化集群及租戶獨享集群的需求。
  • 集群遷移自由來啦!4步將Rancher遷移至任意K8S發行版
    如果你要將 Rancher 遷移到一個新的 Kubernetes 集群,你不需要先在新集群上安裝 Rancher。如果將 Rancher 還原到一個已經安裝了 Rancher 的新集群上,可能會引起問題。要求使用與第一個集群中設置的伺服器 URL 相同的 hostname,本例為:rancher.kingsd.top。
  • NVIDIA Jetson TX2上的對象檢測
    因為人工智慧和深度學習革命從軟體領域轉向硬體領域。插件卡上的嵌入式系統,帶有處理器,內存,電源和外部接口。由於嵌入式系統專用於特定任務,因此設計工程師可以對其進行優化,以減小產品的尺寸和成本,並提高可靠性和性能。它們通常用於消費者,烹飪,工業,汽車,醫療,商業和軍事應用中。
  • 基礎指南:如何在K3s中配置Traefik?
    容器是一種將應用程式打包到標準化單元中的方法,以便該應用程式可以在雲中的任何伺服器上平穩運行。經常出現的問題是需要將外部客戶端的流量定向到雲內的容器中,同時確保外部客戶端不與雲綁定。針對該問題,一個常見的解決方案是創建一個Ingress controller。
  • NVIDIA論壇常見Jetson問題匯總(1)
    在我們對其進行測試時,默認情況下Intel雙頻無線- ac8265模塊在NX上不工作。(該模塊在Nano上運行良好。),NX (Jetpack 4.4)是否支持Intel雙頻無線- ac8265 ?如果是,我們應該做些什麼來讓它工作?如果沒有,是否有任何補丁或文檔使其工作?