基于昇騰CANN的推理應用開發--高清圖像修復(Python)的彈性云服務器(ECS)實現 丨【我的華為云體驗之旅】
先來介紹下,這是CANN體驗官第三期活動,那么有同學可能要問了,什么是CANN呢?先來張官方的圖展示:
如果還是不理解,理解簡單理解為是華為為昇騰處理器打造的“CUDA”,最后給出活動鏈接:https://bbs.huaweicloud.com/forum/thread-164772-1-1.html
說明:
一定要做云資源申請:點擊鏈接:https://www.wjx.cn/vj/mbknBwc.aspx?可進行資源申請登記,審核后將會在2-3個工作日進行資源發放。
最好先了解下活動任務一的基于昇騰CANN的推理應用開發--高清圖像修復(Python)實驗:https://www.hiascend.com/zh/college/onlineExperiment/detail/664601
原始模型的測試代碼:https://github.com/Atlas200dk/sample-imageinpainting-HiFill/blob/master/GPU_CPU/test.py
下面開始了,還記得在任務一時,基于昇騰CANN的推理應用開發--高清圖像修復(Python)實驗嗎? 實驗鏈接上面已給出。
這次需要在自己的環境上真實復現上述實驗,通過實驗知道,就是部署模型到Ascend 310上,那如果沒有Ascend 310的設備呢?那申請ECS云資源券就起到作用了,可以來購買彈性云服務器來用,開源代碼在實驗中也給了鏈接,接下來分享一下流程吧。
一、搭建自己的環境
申請到代金券后,先購買彈性云服務器,搞個Ascend 310,購買的流程比較簡單,前人也總結了圖文并茂的介紹,我就不贅述了,這里附上前人的購買介紹鏈接:
https://zhuanlan.zhihu.com/p/432673114
需要注意的是,如果你是第一次購買,登錄后可能發現無法ping通,即無法訪問外網,這大概率時因為在配置彈性公網IP的時候出方向規則沒配置,可以參照如下方法配置,如果不行,可以直接提工單。
https://bbs.huaweicloud.com/suggestion/detail/112907
二、配置環境
其實彈性云服務器默認配置環境(就是CANN)了,但是環境版本太老了,不支持本案例,在模型轉換階段就報錯了,所以要安裝新環境,直接上最新的吧。那這就遇到問題了,沒有文檔介紹如何配置,彈性云服務器的文檔僅做了介紹,讓到昇騰開發者社區,開發者社區的文檔有點亂,搞了半天也不行,這一點體驗不好,這文檔有點差勁。問題不大,找個在線課程看看吧,就是昇騰CANN系列教程-環境部署(計算加速型ECS)
課程鏈接:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXA025+Self-paced/about
但遺憾的是,這個課程用到的版本太老了,不過沒關系,只需要將提到的三個.run文件換成對應的新版本就行了,流程還是那樣的。整個流程有點復雜,簡化了一下,簡化后的流程如下:
注意,講道理,要區分root和HwHiAiUser用戶安裝,但這太麻煩了,安裝環境還要來回切換用戶,這里直接選擇全root,即本文所有操作都在root下執行,所以注意點命令,確認下再執行,以免造成無可挽回的損失。
1. 下載安裝包
# 下載固件和驅動 wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/turing/resourcecenter/Software/AtlasI/A300-3010%201.0.12/A300-3010-npu-driver_21.0.3.1_linux-x86_64.run # 下載X86平臺推理引擎軟件包,適用于命令行方式安裝場景 wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha002/Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run # X86平臺開發套件軟件包,適用于命令行方式安裝場景 wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/5.0.4.alpha002/Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run # 授予權限 chmod 777 A300-3010-npu-driver_21.0.3.1_linux-x86_64.run chmod 777 Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run chmod 777 Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run
2. 執行安裝
注意,安裝之前最好給系統和pip都換成國內源,因為要安裝一些依賴(在線課程中有介紹),換成國內源比較快,換源方法可以直接百度,在前面提到的在線課程中也有介紹。
./A300-3010-npu-driver_21.0.3.1_linux-x86_64.run --install
要重啟以下哦,
reboot
之后注意要配置下環境變量
vim ~/.bashrc
找到如下三個環境變量,修改為如下:
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:/usr/local/Ascend/nnrt/latest/lib64:${LD_LIBRARY_PATH} export PYTHONPATH=/usr/local/Ascend/nnrt/latest/python/site-packages:${PYTHONPATH} export ASCEND_OPP_PATH=/usr/local/Ascend/nnrt/latest/opp:
如圖所示:
接著安裝:
./Ascend-cann-nnrt_5.0.4.alpha002_linux-x86_64.run --install ./Ascend-cann-toolkit_5.0.4.alpha002_linux-x86_64.run --install
至此,應該就安裝好了,大體是這樣,具體請參看上面的在線課程,這三個安裝包的版本和視頻中不一樣,但是其他的基本一樣,按照流程搞就行了,話說這個ECS就不能直接給個最新配置的鏡像嗎?好像昇騰開發者社區提供了鏡像,但是試了下,沒成功,有點遺憾。
三、運行程序
因為實驗中使用了atlasutil,這是昇騰官方團隊自行封裝的一個庫,應該是為了方便Python開發,但是我看了下,這個庫僅供使用,不覆蓋所有場景,還是有限制的,快速驗證還是可以用的,ECS也能用。不過,配置安裝過程復雜。這里不用這個了,直接上官方原始的案例就行了。
案例鏈接:https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/6_other/imageinpainting_hifill
接下來就開始吧!
0. 下載源碼
git clone https://gitee.com/ascend/samples.git # 進入到本案例文件夾 cd samples/python/level2_simple_inference/6_other/imageinpainting_hifill
1. 模型轉換
# 獲取此應用中所需要的單算子Json文件和om模型文件。 wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/matmul_27648.json --no-check-certificate wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/hifill.pb --no-check-certificate
運行結果如圖所示:
開始模型轉換了!
atc --singleop=./matmul_27648.json --output=./0_BatchMatMul_0_0_1_1_1024_1024_0_0_1_1_1024_27648_0_0_1_1_1024_27648 --soc_version=Ascend310 atc --output_type=FP32 --input_shape="img:1,512,512,3;mask:1,512,512,1" --input_format=NHWC --output="./hifill" --soc_version=Ascend310 --framework=3 --save_original_model=false --model="./hifill.pb"
模型轉換時間有點長,主要是后一個模型轉換時間長,執行以下命令將轉換好的模型復制到樣例中model文件夾中。
cp ./hifill.om ./model cp ./0_BatchMatMul_0_0_1_1_1024_1024_0_0_1_1_1024_27648_0_0_1_1_1024_27648/*.om ./model
獲取樣例需要的測試圖片。
cd data wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/data/test.jpg # 退出data文件夾 cd .. cd mask wget https://c7xcode.obs.myhuaweicloud.com/models/imageinpainting_hifill/mask/test.jpg # 退出maks文件夾 cd ..
2. 運行程序
cd src python3 main.py
如果沒有意外,你會看到如下內容:
可以看到,處理還是挺快的:
運行完成后,會在out目錄下生成帶推理結果的jpg圖片,來看看最終效果吧:
這是原圖:
這是mask:
可以看到原始圖片左側的兩個人和下方的鞋“消失”了,效果還是不錯的啊。
到這里,基本就完成了,還是很有意思的。不過也有幾點說一下:
1. 主要是ECS環境配置
環境配置對于第一次接觸的人,不太友好,比較麻煩。主要有兩點:
(1)默認沒配置出規則。如果是第一次使用,第一次配置公網IP,登錄后就會發現ping不通,這就麻煩了,而且文檔中關于該問題的解決,沒有介紹出規則問題,還是提了工單解決的。
(2)環境配置沒文檔。也不能說沒文檔,就是文檔的流程不行,也不好找,還有各種跳轉下載鏈接。
這個很難評判,會者不難,難者不會。
2. 本案例效果可以提升
在線體驗和實驗結果其實都不錯,效果很好,但試了下自己的圖片,效果就一般了,魯棒性不夠。
3. 單算子加速還是挺強的
實驗中有提到應用開發過程中使用了大矩陣乘法,定義Matmul 單算子json文件結構,將其轉換為單算子模型。這一點就很不錯,Matmul這個算子做的矩陣乘,計算比較復雜,Ascend的支持其實不太好,特別是Ascend 910的時候,耗時比較嚴重,這里轉為單算子模型就好多了,利于性能提升,也更靈活,部署嘛,就是最大程度發揮或者說壓榨硬件算力。
4. 完整生態鏈條,如果是能訓練到部署完整流程就更好了,Ascend 910訓練,Ascend 310部署推理,甚至落地應用,這樣也可以盡量不免部署是算子不支持的問題,再加上MindSpore就更完美了,應該是能最大程度發揮硬件算力了,畢竟自研,應該是軟硬件高度適配。
5. 與同是部署用的NVIDIA Jetson系列產品對比,需要做模型轉換,這是因為一般模型都是用GPU訓練的,部署到Ascend 310需要轉為專用的om模型,但這涉及到算子支持度和框架支持問題,目前來說,昇騰這方面還是有些不足的,一方面是算子支持度可以更好,因為會遇到某些算子不支持的問題;另一個方面,目前不支持PyTorch模型的直接轉換。而這些問題,Jetson產品基本不會遇到,因為該產品與訓練用的GPU為同一硬件基礎。昇騰生態建設需要不斷發展。
需要注意的是,ECS服務器是消耗Modelarts代金券的,即使彈性云服務器ECS關機后仍會計費,如果長時間不用了記得?刪除它?刪除它?刪除它。
【我的華為云體驗之旅】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/306271
Python 彈性云服務器 ECS 昇騰 深度學習 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。