[AI] [Nvidia Clara 4] NVIDIA Clara-Train-SDK 4.0 進行 2D 圖像 AI 模型訓練 (1)

Charlie Chen (陳慶裕)
9 min readFeb 27, 2022

接下來要進行說明的是 Clara 的訓練過程,本篇以2D圖像為訓練教材,請先準備好 Clara-Train-SDK:4.0 的 Docker image 來進行訓練。請參閱文章『[AI] [Nvidia Clara 4] NVIDIA Triton Inference Server 建置說明 (WSL2-Ubuntu 20.04)』,若已經下載過了,就直接往下步驟看。

由於訓練過程都是自己摸索出的結論,所以本篇只是闡述個人對於 Nvidia Clara 訓練的操作過程,所以config_aiaa.json大致上不會去改變任何作業流程,對於訓練的結果及辨識程度,則不在本篇研究之中。

— — — — — — — — — — — — — — — — — — — — — — —

訓練流程如下列表:

一、請至 Nvidia NGC 下載 Model

二、下載 Dataset 圖檔

三、調整 config

四、進行訓練

— — — — — — — — — — — — — — — — — — — — — — —

以下為本篇開始介紹訓練資料集流程,內文中的Dataset編輯,實務上會因方法、用途、目的等而撰寫不同的設計方式,但是目前只是希望先執行過一次體驗訓練過程,至於當中的正確性則不在本篇討論範圍內,只針對訓練流程做說明。

步驟一、請至 Nvidia NGC 下載 Model

進入 Nvidia NGC 後,左邊menu點選 Model 選單,搜尋「clara_pt_pathology_metastasis_detection」下載模組,(目前Clara models提供2D圖像只有二個,另一個為X-Ray圖像模型,但應該是 SDK 4.0 以下版本,這邊就不再說明)

下載完後請解壓縮,可以先查看config/datalist_0.json,裡面是所有要訓練資料的檔案列表格式資訊,也可以發現至對應的資料夾裡找不到圖檔,下一章就來說明。

步驟二、下載 Dataset 圖檔

其實有注意多看幾眼剛剛 NGC 裡的訓練檔資訊,可以了解到這個訓練模組是取之於「Camelyon16」資料集作為基礎,當中就可以得到圖檔的下載位址 http://gigadb.org/dataset/100439

如果全部下載的話,大概至少有700GB以上,所以硬碟空間要先準備一下,那這次只有先下載5個圖檔,分別為tumor_001.tif, tumor_002.tif, tumor_003.tif, tumor_105.tif, test_001.tif,請分別放至以下資料夾,下章就要開始為準備config,做訓練前的調整格式。

/data/training/images資料夾放入:tumor_001.tif, tumor_002.tif, tumor_003.tif, tumor_105.tif

/data/testing/images資料夾放入:test_001.tif

本資料集每個圖檔都至少1GB以上,所以可能會遇到圖像無法開啟的情況,我甚至為了打開還安裝PhotoShop也是不行,這個問題就要看各位怎麼去處理了(我最後是寫C#把圖像進行縮圖才確認這個圖像Dataset和訓練Model是一致)

步驟三、調整 config

1.調整environment.json,指定 DATA_ROOT 到 dataset 資料夾

2.撰寫程式調整datalist_0.json

這份datalist_0.json因為是記錄Camelyon16所有圖檔(700GB以上),但目前我只有下載5個圖檔,所以json檔內容要進行調整,請在/config 底下先備份datalist_0.json檔案(方便之後調整json內容用),並建立一個python程式如下:

import json

# Opening JSON file (備份datalist_0.json檔案)
f = open('datalist_0_o.json')
new_list = {
"training": [],
"validation": [],
"testing_one": [],
"testing_two": [],
"testing": []
}

# returns JSON object as
# a dictionary
data = json.load(f)

# Iterating through the json
# list
for i in data['training']:
if i["image"] == "training/images/tumor_001.tif":
print(i)
new_list["training"].append(i)
if i["image"] == "training/images/tumor_002.tif":
print(i)
new_list["training"].append(i)
if i["image"] == "training/images/tumor_003.tif":
print(i)
new_list["training"].append(i)
for i in data['validation']:
if i["image"] == "training/images/tumor_105.tif":
print(i)
new_list["validation"].append(i)

# Closing file
f.close()
# write file
jsonString = json.dumps(new_list, indent=4)
jsonFile = open("datalist_0.json", "w")
jsonFile.write(jsonString)
jsonFile.close()

請建立後,並且執行程式,就會產生新的datalist_0.json,打開它後,請用你任何方式把test_001.tif寫入datalist_0.json,如下testing_one、testing_two、testing等這三個屬性都填上資料(本篇為介紹訓練過程之用,所以資料集撰寫方式正確性不在此限內討論,請斟酌參考)

步驟四、進行訓練

  1. 進入docker系統,說明下面指令中source=/home/{username}/{models},對應本機model資料夾的系統位址,{username}為系統使用者名稱,{models}為放置model的資料夾名稱;進入Docker後,建議把/workspace/clara-experiments資料夾權限全開。

Docker執行CPU指令用:

sudo docker run -it --rm --shm-size=1G --ulimit memlock=-1 --ulimit stack=67108864 --ipc=host --net=host --mount type=bind,source=/home/{username}/{models},target=/workspace/clara-experiments nvcr.io/nvidia/clara-train-sdk:v4.0 /bin/bash

Docker啟動GPU指令用:

sudo docker run -it --rm --gpus=1 --shm-size=1G --ulimit memlock=-1 --ulimit stack=67108864 --ipc=host --net=host --mount type=bind,source=/home/{username}/{models},target=/workspace/clara-experiments nvcr.io/nvidia/clara-train-sdk:v4.0 /bin/bash

資料夾/workspace/clara-experiments目錄下權限全開:

sudo chmod -R 777 ./

2. 到訓練資料夾裡,執行指令/workspace/clara-experiments/{模型資料夾名稱}/commands

cd /workspace/clara-experiments/clara_pt_pathology/commands

接著執行設定環境變數

./set_env.sh

3. 執行指令『./train.sh 0』我的主機約8小時跑完4張圖,之後會產生models/models.pt檔案

./train.sh 0

4. 執行指令『./export.sh』隨即會產生models/models.ts檔案

./export.sh

5. 訓練好之後,接下來就可以再進行打包,因為圖檔太大可刪除data資料夾再壓縮成zip,就可以上傳檔案至Triton Inference Server(至少要有config_aiaa.json、models.ts),請參考【 [AI] [Nvidia Clara 4] NVIDIA Triton Inference Server 進行 Client 端運作,上傳Model及操作說明(3D Slicer)

以上只是很簡單說明訓練 Clara SDK 過程,當中其實還有很多細節可以參考官方Clara-Train-SDK 4.0文件,和需要自己去找資料了解dataset和datalist_0.json裡組成的要素,之後有機會再來寫第二篇有關這model更進階的說明,但會是在什麼時候…等我心血來潮的那一天吧…謝謝!

--

--