Cloud-native 是與 Edge AI 相關的最重要的概念之一。這是因為 cloud native 為應用程序部署提供了大規模支持。它還提供了性能、彈性和易管理性,這些都是 Edge AI 的關鍵功能。云本機和邊緣 AI 如此交織,以至于我們相信 Edge AI 的未來是云本地的 。
這篇文章概述了云本機組件以及準備好應用程序云本機的步驟。我將向您展示如何在 NVIDIA Fleet Command ,這是一種云服務,用于在邊緣部署和管理應用程序,采用云本機原則構建。
如果遵循所有這些步驟,結果就是可以輕松地在 Fleet Command 和其他云本機部署和管理平臺上部署云本機應用程序。
什么是云本機?
Cloud native 是一種開發和運行應用程序的方法,它包含了云計算交付模型的靈活性、可伸縮性和彈性。云本機方法允許組織構建具有彈性和可管理性的應用程序,從而允許更靈活的應用程序部署。
云本機開發的關鍵原則有:
微服務
容器
舵圖
CI / CD
DevOps 公司
什么是微服務?
微服務是軟件開發的一種形式,其中應用程序被分解為更小的、自包含的服務,這些服務相互通信。這些自包含服務是獨立的,這意味著它們中的每一個都可以自己更新、部署和擴展,而不會影響應用程序中的其他服務。
微服務使開發應用程序更快,更新、部署和擴展這些更新的過程更容易。
什么是容器?
容器是一個軟件包,它包含在任何計算環境中可靠運行應用程序所需的所有信息和依賴項。容器可以輕松地部署在不同的操作系統上,并提供可移植性和應用程序隔離。
整個應用程序可以被容器化,但應用程序的各個部分也可以被容器化。例如,容器與微服務配合得非常好,在微服務中,應用程序被分解為小型、自給自足的組件。每個微服務都可以在容器中打包、部署和管理)。此外,可以在集群中部署和管理多個容器。
容器非常適合邊緣部署,因為它們使您能夠將應用程序、依賴項和環境變量一次性安裝到容器映像中,而不是安裝在應用程序運行的每個系統上,從而使管理多個部署變得非常簡單。
這對于邊緣交換非常重要,因為一個組織可能需要在一個巨大的物理距離上安裝和管理數百或數千個不同的部署,因此盡可能多地自動化部署過程至關重要。
什么是舵圖?
對于復雜的容器部署,例如跨多個站點和多個系統部署多個應用程序,許多組織使用 Helm charts 。 Helm 是一個運行在 Kubernetes (稍后討論)之上的應用程序包管理器。沒有它,您必須為每個工作負載手動創建單獨的 YAML 文件,指定部署所需的所有詳細信息,從 pod 配置到負載平衡。
Helm charts 通過允許組織定義可重用的部署模板,以及版本控制和在部署過程中定制應用程序等其他好處,消除了這一繁瑣的過程。
什么是 CI / CD ?
持續集成( CI )使您能夠協作地迭代和測試新代碼,通常是通過將其集成到共享存儲庫中。
連續交付( CD )是從 CI 階段獲取新構建并將其加載到存儲庫的自動化過程,在存儲庫中可以輕松地將其部署到生產中。
在將新代碼集成到現有解決方案中時,適當的 CI / CD 流程可以避免服務中斷。
什么是 DevOps ?
術語 DevOps 指的是合并開發人員和運營團隊的過程,以簡化開發和向客戶交付應用程序的過程。
DevOps 對于云本地技術非常重要,因為這兩個概念的理念都集中于持續、輕松地向客戶提供解決方案,并創建端到端的開發管道以加速更新和迭代。
什么是云本機管理?
既然已經解釋了云本機的核心原則,那么討論如何在生產中管理云本機應用程序就很重要了。
編排容器的主要平臺是 Kubernetes 。 Kubernetes 是開源的,允許組織部署、管理和擴展容器化應用程序。
一些組織已經在 Kubernetes 之上構建了企業級解決方案,以提供獨特的優勢和功能:
Red Hat OpenShift
VMWare Tanzu
Azure Kubernetes 服務
NVIDIA Fleet Command
為任何 Kubernetes 平臺準備應用程序的過程,無論是 Kubernetes 本身還是構建在 Kubernetes 之上的解決方案,本質上都是相同的。每個解決方案都有特定的配置步驟,以確保組織的云本機應用程序可以有效運行而不會出現問題。
使用 NVIDIA Fleet Command 部署云本機應用程序
本節以 NVIDIA Fleet Command 為例介紹配置過程,并指出所需的具體配置。
第 0 步:理解 Fleet Command
Fleet Command 是一種用于跨不同邊緣位置管理應用程序的云服務。它基于 Kubernetes 構建并部署云本機應用程序,因此將應用程序放到 Fleet Command 上的步驟與將應用程序放到其他云本機管理平臺上的步驟相同。
假設應用程序已經構建,將該應用程序安裝到 Fleet Command 上只需四個步驟:
將應用程序容器化
確定應用程序要求
建立舵圖
在 Fleet Command 上部署
步驟 1 :將應用程序容器化
Fleet Command 將應用程序部署為容器。通過使用容器,您可以在同一系統上部署多個應用程序,還可以輕松地跨多個系統和位置擴展應用程序。此外,所有依賴項都打包在容器中,因此您知道應用程序將在數千個系統中執行相同的操作。
為應用程序構建容器很容易。有關更多信息,請參閱 容器裝卸工指南 。
下面是一個 Dockerfile 示例,用于使用 NVIDIA CUDA 基本映像構建的自定義深度學習容器:
FROM nvcr.io/nvidia/cuda:11.3.0-base-ubuntu18.04 CMD nvidia-smi #set up environment RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y curl RUN apt-get install unzip RUN apt-get -y install python3 RUN apt-get -y install python3-pip #copies the application from local path to container path COPY app/ /app/ WORKDIR /app #Install the dependencies RUN pip3 install -r /app/requirements.txt ENV MODEL_TYPE='EfficientDet' ENV DATASET_LINK='HIDDEN' ENV TRAIN_TIME_SEC=100 CMD ["python3", "train.py"]
在本例中,/app/包含所有源代碼。為容器創建 Dockerfile 后,可以使用該文件構建容器,然后將其上載到云中的私有注冊表,以便可以輕松地將容器部署到任何位置。
步驟 2 :確定應用程序需求
容器完成后,需要確定應用程序正常運行所需的內容。這通常涉及到考慮安全、網絡和存儲需求。
Fleet Command 是一個安全的軟件堆棧,它能夠控制應用程序在其部署的系統中可以訪問哪些硬件和軟件。因此,您的應用程序應該圍繞以下安全最佳實踐進行設計:
避免特權容器
將管理員和應用程序流量與存儲流量分離
最小化系統設備訪問
等等
圍繞這些安全需求設計應用程序部署,在以后配置網絡和存儲時牢記這些安全需求。
下一步是確定需要什么樣的網絡訪問需求,以及如何從容器中公開網絡。
通常,應用程序需要不同的端口和路由來訪問任何邊緣傳感器和設備、管理流量、存儲流量和應用程序(云)流量。這些端口可以使用NodePorts或更高級的 Kubernetes 網絡配置(如入口控制器)從 Fleet Command 公開。
最后,應用程序可能需要訪問本地或遠程存儲以保存持久數據。 Fleet Command 支持hostPath卷裝載功能。還可以使用其他 Kubernetes 功能,例如持久卷和持久卷聲明。
如果需要,可以在 Fleet Command 系統上單獨部署本地路徑或 NFS 供應器,以配置本地或遠程存儲。如果應用程序支持此功能,還可以將其配置為連接到云存儲。
有關更多信息,請參閱 Fleet Command 應用程序開發指南 。
步驟 3 :建立舵圖
既然應用程序需求已經確定,現在就應該創建一個 Helm chart 。
與容器一樣,Fleet Command 上的 Helm 圖表也有一些特定要求。以下是一個 NVIDIA DeepStream Helm 圖表 的示例,作為參考,以幫助構建部署在 Fleet Command 中的舵圖。
要從頭開始創建您自己的頭盔圖表,請首先運行以下命令創建示例頭盔圖表。此命令使用 NGINX Docker 容器生成一個示例舵圖,然后可以為任何應用程序自定義該容器。
$ helm create deepstream
創建舵圖后,該圖的目錄結構如下所示:
deepstream |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml
接下來,修改這些值。具有以下突出顯示值的 yaml 文件,用于配置 DeepStream 容器和網絡的示例舵圖。
image: repository: nvcr.io/nvidia/deepstream pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: 5.1-21.02-samples imagePullSecrets: [] nameOverride: "" fullnameOverride: "" serviceAccount: # Specifies whether a service account should be created create: false # Annotations to add to the service account annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template name: "" podAnnotations: {} podSecurityContext: {} # fsGroup: 2000 securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 service: type: NodePort port: 8554 nodeport: 31113
創建自定義舵圖后,可以將其上載到容器旁邊的專用注冊表。
步驟 4 :在 Fleet Command 上部署
將應用程序容器化并構建舵圖后,將應用程序加載到 Fleet Command 。應用程序加載到 NGC 上,這是一個用于 GPU 加速的應用程序、模型和容器的中心,然后可以在 Fleet Command 上部署。應用程序可以是公共的,但也可以托管在私有注冊表中,在該注冊表中,訪問權限僅限于組織。
整個過程將在 Fleet Command 用戶指南 ,但在 Fleet Command 演示視頻 。
獎勵步驟:加入我們的合作伙伴生態系統
最近, NVIDIA 宣布擴大 NVIDIA Metropolis 合作伙伴計劃 現在包括 Fleet Command 。 Metropolis 的合作伙伴如果將其應用程序配置為部署在 Fleet Command 上,則可以免費訪問該解決方案,以便為客戶操作 POC 。通過使用 Fleet Command ,合作伙伴無需在客戶環境中構建定制的解決方案進行評估。他們可以使用 Fleet Command 并在幾分鐘內將其應用程序部署到客戶站點。
開始使用云本機
這篇文章介紹了云本機技術的核心原則,以及如何使用 Fleet Command 讓應用程序做好云本機準備。
您的下一步是獲得在云本機環境中部署和管理應用程序的實踐經驗。 NVIDIA LaunchPad 可以提供幫助。
LaunchPad 提供對 Fleet Command 實例的即時、短期訪問,以便在實際服務器上輕松部署和監控實際應用程序。動手實驗室將引導您完成整個過程,從基礎設施配置和優化到在適用用例的上下文中部署應用程序,例如在網絡邊緣部署 vision AI 應用程序。
關于作者
Troy Estes 是 NVIDIA Edge 和企業計算解決方案的產品營銷經理。在加入 Edge & Enterprise 業務部門之前,特洛伊曾在自主汽車業務部門和 NVIDIA 電網產品集團從事營銷活動和支持產品 GTM 。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
4981瀏覽量
102994 -
CUDA
+關注
關注
0文章
121瀏覽量
13620 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113
發布評論請先 登錄
相關推薦
評論