wordpress 30天唐山seo推廣公司
目錄
一、ATC模型轉(zhuǎn)換
1.1 模型
1.2 ATC工具
1.3 實(shí)操模型轉(zhuǎn)換
1.4?使用ATC工具時(shí)的一些關(guān)鍵注意事項(xiàng)
1.5?ATC模型轉(zhuǎn)換命令舉例
二、運(yùn)行昇騰AI模型應(yīng)用樣倉(cāng)程序
2.1 程序目錄
2.2?下載模型和模型轉(zhuǎn)換
2.3?下載圖片和編譯程序
2.4?解決報(bào)錯(cuò)
2.5?運(yùn)行程序
三、運(yùn)行其他程序
3.1?sampleCarColor
3.2?sampleCrowdCounting
3.3 sampleLlama
3.4?sampleResnetAIPP
3.5?sampleResnetDVPP
3.6?sampleResnetRtsp
3.7?sampleYOLOV7MultiInput
3.8?sampleYOLOV7NMSONNX
前言
昇騰AI模型應(yīng)用,解釋這個(gè)詞匯就是,別人現(xiàn)在訓(xùn)練好了一個(gè)模型,我們利用這個(gè)模型對(duì)原始數(shù)據(jù)進(jìn)行識(shí)別、預(yù)測(cè)。例如別人訓(xùn)練好了識(shí)別動(dòng)物種類的模型,我們將一張圖片傳入進(jìn)入,這個(gè)模型就能給我們傳出圖片的屬于狗、貓還是兔子
一、ATC模型轉(zhuǎn)換
第一章是講理論的,看的渾身難受的小伙伴可以先從第二章開始看
1.1 模型
首先經(jīng)過TensorFlow、Pytrouch訓(xùn)練之后會(huì)得到一個(gè)模型,這個(gè)模型類似于一個(gè)函數(shù),有輸出和輸入。
我們輸入圖片,動(dòng)物分類模型(函數(shù))會(huì)輸出一個(gè)動(dòng)物類別給我們,我們通過這個(gè)動(dòng)物類別就能找到圖片是屬于哪一個(gè)動(dòng)物
我們可以下載一個(gè).onnx后綴的模型文件,進(jìn)入網(wǎng)站中查看:
Netron
模型要求輸入一個(gè)下面這樣格式的Tenser(矩陣)。下面0011位置或其他位置里面的數(shù)據(jù)就是該位置圖片像素值,模型要求這個(gè)像素值的類型是float32類型的數(shù)據(jù)
模型跟函數(shù)不同的是,模型的輸入輸出都是矩陣,方便NPU運(yùn)算。下面是模型輸出的Tenser(矩陣):
1.2 ATC工具
ATC工具用于將Caffe、TensorFlow、ONNX、MindSpore深度學(xué)習(xí)框架訓(xùn)練出來的模型轉(zhuǎn)換為昇騰生態(tài)能看懂的模型格式
(1) Caffe生成 .om需要兩個(gè)模型文件:.prototxt (Caffe網(wǎng)絡(luò)模型的網(wǎng)絡(luò)結(jié)構(gòu))、.caffemodel (Caffe網(wǎng)絡(luò)模型的權(quán)重文件);
(2) TensorFlow生成 .om需要模型文件 .pb (包含計(jì)算圖和權(quán)重),如果是 .index和 .meta兩個(gè)文件,則需要使用TensorFlow的私有api來把這兩個(gè)文件合并成 .pb。
(3) ONNX代表的是pytorch生成的模型。pytorch能訓(xùn)練出 .pth和 .tar,pytorch可以用 .pth和 .tar來生成 .onnx,這是ATC需要的格式
(4) 華為自家的MindSpore框架訓(xùn)練出來的模型是 .air后綴的文件,另一種訓(xùn)練出來的格式后綴為 .mindir,.air可以轉(zhuǎn)成 .om做離線推理 .mindir只能使用MindSpore做在線推理
1.3 實(shí)操模型轉(zhuǎn)換
1. 軟件安裝
MindStudio下載:
MindStudio全流程開發(fā)工具鏈-特性-課程-案例-昇騰社區(qū) (hiascend.com)
解壓?
啟動(dòng)
進(jìn)入界面:
進(jìn)入界面后,遠(yuǎn)程工具好像是有點(diǎn)不堪重負(fù),于是換成使用下面的工具進(jìn)行遠(yuǎn)程:
【遠(yuǎn)程桌面】nomachine下載安裝使用教程、zerotier下載安裝使用教程超詳細(xì)-CSDN博客
但是我發(fā)現(xiàn)兩個(gè)工具都很差勁,有能接屏幕的小伙伴可以接一下屏幕看一下,或者在自己的電腦上安裝這個(gè)軟件,模型轉(zhuǎn)換完成后上傳到虛擬機(jī)中
這里學(xué)習(xí)的部分可以去看老師的視頻了:
昇騰CANN系列教程——ATC模型轉(zhuǎn)換_嗶哩嗶哩_bilibili
2. 這是我做的筆記:
打開軟件后點(diǎn)擊下面的選項(xiàng)
彈出了下面的小窗口,這個(gè)小窗口就可以配置模型轉(zhuǎn)換的各種參數(shù)。首先是模型文件.prototxt和.caffemodel,模型文件可以去這里下載:ResNet-50 prototxt_resnet50 prototxt-CSDN博客
模型名就是模型文件去除后綴名后的名字。香橙派昇騰芯片的SoC Version是Ascend310B4。下面的三個(gè)輸入格式是根據(jù)模型要求的輸入來配置的,具體怎么看模型要求輸入格式,我后面模型訓(xùn)練的課程會(huì)再介紹
點(diǎn)擊下一步后。下圖是高級(jí)配置,如果點(diǎn)擊了,后續(xù)會(huì)在模型上就把數(shù)據(jù)預(yù)處理做了
?下圖是軟件根據(jù)你前面的配置,生成出來的執(zhí)行語句,這個(gè)語句會(huì)再Linux中執(zhí)行,實(shí)現(xiàn)模型轉(zhuǎn)換
點(diǎn)擊Finish開始執(zhí)行,程序開始運(yùn)行,得到下面結(jié)果:?
經(jīng)過上面這么一通操作,在/home/ascend/modelzoo/resnet50/Ascend310目錄下生成了一個(gè)resnet50.om的模型文件,這個(gè)就是昇騰生態(tài)需要的模型文件
1.4?使用ATC工具時(shí)的一些關(guān)鍵注意事項(xiàng)
?● 支持原始框架類型為Caffe、TensorFlow、MindSpere、QNNX的模型轉(zhuǎn)換;
(1) 當(dāng)原始框架類型為Caffe、MindSpore、ONNX時(shí),輸入數(shù)據(jù)類型為FP32 (單精度浮點(diǎn))、FP16 (半精度浮點(diǎn)) (通過設(shè)置入?yún)?—— input_fp16_nodes實(shí)現(xiàn),MindSpore框架不支持該參數(shù))、UINT8 (通過配置數(shù)據(jù)預(yù)處理實(shí)現(xiàn));
(2) 當(dāng)原始框架類型為TensorFlow時(shí),輸入數(shù)據(jù)類型為FP16、FP32、 UINT8、 INT32、BOOL (原始框架類型為TensorFlow時(shí),不支持輸入輸出數(shù)據(jù)類型為INT64,需要用戶自行將INT64的數(shù)據(jù)類型修改為INT32類型)。
● 當(dāng)原始框架類型為Caffe時(shí),模型文件 (.prototxt) 和權(quán)重文件 (.caffemodel) 的op name、op type必須保持名稱一致 (包括大小寫)。
● 當(dāng)原始框架類型為TensorFlow時(shí),只支持FrozenGraphDef格式。
● 不支持動(dòng)態(tài)shape的輸入,例如:NHWC輸入為[?,?,?,3]多個(gè)維度可任意指定數(shù)值。模型轉(zhuǎn)換時(shí)需指定固定數(shù)值
● 對(duì)于Caffe框架網(wǎng)絡(luò)模型:輸入數(shù)據(jù)最大支持四維,轉(zhuǎn)維算子 (reshape、expanddim等) 不能輸出五維。
● 模型中的所有層算子除const (常量) 算子外,輸入和輸出需要滿足dim!=0 (維度!=0)。
● 只支持算子規(guī)格參考中的算子,并需滿足算子限制條件。
1.5?ATC模型轉(zhuǎn)換命令舉例
--model | 原始網(wǎng)絡(luò)模型、網(wǎng)絡(luò)結(jié)構(gòu) |
--weiget | 權(quán)重文件位置 |
--output | 模型轉(zhuǎn)換完成之后,輸出到哪里去 |
--soc_version | 模型轉(zhuǎn)換完成之后,是要跑在那一種型號(hào)處理器上 |
--input_shape | 指定輸入形狀,輸入節(jié)點(diǎn)的名字:輸入的形狀 |
--framework | 原始網(wǎng)絡(luò)模型框架類型,0表示Caffe框架 |
上面四個(gè)模型轉(zhuǎn)換過程最大的不同的地方是下圖紅色的部分:
二、運(yùn)行昇騰AI模型應(yīng)用樣倉(cāng)程序
2.1 程序目錄
inference/modelInference · Ascend/samples - 碼云 - 開源中國(guó) (gitee.com)
下面是以運(yùn)行sampleResnetQuickStart程序為例子,講解一下使用樣倉(cāng)程序的流程
2.2?下載模型和模型轉(zhuǎn)換
cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/model?
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" ?--soc_version=Ascend310B4
注意:第三步獲取到的昇騰芯片型號(hào),要應(yīng)用在第四步模型轉(zhuǎn)換過程中的--soc_version=Ascend310B4,這個(gè)參數(shù)中,一定要修改,否則后面推理的時(shí)候會(huì)出錯(cuò)
2.3?下載圖片和編譯程序
cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/data?
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/cpp/scripts?
bash sample_build.sh
2.4?解決報(bào)錯(cuò)
報(bào)錯(cuò)內(nèi)容1:報(bào)錯(cuò)找不到opencv2
解決報(bào)錯(cuò):把opencv2拷貝到系統(tǒng)目錄下:
mv /usr/include/opencv4/opencv2 /usr/include/opencv2
rm -rf opencv4
報(bào)錯(cuò)內(nèi)容2:找不到ascendcl動(dòng)態(tài)庫(kù)
解決報(bào)錯(cuò):把a(bǔ)scendcl動(dòng)態(tài)庫(kù)添加到cmake查找路徑中
env發(fā)現(xiàn)無輸出,使用find查找動(dòng)態(tài)庫(kù)的位置
然后根據(jù)cmake編寫的內(nèi)容修改cmake中的路徑,CMAKE中,如果沒有定義環(huán)境變量就用我們填入的內(nèi)容,很顯然沒有定義,所以使用我們剛剛填寫的地址
2.5?運(yùn)行程序
bash sample_run.sh
這個(gè)程序成功的給狗狗分類了
三、運(yùn)行其他程序
運(yùn)行其他程序和sampleResnetQuickStart類似,下面只說不同的點(diǎn)
3.1?sampleCarColor
問題1
報(bào)錯(cuò)和解決方法:
error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope_‘cvloadimage’ was not declared in this scope-CSDN博客
問題2:又提示下面這個(gè)錯(cuò)誤了:
這次編輯一下啟動(dòng)配置文件:vim ~/.bashrc?
source ~/.bashrc
問題3:程序運(yùn)行沒有結(jié)果,經(jīng)過檢查是例程是錯(cuò)的,我正在嘗試修改
3.2?sampleCrowdCounting
這個(gè)程序的庫(kù)函數(shù)有問題,修改庫(kù)函數(shù)jpegd的這里,如果是Ascend310B4芯片,就讓它寬度按照64字節(jié)對(duì)齊
同時(shí)修改resize函數(shù)中使用到的_gen_input_pic_desc函數(shù),如下圖
3.3 sampleLlama
1. 安裝transformers
下載transformers-4.29.2包
wget?https://codeload.github.com/huggingface/transformers/zip/refs/tags/v4.29.2
unzip v4.29.2
pip3 install SentencePiece -i https://mirrors.163.com/pypi/simple/
pip install transformers -i https://mirrors.163.com/pypi/simple/
2. 下載數(shù)據(jù)和模型
cd $HOME/samples/inference/modelInference/sampleLlama
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/llama_weight/llama_weight.zip --no-check-certificate
unzip llama_weight.zip
mkdir data & cd data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/llama_weight/data.zip --no-check-certificate
unzip data.zip
3. 運(yùn)行程序
cd $HOME/samples/inference/modelInference/sampleLlama/scripts
export ASCEND_CUSTOM_PATH=/usr/local/Ascend/ascend-toolkit/latest
bash run_llama.sh
4. 這個(gè)程序是運(yùn)行不起來的,原因如下
首先要解決內(nèi)存不夠的問題,整個(gè)程序要把模型權(quán)重全部讀入內(nèi)存。香橙派最高只有16G版本的,所以16G需要增加4GB swap內(nèi)存,8G需要增加12GB swap內(nèi)存,才能把所有權(quán)重文件讀入內(nèi)存
其次本程序會(huì)調(diào)用一個(gè)aclnnPromptFlashAttentionV2函數(shù),310B4并不支持這個(gè)函數(shù)。如何函數(shù)上面寫了
最后要說明的是,如果要在支持的設(shè)備上運(yùn)行這個(gè)程序,除了toolkit工具外,還要安裝kernels算子包
3.4?sampleResnetAIPP
● 注意不要使用下面兩句話添加環(huán)境變量,因?yàn)槲覀兦懊嬉呀?jīng)設(shè)置好了
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
● 報(bào)錯(cuò)添加頭文件#include <opencv2/imgproc/types_c.h>
python版本代碼需要修改一下.sh里面的命令
3.5?sampleResnetDVPP
運(yùn)行下面python程序的時(shí)候提示缺少acllite_imageproc這個(gè)包
經(jīng)過查找,發(fā)現(xiàn)acl封裝的庫(kù)函數(shù)是在/root/samples/python/common/acllite目錄下,將這個(gè)目錄配置到環(huán)境變量中:vim ~/.bashrc
然后保存一下:source ~/.bashrc
3.6?sampleResnetRtsp
1.給程序提供視頻流
cd /
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleResnetRtsp/live.2023.05.10.tar.gz --no-check-certificate
tar -zxvf live.2023.05.10.tar.gz
cd ./live
./genMakefiles linux
make -j8
cd?/live/testProgs
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/sampleResnetRtsp/test.264 --no-check-certificate
./testOnDemandRTSPServer
讓程序能從下面的地址獲取視頻一幀一幀的內(nèi)容:
上面的程序視頻流一直開著,我們用vscode進(jìn)入程序執(zhí)行
3.7?sampleYOLOV7MultiInput
需要安裝json解析庫(kù):apt install libx11-dev
3.8?sampleYOLOV7NMSONNX
路徑不存在,然后需要修改程序中的文件名
這邊報(bào)錯(cuò),暫時(shí)先不排查原因了(這兩天看的頭暈,后面有機(jī)會(huì)再排查一下)