如何在NVIDIA Jetson AGX Orin開(kāi)發(fā)工具包上訓(xùn)練nanoVLM
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在這篇博文中,我將向您展示如何在NVIDIA Jetson AGX Orin開(kāi)發(fā)工具包上訓(xùn)練hug Face的納米o(hù)vlm。
視覺(jué)語(yǔ)言模型(vlm)是功能強(qiáng)大的人工智能模型,可以從圖像和文本中學(xué)習(xí),使它們能夠執(zhí)行視覺(jué)問(wèn)題回答、圖像字幕和多模態(tài)推理等任務(wù)。
大多數(shù)vlm的總體結(jié)構(gòu)如下:
目前,llm和vlm正在Nvidia/AMD gpu的巨大集群上進(jìn)行訓(xùn)練。這就提出了一個(gè)問(wèn)題:個(gè)人如何使用消費(fèi)級(jí)硬件訓(xùn)練模型?
所以,我們很幸運(yùn),hugs Face最近開(kāi)源了nanoVLM項(xiàng)目,專門為設(shè)備上的訓(xùn)練和推理設(shè)計(jì)了一個(gè)輕量級(jí)的純PyTorch實(shí)現(xiàn)。我們可以訓(xùn)練一個(gè)小規(guī)模的VLM (222M參數(shù)),它結(jié)合了一個(gè)ViT編碼器(谷歌/siglip-base-patch16-224)和一個(gè)LLM (HuggingFaceTB/SmolLM2-135M)來(lái)理解文本和視覺(jué)輸入。它使用HuggingFaceM4/the_cauldron數(shù)據(jù)集的數(shù)據(jù)。支持檢查點(diǎn),能夠從最近的檢查點(diǎn)恢復(fù)。nanoVLM:用純PyTorch訓(xùn)練VLM的最簡(jiǎn)單的存儲(chǔ)庫(kù)。
本教程將指導(dǎo)您完成使用Kubernetes直接在NVIDIA Jetson AGX Orin Developer Kit上運(yùn)行納米o(hù)vlm模型訓(xùn)練的過(guò)程。
在Nvidia Jetson AGX Orin上設(shè)置k3
使用NVIDIA容器運(yùn)行時(shí)支持安裝K3s:
這個(gè)命令安裝K3s,配置它使用Docker,設(shè)置kubecconfig文件權(quán)限,并禁用Traefik。——docker標(biāo)志很重要,因?yàn)樗_保K3s使用docker,它與NVIDIA容器運(yùn)行時(shí)兼容。
驗(yàn)證K3s集群是否正常運(yùn)行:
您應(yīng)該看到Jetson AGX Orin被列為集群中的一個(gè)節(jié)點(diǎn)。
這確認(rèn)您的單節(jié)點(diǎn)K3s集群是可操作的。
讓我們安裝k9,類似于Lens,它是一個(gè)通過(guò)CLI用戶界面的Kubernetes集群管理工具。我們可以使用下面的命令安裝k9s:
開(kāi)展培訓(xùn)工作
我們現(xiàn)在準(zhǔn)備開(kāi)始訓(xùn)練一個(gè)模型!
創(chuàng)建一個(gè)名為train的清單文件。并使用以下代碼填充它:
由于backoffLimit: 4, Kubernetes將重試pod最多4次。這對(duì)于控制批處理作業(yè)(如訓(xùn)練循環(huán))中的容錯(cuò)性非常有用,因?yàn)檫@些批處理作業(yè)可能由于暫時(shí)問(wèn)題而失敗。
要啟動(dòng)作業(yè),運(yùn)行命令:
有時(shí)豆莢不會(huì)立即啟動(dòng)。因此,您將在“READY”列中看到0/1,在“STATUS”列中看到Pending。如果你想查看你的pod的詳細(xì)狀態(tài),運(yùn)行這個(gè)命令:
我們還可以用k9檢查NanoVLM吊艙。
您應(yīng)該看到類似于下面的輸出:
檢查任何啟動(dòng)問(wèn)題的日志。
記住將POD_NAME替換為訓(xùn)練pod的實(shí)際名稱。
一旦培訓(xùn)結(jié)束,您的工作狀態(tài)將顯示“完成”。下面是輸出的一個(gè)例子:
您還將看到類似于下面的輸出,顯示訓(xùn)練進(jìn)度:
日志還將提供對(duì)訓(xùn)練進(jìn)度的洞察,包括模型加載細(xì)節(jié)、參數(shù)計(jì)數(shù)和性能度量。
來(lái)自wandb的趨勢(shì)將提供這些指標(biāo)隨時(shí)間變化的可視化表示。如果精度提高了,模型將被檢查點(diǎn)并保存在本地。
這種特殊的訓(xùn)練持續(xù)了大約1天20小時(shí),完成了5個(gè)階段。MMStar的精度為0.1013。這不是為了達(dá)到最好的模型精度,而是為了驗(yàn)證Nvidia Jetson Orin Dev Kit可以使用Kubernetes設(shè)置處理訓(xùn)練過(guò)程的計(jì)算需求。
訓(xùn)練成功后,我們可以將您新訓(xùn)練的模型上傳到“擁抱臉”,以便分享和將來(lái)使用。使用以下Python代碼片段,確保你的檢查點(diǎn)路徑是正確的:
接下來(lái),使用上傳的模型進(jìn)行推理,執(zhí)行以下命令,如果不相同,將shakhizat/nanoVLM-222M替換為實(shí)際的模型ID:
這是我們的演示圖像:
下面是使用輸入圖像運(yùn)行推理時(shí)預(yù)期輸出的示例:
對(duì)于生產(chǎn)就緒的模型來(lái)說(shuō),這不是一個(gè)好結(jié)果。然而,這個(gè)特殊練習(xí)的主要目標(biāo)并不是達(dá)到最先進(jìn)的精度。相反,這項(xiàng)培訓(xùn)工作是一個(gè)至關(guān)重要的可行性檢查,看看我們是否可以成功地在NVIDIA Jetson AGX Orin開(kāi)發(fā)工具包上運(yùn)行NanoVLM模型培訓(xùn)過(guò)程。這一成功的概念驗(yàn)證為進(jìn)一步優(yōu)化和開(kāi)發(fā)設(shè)備上VLM培訓(xùn)打開(kāi)了大門。
本文編譯自hackster.io