ResNet模型
前言
在上一次的測試中,我們從頭開始訓練了一個三個卷積層串聯一個全連接層的輸出,作為貓狗分類的預測的模型,這次我們自己訓練一個ResNet模型,並在以下三個環境中進行性能的對比
- AIStudio CPU: 2 Cores 8GB Memory
- AIStudio GPU: V100 16GB VMem
- Edgeboard
訓練模型
模型使用AIStudio 進行訓練,訓練和預測代碼如下
RESNET:https://aistudio.baidu.com/aistudio/projectdetail/67775
MOBILE:https://aistudio.baidu.com/aistudio/projectdetail/67776
按照之前我們的做法,導出model文件和param文件。
測試結果
我們執行預測,忽略掉預處理的速度,僅僅計算模型前向傳播的時間。
對於AIstudio平台,我們計算以下代碼的運行時間
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)
對於Edgeboard上面的PaddleMobile,我們計算以下代碼的運行時間
PaddleTensor tensor; tensor.shape = std::vector({1, input_channel, input_width, input_height}); tensor.data = PaddleBuf(data, sizeof(data)); tensor.dtype = PaddleDType::FLOAT32; std::vector paddle_tensor_feeds(1, tensor); PaddleTensor tensor_out; tensor_out.shape = std::vector({}); tensor_out.data = PaddleBuf(); tensor_out.dtype = PaddleDType::FLOAT32; std::vector outputs(1, tensor_out); predictor->Run(paddle_tensor_feeds, &outputs);
以下為兩個模型的評測數據
ResNet
Edgeboard:
CPU:
GPU:
Mobile_Net
Edgeboard:
GPU:
CPU:
總結:
下表為兩個模型預測速度的對比,從中來看,其速度相對於V100的GPU甚至還有一定的優勢,讓人難以相信。個人的分析是由於以下幾個原因
- Paddle-mobile較為啟動預測,與AIstudio的完整版Paddlepaddle相比有啟動效率上的優勢,AIstudio啟動預測可能較慢。
- 整個預測模型batch size相當於1,發揮不出GPU的優勢。
- 部署預算按三年算的話,GPU V100價格大概是10萬,CPU 1萬, EdgeBoard 5千,性價比還是蠻高的。
我在進行模型預測的時候,使用鉗表對功率進行了大概的估計(條件有限),鉗表的讀數在0.6A-8A之間變化。結合使用的12V適配器,我大概估計Edgeboard的功耗為8W.
以8W的功耗,在單張圖片的預測速度上面領先了幾十倍功耗的GPU與CPU。Edgeboard的表現還是令我比較驚喜。本來想繼續移植一個前段時間的大尺度的分割網絡Unet進行嘗試,想繼續試試他最大可以跑的模型大小,但似乎Edgeboard目前還不支持分割,存在了一定遺憾。
另外我在進行調試的時候,發現過有幾個發布版本的固件不是很穩定,有些op有些問題。還發現了Edgeboard在我的兩台筆記本電腦上網絡不是很穩定,經常出現相互無法ping通的情況,更換PC后正常,暫時還沒發現為什么。
Edgeboard是我第一款接觸的嵌入式神經網絡加速設備。Paddle-mobile也是我接觸的第一個移動端神經網絡框架,也是我接觸的第一個基於FPGA實現的加速框架。從我了解這個框架到現在僅僅不到半年的時間,已經發布了多個模型轉換工具,降低了開發難度,並且支持EasyDL這種方式。雖然目前仍然有一些不成熟的坑需要填,不過相信在軟件的迭代下面,它能成為一個很好的嵌入式原型設計平台。
Mobile-SSD 模型
這次我們自己訓練一個 Mobilenet-SSD 模型,增加了不同輸入維度的情況下,模型運行效率的對比
AIStudio CPU: 2 Cores 8GB Memory
AIStudio GPU: V100 16GB VMem
Edgeboard
訓練模型
模型使用AIStudio提供的官方工程 進行訓練,訓練和預測代碼如下
Mobilenet-SSD:https://aistudio.baidu.com/aistudio/projectdetail/41752
按照之前我們的做法,導出model文件和param文件。
運行預測
我們執行預測,忽略掉預處理的速度,僅僅計算模型前向傳播的時間。
對於AIstudio平台,我們計算以下代碼的運行時間
label = exe.run(inference_program, feed={feed_target_names[0]: tensor_img}, fetch_list=fetch_targets)
對於Edgeboard上面的PaddleMobile,我們計算以下代碼的運行時間
PaddleTensor tensor; tensor.shape = std::vector({1, input_channel, input_width, input_height}); tensor.data = PaddleBuf(data, sizeof(data)); tensor.dtype = PaddleDType::FLOAT32; std::vector paddle_tensor_feeds(1, tensor); PaddleTensor tensor_out; tensor_out.shape = std::vector({}); tensor_out.data = PaddleBuf(); tensor_out.dtype = PaddleDType::FLOAT32; std::vector outputs(1, tensor_out); predictor->Run(paddle_tensor_feeds, &outputs);
以下圖片為預測結果,由於時間有限,沒有很細致去訓練模型,僅僅對比了模型運行的速度。
下表為模型在不同維度下的預測速度的對比,從中來看,其速度相對於V100的GPU基本處於同一個數量級,遠遠領先與GPU
在之前的文章里我們提到,本來想繼續移植一個前段時間的大尺度的分割網絡Unet進行嘗試,想繼續試試他最大可以跑的模型大小,但似乎Edgeboard目前還不支持分割,所以我們更換了目標檢測網絡進行嘗試。在mobilenet-SSD這個模型上,Edgeboard最大可以跑到700*700的輸入維度,並且能保持在16fps之上(不包含輸入圖像的語出過程),基本上具有實時性。
之前我提到的,在我的兩台筆記本電腦上網絡不是很穩定,經常出現相互無法ping通的情況,目前經過試驗之后,發現問題為板子的網卡在與不支持千兆的網卡進行通信時候,不能正確的協商,仍然使用千兆模式,使用以下命令固定為百兆即可正常連接
ethtool -s eth0 speed 100 duplex full
Edgeboard是我第一款接觸的嵌入式神經網絡加速設備。Paddle-mobile也是我接觸的第一個移動端神經網絡框架,也是我接觸的第一個基於FPGA實現的加速框架。從我了解這個框架到現在僅僅不到半年的時間,已經發布了多個模型轉換工具,降低了開發難度,並且支持EasyDL這種方式。雖然目前仍然有一些不成熟的坑需要填,不過相信在軟件的迭代下面,它能成為一個很好的嵌入式原型設計平台。
作者:Litchll