再回首
仔細(xì)想想芥映,我使用過的昇騰AI處理器包括Ascend 310觉壶、Ascend 310P脑题、Ascend 910,涵蓋了訓(xùn)練和推理铜靶,也算是比較全面了。就我個(gè)人來說他炊,希望更接近于實(shí)際應(yīng)用場(chǎng)景争剿,靠近用戶,因而傾向于做應(yīng)用開發(fā)痊末,即將AI算法做成產(chǎn)品化應(yīng)用蚕苇。
個(gè)人分享
產(chǎn)品化應(yīng)用涉及所用硬件性能、模型在實(shí)際業(yè)務(wù)中的準(zhǔn)確度以及適配平臺(tái)或服務(wù)開發(fā)等等凿叠,我個(gè)人認(rèn)為是要根據(jù)實(shí)際情況不斷做調(diào)整的涩笤,比較依賴于對(duì)硬件特性的理解和經(jīng)驗(yàn)嚼吞。這里,我站在個(gè)人開發(fā)者或者說學(xué)生開發(fā)者的角度蹬碧,分享下我的感受舱禽。
首先,要對(duì)待部署的模型有一定了解恩沽,知道輸入節(jié)點(diǎn)誊稚、輸入數(shù)據(jù)和排布方式,輸出節(jié)點(diǎn)罗心、輸出數(shù)據(jù)和排布方式里伯,在此基礎(chǔ)上確定輸入和輸出的數(shù)據(jù)格式,進(jìn)而明確預(yù)處理和后處理渤闷。簡(jiǎn)單來說疾瓮,圍繞模型,向前要知道輸入和預(yù)處理飒箭,向后要知道后處理和輸出狼电。這個(gè)是核心,而至于具體操作以及所用硬件則是盡可能壓榨硬件性能完成模型部署推理补憾。
其次漫萄,了解硬件架構(gòu)和特性。從經(jīng)濟(jì)性的角度來說盈匾,一般選擇低成本而可行的硬件腾务,而最大可能逼近硬件極限,即盡可能用更加親和所用硬件的操作削饵。以Ascend 310為例岩瘦,考慮到具體操作計(jì)算量和無法直接調(diào)度AI Core,可以調(diào)整AI CPU和Ctrl CPU的配比來實(shí)現(xiàn)資源的分配窿撬,再者使用DVPP和AIPP來完成輸入視頻或圖像的解碼操作启昧,專用硬件電路效率會(huì)更高。而這些都是要根據(jù)所用硬件來調(diào)整劈伴。
最后密末,從借鑒開始。初次接觸跛璧,缺乏經(jīng)驗(yàn)严里,這時(shí)候要多看官方倉庫提供的樣例代碼,先按照README跑通追城,之后學(xué)習(xí)代碼刹碾,有不懂的部分,可以自行打印出來查看座柱,或者到昇騰論壇和倉庫提問迷帜,也可以按照自己的需求物舒,試著做些修改,并進(jìn)行驗(yàn)證戏锹,這樣一點(diǎn)一點(diǎn)嘗試冠胯,慢慢搞懂,吃透代碼景用,之后就可以基于此涵叮,進(jìn)行自己想要的開發(fā)了。
實(shí)際操作
下面就簡(jiǎn)單介紹下如何跑通一個(gè)簡(jiǎn)單的圖片分類的官方樣例伞插。圖片分類從名稱上割粮,我們能直觀地看出它的作用:按圖片所屬的類別來區(qū)分圖片。
那么圖片分類是怎么做到這一點(diǎn)的呢媚污?首先要有一個(gè)能做到圖片分類的模型舀瓢,我們可以直接使用一些訓(xùn)練好的開源模型,也可以基于開源模型的源碼根據(jù)我們的需求進(jìn)行修改耗美,并重新訓(xùn)練京髓,甚至可以去構(gòu)建適合自己的模型。鑒于我們是跑通就行商架,此處我們直接使用官方已訓(xùn)練好的開源模型堰怨,畢竟這樣最簡(jiǎn)單,也最快蛇摸。我們以基于Caffe框架的開源模型ResNet-50模型為例說明其輸入备图、輸出,以便理解后續(xù)的開發(fā)場(chǎng)景赶袄,先來介紹下輸入和輸入:
-
模型對(duì)輸入要求:輸入圖片的編碼格式為RGB揽涮、分辨率為224*224。
-
模型的輸出:Top5置信度的類別標(biāo)簽及其對(duì)應(yīng)置信度饿肺。
這個(gè)樣例是基于Caffe ResNet-50網(wǎng)絡(luò)(單輸入蒋困、單Batch)實(shí)現(xiàn)圖片分類的功能。在該樣例中:
-
先使用樣例提供的腳本transferPic.py敬辣,將2張*.jpg圖片都轉(zhuǎn)換為*.bin格式雪标,同時(shí)將圖片從1024683的分辨率縮放為224224。
-
加載離線模型om文件溉跃,對(duì)2張圖片進(jìn)行同步推理汰聋,分別得到推理結(jié)果,再對(duì)推理結(jié)果進(jìn)行處理喊积,輸出top5置信度的類別標(biāo)識(shí)。在加載離線模型前玄妈,提前將Caffe ResNet-50網(wǎng)絡(luò)的模型文件轉(zhuǎn)換為適配昇騰AI處理器的離線模型乾吻。
好了髓梅,我們來運(yùn)行看看,先來準(zhǔn)備下環(huán)境绎签,這里我使用的是華為云提供的ECS枯饿,規(guī)格為AI加速型 | ai1s.large.4 | 2vCPUs | 8GiB | 1 * HUAWEI Ascend 310/1 * 8G,需要特別注意的是诡必,我們使用的是【 CANN 訓(xùn)練營 ? 22 年度第三季】 提供的鏡像6.0.RC1.alpha001_new(40GB)奢方,而關(guān)于ECS的購買和連接,大家可以到新手班學(xué)習(xí)哈爸舒,有很詳細(xì)的視頻介紹蟋字。
接下來,我們登錄購買的ECS扭勉,這里我在本地Windows下使用MobaXterm連接鹊奖,因?yàn)槟J(rèn)是root用戶登錄,而CANN運(yùn)行用戶是HwHiAiUser涂炎,這里我們先設(shè)置下密碼忠聚,之后用HwHiAiUser登錄。
先來設(shè)置密碼:
passwd HwHiAiUser
復(fù)制
在切換用戶之前唱捣,我們先改下bash两蟀,執(zhí)行如下命令,并在彈出的界面中選擇 :
sudo dpkg-reconfigure dash
復(fù)制
再執(zhí)行如下命令:
ls -l `which sh`
復(fù)制
若提示/bin/sh -> bash震缭,表示修改成功赂毯。下面切換到HwHiAiUser用戶:
su - HwHiAiUser
復(fù)制
此時(shí)我們?cè)诮K端看到的應(yīng)該是“HwHiAiUser”開頭了:
接下來下載sample 倉 代碼并上傳至環(huán)境。之后請(qǐng)先進(jìn)入本次樣例所在目錄:
cd samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
復(fù)制
請(qǐng)注意蛀序,下文中的樣例目錄均指以上目錄欢瞪。
之后獲取模型,可以從以下鏈接中獲取ResNet-50網(wǎng)絡(luò)的模型文件(*.prototxt)徐裸、權(quán)重文件(*.caffemodel)遣鼓,并以運(yùn)行用戶將獲取的文件上傳至開發(fā)環(huán)境的“樣例目錄/caffe_model“目錄下。如果目錄不存在重贺,需要自行創(chuàng)建骑祟。
ResNet-50網(wǎng)絡(luò)的模型文件(*.prototxt):?jiǎn)螕鬖ink 下載該文件。
ResNet-50網(wǎng)絡(luò)的權(quán)重文件(*.caffemodel):?jiǎn)螕鬖ink 下載該文件气笙。
下面將ResNet-50原始模型轉(zhuǎn)換為適配昇騰AI處理器的離線模型(*.om文件)次企。切換到樣例目錄,執(zhí)行如下命令(以昇騰310 AI處理器為例):
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
復(fù)制
如下圖所示潜圃,則表示轉(zhuǎn)換模型成功缸棵。
接著準(zhǔn)備數(shù)據(jù),請(qǐng)從以下鏈接獲取該樣例的輸入圖片谭期,并以運(yùn)行用戶將獲取的文件上傳至開發(fā)環(huán)境的“樣例目錄/data“目錄下堵第。如果目錄不存在吧凉,需自行創(chuàng)建。
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg
下面切換到“樣例目錄/data“目錄下踏志,執(zhí)行transferPic.py腳本阀捅,將*.jpg轉(zhuǎn)換為*.bin,同時(shí)將圖片從1024683的分辨率縮放為224224针余。在“樣例目錄/data“目錄下生成2個(gè)*.bin文件饲鄙。
python3.6 ../script/transferPic.py # 不是python3,以免報(bào)錯(cuò)
復(fù)制
如果執(zhí)行腳本報(bào)錯(cuò)“ModuleNotFoundError: No module named 'PIL'”圆雁,則表示缺少Pillow庫忍级,請(qǐng)使用pip3 install Pillow --user命令安裝Pillow庫。
好了摸柄,下面只需要按照該樣例的 README 繼續(xù)操作就行了颤练,最終可以得到推理結(jié)果如下圖所示:
執(zhí)行成功后,在屏幕上的關(guān)鍵提示信息示例如上圖所示驱负,提示信息中的index表示類別標(biāo)識(shí)嗦玖、value表示該分類的最大置信度,這些值可能會(huì)根據(jù)版本跃脊、環(huán)境有所不同宇挫,請(qǐng)以實(shí)際情況為準(zhǔn)。
說明:類別標(biāo)簽和類別的對(duì)應(yīng)關(guān)系與訓(xùn)練模型時(shí)使用的數(shù)據(jù)集有關(guān)酪术,本樣例使用的模型是基于imagenet數(shù)據(jù)集進(jìn)行訓(xùn)練的器瘪,您可以在互聯(lián)網(wǎng)上查閱imagenet數(shù)據(jù)集的標(biāo)簽及類別的對(duì)應(yīng)關(guān)系,例如绘雁,可單擊Link查看橡疼。 當(dāng)前屏顯信息中的類別標(biāo)識(shí)與類別的對(duì)應(yīng)關(guān)系如下: "161": ["basset", "basset hound"]、 "267": ["standard poodle"]庐舟。
好了欣除,至此我們就跑通了這個(gè)圖片分類樣例,大家感興趣可以深入了解具體代碼挪略,還可以自己改改代碼历帚,有機(jī)會(huì)的話,我也會(huì)在講講后續(xù)杠娱。
本文使用 文章同步助手 同步