在 GCP 搭建使用 NVIDIA GPU 做機器學習的 K8S 集群

來源:Google Cloud
作者:Google Cloud
時間:2021-04-12
3933
本文介紹如何使用 NVIDIA 官方推薦工具和 K8S 插件,在谷歌云 GCP 的虛機上搭建用于機器學習任務的帶顯卡 K8S 集群。

本文介紹如何使用 NVIDIA 官方推薦工具和 K8S 插件,在谷歌云 GCP 的虛機上搭建用于機器學習任務的帶顯卡 K8S 集群。

另外,也介紹了如何更新 K8S 插件,來解決當帶顯卡 Node 維護重啟時,由于 GPU ID 發(fā)生變化而導致訓練任務無法繼續(xù)的問題。該問題的描述可以參考在線記錄。注意,該問題在使用各公有云虛機時都可能發(fā)生,觸發(fā)原因是虛機維護重啟后,從一臺宿主機遷移到另一臺宿主機,所配置的顯卡實例也隨之改變,顯卡 ID 變化,而 NVIDIA K8S 插件在 0.9.0 版本之前不能容忍這個變化,而導致上層 Tensorflow 等應用無法在重啟后獲取到顯卡。此問題在谷歌云 GKE 環(huán)境中不會發(fā)生,因為谷歌云 GKE 使用的是定制版插件。

本文搭建一個包含一臺 Master 和一臺 Node 的 K8S 集群,其中 Node 上配置一塊 NVIDIA T4 顯卡。之后復現(xiàn)顯卡 ID 問題,并介紹升級環(huán)境解決問題的步驟。

創(chuàng)建虛機實例

在谷歌云控制臺創(chuàng)建以下配置的虛機。注意確認使用的項目和區(qū)域有充足的 CPU 和 GPU quota。

●      一臺 Master 節(jié)點

○      k8s-m

○      n1-standard-1

○      Ubuntu LTS 16.04

●      一臺 Node 節(jié)點

○      k8s-t4-node

○      n1-standard-1

○      Ubuntu LTS 16.04

○      T4 GPU

創(chuàng)建完后確認 master 和 node 都運行正常。

搭建 K8S 集群

參考 NVIDIA 官方文檔

https://docs.nvidia.com/datacenter/cloud-native/kubernetes/install-k8s.html#option-1-installing-kubernetes-using-deepops

以及 DeepOps 文檔

https://github.com/NVIDIA/deepops/tree/master/docs/k8s-cluster

首先,登錄到 k8s-m,執(zhí)行以下命令安裝 Ansible 工具

下載并初始化 DeepOps 腳本

創(chuàng)建 SSH 密鑰對,并將公鑰配置為 Node 的允許密鑰。注意要將私鑰配置為其它用戶不可訪問。

參照下面截圖更改 Ansible 配置文件,指定 K8S 的 master 和 node 信息,以及密鑰對信息

驗證 Ansible 配置

啟動 Ansible 來安裝 K8S 集群

安裝完成后,用下面命令來驗證集群運行正常

在 gpu01 節(jié)點上運行以下命令確認容器環(huán)境可以識別到顯卡。

注意:Image 版本需要參考官方文檔

至此,K8S 集群安裝完畢。現(xiàn)在可以部署機器學習訓練或預測任務在此集群。

復現(xiàn)節(jié)點重啟后 GPU Device ID 變化問題

在剛搭建好的 K8S 集群 master 上查看 NVIDIA K8S Plugin 的版本

根據(jù)輸出,此集群上使用的 NVIDIA K8S 插件為 0.7.0 版本。此版本會產(chǎn)生重啟后顯卡 Device ID 變化而找不到顯卡的問題。

查看當前顯卡 Device ID 。

用下面命令用序號查看顯卡設備。

安裝并運行測試程序容器 nvidia-loop 。其功能是持續(xù)占用顯卡并不斷打印 GPU Device ID 。

查看 nvidia-loop 的日志

以上命令都應該成功無錯。到此都不會出現(xiàn)任何問題。

使用以下命令模擬 GCP 虛機維護事件。

命令完成后 1 小時,節(jié)點會進行重啟( 1 小時延遲因為需要完成一個重啟前一小時的通知消息)。重啟后node虛機應該會遷移到另一臺宿主機并配置不同 ID 的顯卡。此時可以登錄到 Node來查看 GPU Device ID。

也可以使用 cuda 鏡像來測試在容器內(nèi)獲取 GPU Device ID,也一樣發(fā)生了變化

可以看到 Device ID 發(fā)生了變化。

此時查看 nvidia-loop 容器的狀態(tài),由于 Device UUID 發(fā)生了變化,導致不斷 crash。

查看 pod 描述,可以看到具體錯誤為 UUID 變化。

修復節(jié)點重啟后 GPU Device ID 變化問題

下面步驟驗證 NVIDIA K8S Plugin release 0.9.0 修復了節(jié)點重啟后 Device ID 變化的問題。

首先安裝 NVIDIA K8S Plugin 的 0.9.0 版本,并刪除之前版本。

確認安裝成功

更新 Node上nvidia-runtime 的配置文件,允許 volume mount (否則測試容器 nvidia-loop 會運行失敗)。

現(xiàn)在 K8S 插件更新完畢??梢则炞C問題修復。

再次使用以下命令模擬 GCP 虛機維護事件。

等一小時后維護重啟完成后,查看 nvidia-loop 容器狀態(tài),應該是 Running,而不會再因為維護重啟而導致崩潰。

也可以查看 nvidia-loop 的日志,確保輸出 ID 正常。

kubectl logs nvidia-loop --tail=5

參考文檔

[1] Using the GPU id instead of uuid in the NVIDIA device plugin

立即登錄,閱讀全文
原文鏈接:點擊前往 >
文章來源:Google Cloud
版權說明:本文內(nèi)容來自于Google Cloud,本站不擁有所有權,不承擔相關法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關文章
新版GKE可管理最多6.5萬集群節(jié)點,超越AWS、Azure 10倍
新版GKE可管理最多6.5萬集群節(jié)點,超越AWS、Azure 10倍
Google Cloud公布最新Google Kubernetes Engine版本,號稱可支持最高達65,000個節(jié)點的服務器集群,以執(zhí)行超大型AI模型。
Google Cloud
云服務
云計算
2024-11-15
Google Cloud細說AI變現(xiàn)途徑:用戶一年暴增10倍
Google Cloud細說AI變現(xiàn)途徑:用戶一年暴增10倍
Google云計算平臺(Google Cloud)首席執(zhí)行官Thomas Kurian在高盛舉行的會議上,說明了該公司究竟是通過哪些途徑將AI變現(xiàn)。
Google Cloud
谷歌云
云計算
2024-09-13
云計算平臺GCP的服務存在權限提升漏洞,未經(jīng)授權的攻擊者可借此訪問敏感數(shù)據(jù)
云計算平臺GCP的服務存在權限提升漏洞,未經(jīng)授權的攻擊者可借此訪問敏感數(shù)據(jù)
7月24日安全企業(yè)Tenable披露影響Google Cloud Platform(GCP)的權限提升漏洞ConfusedFunction,這項弱點發(fā)生在名為Cloud Functions的無服務器運算服務,以及稱作Cloud Build的CICD渠道服務。
Google Cloud
谷歌云
云計算
2024-07-27
Gemini為核心,Google云計算AI戰(zhàn)略聚焦云服務和生產(chǎn)力GAI
Gemini為核心,Google云計算AI戰(zhàn)略聚焦云服務和生產(chǎn)力GAI
過去一年,企業(yè)GAI應用的風潮席卷全球,成了三大公有云積極搶攻的新戰(zhàn)場,微軟靠著OpenAI助攻,去年在這場云計算GAI大戰(zhàn)中取得先機,而Google后來居上,靠著自家PaLM模型和GAI生產(chǎn)力工具來迎戰(zhàn),AWS則是到去年底年會上,對于企業(yè)GAI應用布局才有比較完整的布局與披露。
Google Cloud
谷歌云
云計算
2024-05-04
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家