在 TAO 提供的數(shù)據(jù)類范例中,每個腳本的第一個步驟都是環(huán)境配置(0. Set up env variables and map drives),包括要求用戶提供在 NGC 所生成的密鑰,對后面訓(xùn)練的模型進行保護,以及指定要使用的 GPU 數(shù)量等等,這幾個設(shè)定都很直觀容易處理,但接下去的環(huán)境變量配置部分,就讓大部分初學(xué)者停滯不前,因為任何一項路徑配置錯誤,都會影響后面工作的正常進行,而每個實驗?zāi)_本所提供的說明,對初學(xué)者來的幫助并不大,很多新手按照其字面解釋去進行設(shè)定,但總是沒法調(diào)整到完全正確。
因此我們必須在大家執(zhí)行實驗之前,先以專文將這部分的配置說明清楚,然后提供一個最簡單的步驟,讓大家用最輕松的方法來進行配置。
本文使用范例的 detectnet_v2.ipynb 做示范,首先看一下第一指令塊中的設(shè)定內(nèi)容:
[ ] import os%env KEY=tlt_encode%env NUM_GPUS=1%env USER_EXPERIMENT_DIR=/workspace/tao-experiments/detectnet_v2%env DATA_DOWNLOAD_DIR=/workspace/tao-experiments/data# %env NOTEBOOK_ROOT=~/tao-samples/detectnet_v2os.environ["LOCAL_PROJECT_DIR"] = FIXMEos.environ["LOCAL_DATA_DIR"] = os.path.join(os.getenv("LOCAL_PROJECT_DIR", os.getcwd()),"data")os.environ["LOCAL_EXPERIMENT_DIR"] = os.path.join(os.getenv("LOCAL_PROJECT_DIR", os.getcwd()),"detectnet_v2")# The sample spec files are present in the same path as the downloaded samples.os.environ["LOCAL_SPECS_DIR"] = os.path.join(os.getenv("NOTEBOOK_ROOT", os.getcwd()),"specs")%env SPECS_DIR=/workspace/tao-experiments/detectnet_v2/specs
稍微整理一下,除了KEY與 NUM_GPUS 兩個變量之外,共有7個與路徑有關(guān)的變量:
-
USER_EXPERIMENT_DIR
-
DATA_DOWNLOAD_DIR
-
LOCAL_PROJECT_DIR
-
LOCAL_DATA_DIR
-
LOCAL_EXPERIMENT_DIR
-
LOCAL_SPECS_DIR
-
SPECS_DIR
其實稍微整理一下就更容易理解,下表就是將這7個變量分為兩組,以 “LOCAL_” 開頭的屬于 “容器外” 用途,另外 3 個屬于容器內(nèi)用途。
|
用途 |
容器外(主機上) |
容器內(nèi)(沿用TLT的習(xí)慣) |
|
項目工作位置 |
LOCAL_PROJECT_DIR |
|
|
存放模型訓(xùn)練輸出結(jié)果 |
LOCAL_EXPERIMENT_DIR |
USER_EXPERIMENT_DIR |
|
存放數(shù)據(jù)集的路徑 |
LOCAL_DATA_DIR |
DATA_DOWNLOAD_DIR |
|
配置文件存放路徑 |
LOCAL_SPECS_DIR |
SPECS_DIR |
什么是容器內(nèi)與容器外?前面提過 TAO 用兩套獨立的 Docker 容器,分別為視覺類與對話類提供模型訓(xùn)練功能,并透過 TAO 啟動器的 CLI 指令執(zhí)行各項任務(wù)。
雖然我們所有操作都在容器外的宿主機上,例如在指令終端下達 “tao detectnet_v2 train ...”,或者在 Jupyter 交互環(huán)境里執(zhí)行 “!taodetectnet_v2 train ...” 指令,但是 TAO 啟動器會將這些指令傳遞到容器,在后臺為我們執(zhí)行對應(yīng)的任務(wù)。
這種處理方式的最大好處是,讓不懂 Docker 的初學(xué)者完全無需理會容器技術(shù),只要專注于 “模型訓(xùn)練” 的重點工作就行,如此就能讓 TAO 的普及程度更快與更廣,這也是 TAO 工具的一項非常重要意義。
但為何需要使用兩套路徑來處理呢?全部都在容器內(nèi)執(zhí)行不是更加簡單?這里有個最嚴(yán)肅的問題是 “容器的生命周期” ,如果將數(shù)據(jù)保留在容器內(nèi)處理的話,一旦容器關(guān)閉或銷毀時,我們所有實驗數(shù)據(jù)都將付之一炬,這是一項大家都承擔(dān)不起的風(fēng)險,因此我們必須將所有的數(shù)據(jù)存放在容器外面,然后透過路徑映射 (mapping) 的方式來處理。
其次就是對于數(shù)據(jù)整理與文件修改的能力,在容器內(nèi)操作是相對不方便的。要知道在執(zhí)行模型訓(xùn)練之前,通常得先下載數(shù)據(jù)集的壓縮文件、移動文件、進行解壓縮、修改配置文件等等,這些任務(wù)在宿主機上操作是相對輕松的。
好了,當(dāng)我們清楚 TAO 的視覺類模型訓(xùn)練腳本中,存在容器內(nèi)與容器外兩組環(huán)境路徑的原因之后,接著就來看該如何設(shè)置與映射。
我們將前面的列表進行展開,前面 4 個是容器外的變量、后面 3 個是容器內(nèi)變量:
|
環(huán)境變量 |
設(shè)定值 |
|
LOCAL_PROJECT_DIR |
需要設(shè)置 |
|
LOCAL_EXPERIMENT_DIR |
$LOCAL_PROJECT_DIR/<項目名> |
|
LOCAL_DATA_DIR |
$LOCAL_PROJECT_DIR/data |
|
LOCAL_SPECS_DIR |
<執(zhí)行腳本所在目錄>/specs |
|
USER_EXPERIMENT_DIR |
/workspace/tao-experiments/<項目名> |
|
DATA_DOWNLOAD_DIR |
/workspace/tao-experiments/data |
|
SPECS_DIR |
/workspace/tao-experiments/<項目名>/specs |
假如在執(zhí)行格內(nèi)的變量按照上表的順序去排列,事情就會變得非常單純。
事實上,從頭到尾我們只要將 “LOCAL_PROJECT_DIR” 設(shè)置為”執(zhí)行腳本所在目錄”,那么后面三個容器外變量就立即建立好對應(yīng)關(guān)系,我們完全不需要做任何處理理會。至于容器內(nèi)的三個變量,每個腳本的配置規(guī)則都是一樣,也就是不需要去改變。
把上面的對應(yīng)關(guān)系了解清楚之后,整個狀況就變得非常簡單,現(xiàn)在回頭看看第一個指令塊,里面需要輸入的變量其實只有以下三個:
-
%env KEY= <自己在NGC上申請的秘鑰>
-
%env NUM_GPUS= <根據(jù)設(shè)備配置,給定調(diào)用的GPU數(shù)量>
-
os.environ["LOCAL_PROJECT_DIR"] = os.getcwd()
其他 6 個變量完全不做任何修改,這樣就能夠順暢地跑動后面的指令塊。
接下去的工作就是執(zhí)行 “路徑映射” 任務(wù),為容器內(nèi)外的路徑建立對應(yīng)的關(guān)系。幾乎所有訓(xùn)練腳本都采用下面的映射方式:
[ ] # Define the dictionary with the mapped drivesdrive_map = {"Mounts": [# Mapping the data directory{"source": os.environ["LOCAL_PROJECT_DIR"],"destination": "/workspace/tao-experiments"},# Mapping the specs directory.{"source": os.environ["LOCAL_SPECS_DIR"],"destination": os.environ["SPECS_DIR"]},]}
執(zhí)行這個路徑映射的指令塊之后,會將這些值寫入 “~/.tao_mounts.json” 文件里面,這是 TAO 啟動器每次調(diào)用容器時都需要參考的配置文件,但是這個文件是 “唯一” 的,也就是同一時間只會存在一組容器內(nèi)外的路徑映射關(guān)系,這表示系統(tǒng)不能同時執(zhí)行兩個以上的模型訓(xùn)練腳本,這點也請務(wù)必牢記。
緊跟著的 “1.Install the TAO launcher” 步驟可以直接跳過,因為我們在前面已經(jīng)帶著大家安裝好 TAO 啟動器,這里頂多執(zhí)行 “!taoinfo” 指令,確認(rèn)一下是否回應(yīng)正確訊息。
現(xiàn)在就可以開始進行 TAO 所提供的各種神經(jīng)網(wǎng)絡(luò)的模型訓(xùn)練腳本。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4844瀏覽量
108218 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5696瀏覽量
110147 -
變量
+關(guān)注
關(guān)注
0文章
616瀏覽量
29582
原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(57):視覺類腳本的環(huán)境配置與映射
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
i.MXRT1173跨界處理器能支持2GB NOR閃存嗎?
如何在NVIDIA Jetson平臺上運行最新的開源AI模型
NVIDIA Jetson系列開發(fā)者套件助力打造面向未來的智能機器人
如何在NVIDIA Jetson AGX Thor上通過Docker高效部署vLLM推理服務(wù)
NVIDIA Jetson AGX Thor Developer Kit開發(fā)環(huán)境配置指南
BPI-AIM7 RK3588 AI與 Nvidia Jetson Nano 生態(tài)系統(tǒng)兼容的低功耗 AI 模塊
BPI-AIM7 RK3588 AI與 Nvidia Jetson Nano 生態(tài)系統(tǒng)兼容的低功耗 AI 模塊
NVIDIA Jetson AGX Thor開發(fā)者套件重磅發(fā)布
NVIDIA Nemotron Nano 2推理模型發(fā)布
基于 NVIDIA Blackwell 的 Jetson Thor 現(xiàn)已發(fā)售,加速通用機器人時代的到來
NVIDIA Jetson Nano 2GB:視覺類腳本的環(huán)境配置與映射
評論