ModelArts 搭建 darknet 環(huán)境
一、開通 NoteBook 實(shí)例
我們可以使用 ModelArts 的開發(fā)環(huán)境 Notebook ,也可以直接使用 ModelArts 開發(fā)工具 CodeLab,兩者本質(zhì)都是使用 Jupyter 。目前推薦使用 CodeLab ,畢竟可以免費(fèi)“續(xù)杯”,而且是 V100 的硬件。下面分別講解一下 Notebook 和 CodeLab 的使用。
1.1 Notebook
在 AI 開發(fā)過(guò)程中搭建開發(fā)環(huán)境、選擇AI算法框架、選擇算法、調(diào)試代碼、安裝相應(yīng)軟件或者硬件加速驅(qū)動(dòng)庫(kù)都不是容易的事情,使得學(xué)習(xí) AI 開發(fā)上手慢門檻高。為了解決這些問(wèn)題,ModelArts算法開發(fā)平臺(tái)簡(jiǎn)化了整個(gè)開發(fā)過(guò)程,以降低開發(fā)門檻。ModelArts集成了基于開源的Jupyter Notebook和JupyterLab,可為您提供在線的交互式開發(fā)調(diào)試工具。您無(wú)需關(guān)注安裝配置,在ModelArts管理控制臺(tái)直接使用Notebook,編寫和調(diào)測(cè)模型訓(xùn)練代碼,然后基于該代碼進(jìn)行模型的訓(xùn)練。
1.1.1 初始化 Notebook
首先我們?cè)谧髠?cè)導(dǎo)航欄中搜索并進(jìn)入 ModelArts ,一般來(lái)說(shuō),我們常用的區(qū)域是北京四,因?yàn)楸本┧牡陌姹炯肮δ芟鄬?duì)較新,資源也相對(duì)較多。這里為了方便演示,我選擇北京四,當(dāng)我們第一次使用 ModelArts 需要授權(quán),更多說(shuō)明請(qǐng)參考 ModelArts 準(zhǔn)備工作[1] 。每個(gè)用戶默認(rèn)可創(chuàng)建 10 個(gè) Notebook,其中免費(fèi)算力的 CPU 和 GPU 環(huán)境各可創(chuàng)建 1 個(gè) 。
1.1.2 創(chuàng)建 Notebook
鑒于 darknet 環(huán)境需要依賴 GPU,因此我們將創(chuàng)建一個(gè)帶有 GPU 環(huán)境的 Notebook,默認(rèn)有一個(gè)免費(fèi)算力的 GPU 環(huán)境,以及 5GB 的存儲(chǔ)硬盤。
1.1.3 打開 Jupyter Lab
目前比較推薦使用 JupyterLab ,全新的、更高效的 Notebook 使用交互體檢。
1.1.4 環(huán)境檢查
通過(guò) Terminal 輸入 nvcc -V 和 nvidia-smi 可以查看環(huán)境信息。
1.2 CodeLab
即開即用、用于機(jī)器學(xué)習(xí)的在線集成開發(fā)環(huán)境,可以輕松的構(gòu)建、訓(xùn)練、調(diào)試、部署機(jī)器學(xué)習(xí)算法與模型。當(dāng)前使用免費(fèi)規(guī)格用于體驗(yàn),值得注意的是 72 小時(shí)內(nèi)沒用使用,會(huì)釋放資源,因此需要注意文件備份。
1.2.1 開啟 CodeLab
CodeLab 在 ModelArts 的總覽頁(yè),屬于開發(fā)工具類,目前可以免費(fèi)使用。
1.2.2 切換到 GPU 環(huán)境
CodeLab 默認(rèn)是 CPU 的環(huán)境,我們需要手動(dòng)切換到 GPU 規(guī)格。[Free] GPU: 1*V100(32GB)|CPU: 8vCPUs 64GB 這個(gè)配置還可以吧!
1.2.3 環(huán)境檢查
通過(guò) Terminal 輸入 nvcc -V 和 nvidia-smi 可以查看環(huán)境信息。(cuda版本需匹配nvidia驅(qū)動(dòng)版本)
上圖中 cuda 版本與 nvidia 驅(qū)動(dòng)不匹配,可能會(huì)導(dǎo)致編譯之后的 darknet 運(yùn)行報(bào)錯(cuò)。
二、下載 darknet 源碼
接著我們需要獲取 darknet 的源碼來(lái)進(jìn)行編譯, darknet 源碼地址是:https://github.com/pjreddie/darknet 。由于眾所周知的源碼,我們可以使用鏡像地址或者先將代碼拉取到 Gitee 再下載到 Notebook。
2.1 git clone
本次我們直接從鏡像地址獲取源碼:
cd work
git clone https://github.com.cnpmjs.org/pjreddie/darknet.git

2.2 檢查文件
點(diǎn)擊刷新的按鈕可以查看到已經(jīng)下載好的源碼文件。
三、編譯 darknet
在編譯 darknet 之前我們需要修改 Makefile 文件。
3.1 修改Makefile文件
| 修改前 | 修改后 |
|---|---|
| GPU=0 | GPU=1 |
| CUDNN=0 | CUNDD=1 |
| OPENCV=0 | OPENCV=1 |

3.2 執(zhí)行 make 進(jìn)行編譯
cd work
cd darknet
make

3.3 檢查編譯結(jié)果
至此,我們已經(jīng)生成了可執(zhí)行文件 darknet ,環(huán)境搭建完畢。接著我們?cè)囍鴾?zhǔn)備數(shù)據(jù)集來(lái)驗(yàn)證一下
3.4 常見問(wèn)題
3.4.1 make: Nothing to be done for 'all'.
此時(shí)執(zhí)行 make clean 再 make 即可。
3.4.2 darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
這是由于 cuda 和 NVIDIA 版本不匹配。鑒于 ModelArts 的 Notebook 環(huán)境中已經(jīng)安裝了多個(gè) cuda,我們可以通過(guò)腳本切換:
# 建立軟鏈接命令
sudo ln -snf xxx
# 查看環(huán)境中有哪些cuda版本
ll /usr/local | grep cuda
# 修改cuda版本的命令,其中version替換為對(duì)應(yīng)的cuda版本
sudo ln -snf /usr/local/cuda-{version} /usr/local/cuda
修改之后再執(zhí)行 make 進(jìn)行編譯。

四、數(shù)據(jù)集處理
鑒于 darnet 需要特定的數(shù)據(jù)格式,借助腳本可以將 VOC 數(shù)據(jù)集處理成可適用的格式。數(shù)據(jù)集見 AIGallery: https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=62ff868a-03e8-4627-a9c7-922d71aa1386
本操作指引為直接下載處理好的數(shù)據(jù)集來(lái)進(jìn)行配置訓(xùn)練。
4.1 下載數(shù)據(jù)集到 OBS
AIGallery 提供了豐富的數(shù)據(jù)集,我們可以下載自己所需要的數(shù)據(jù)集,對(duì)于一些平臺(tái)沒有的數(shù)據(jù)集,我們也可以將自己的數(shù)據(jù)集上傳到平臺(tái)設(shè)置為私有已減輕對(duì) OBS 存儲(chǔ)的依賴。

4.2 通過(guò) MoXing 下載 OBS 數(shù)據(jù)到 Notebook
MoXing 為海量數(shù)據(jù)訓(xùn)練提供了便利的存儲(chǔ)服務(wù),我們可以通過(guò) MoXing 快速讀取 OBS 中的數(shù)據(jù)。比如:
import moxing as mox
mox.file.copy_parallel('obs://huqi88/AIGallery/darknet-tools','darknet-tools')
print('Done!')

4.3 簡(jiǎn)單配置數(shù)據(jù)及訓(xùn)練參數(shù)
cd work
mv darknet-tools/VOC2007 darknet
mv darknet-tools/cfg/voc2007.data darknet/cfg/voc2007.data
mv darknet-tools/data/test.txt darknet/data/test.txt
mv darknet-tools/data/train.txt darknet/data/train.txt
mv darknet-tools/data/val.txt darknet/data/val.txt
mv darknet-tools/data/voc.names darknet/data/voc.names

五、訓(xùn)練
訓(xùn)練時(shí)盡量先關(guān)閉其他任務(wù),保證有充足的資源來(lái)運(yùn)行訓(xùn)練任務(wù)
./darknet detector train cfg/voc2007.data cfg/yolov3.cfg ../darknet-tools/darknet53.conv.74

訓(xùn)練過(guò)程每隔100步保存一次訓(xùn)練結(jié)果yolov3_100.weights,900次以后就不再保存,而是存在yolov3.backup中,在訓(xùn)練結(jié)束時(shí)生成yolov3_final.weights。
六、預(yù)測(cè)
上傳一張測(cè)試圖片 test.jpg 到 darknet 目錄下,執(zhí)行以下命令進(jìn)行預(yù)測(cè):
./darknet detector test cfg/voc2007.data cfg/yolov3.cfg backup/yolov3_final.weights test.jpg
結(jié)果如下圖:
參考鏈接
[1] https://gitee.com/ModelArts/ModelArts-Lab/tree/master/docs/ModelArts%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C

點(diǎn)擊“閱讀原文”了解更多
2021-06-01
2021-06-01
2021-03-28
