高通SNPE - 基準測試概述(3)

weixin_38498942發表於2020-10-28

架構支援

SNPE基準測試同時支援有Android ARM 32位和AARCH 64位。除Android外,對LinuxEmbedded的支援有限,其中僅支援計時的測量。

將執行時Runtime和度量Measurement連線起來,以形成完整的執行組合名稱,例如,

  • “ GPU_timing”:GPU執行時,定時測量
  • “ CPU_mem”:CPU執行時,記憶體測量

這裡請注意,對於每個指定的執行時,都有多組時序測量值,它們僅在張量格式上有所不同(使用ITensor和使用使用者緩衝區)。例如,對於DSP執行時,將進行以下時序測量:

  • “ DSP_timing”:使用ITensor在DSP執行時上進行時序測量
  • “ DSP_ub_tf8_timing”:使用帶有TF8編碼的UserBuffer在DSP執行時上進行時序測量
  • “ DSP_ub_float_timing”:使用帶浮點編碼的UserBuffer在DSP執行時上計時測量

執行基準

執行基準測試的最簡單方法是指定-a選項,該選項將在連線到計算機的單個裝置上執行基準測試。

cd $ SNPE_ROOT /基準
python3 snpe_bench.py​​ -c yourmodel.json -a

基準測試將在主機檔案(在JSON配置中指定的檔案)和裝置檔案上執行md5sum。由於md5sum檢查,基準執行所需的檔案必須在主機上可用。

對於主機和裝置上同時存在md5不匹配的任何檔案,基準測試會將檔案從主機複製到目標,併發出警告訊息,告知您本地檔案與裝置檔案不匹配。這樣做是為了確保您可以從基準測試獲得的結果準確反映JSON檔案中指定的檔案。

其他選擇

  • -v選項
    允許您覆蓋配置檔案中指定的裝置ID,以便同一配置檔案可用於多個裝置。如果連線了多個裝置,則可以使用此選項代替-a。

  • -o選項
    僅當為HostRootPath和HostResultsDir指定相對路徑時,結果輸出基本目錄覆蓋才適用。無論您從何處執行基準測試,它都可以合併輸出。

  • -t選項
    作業系統型別覆蓋當前支援Android arm(armeabi-v7a),Android aarch64(arm64-v8a)和Linux嵌入式裝置。

  • -b選項
    允許您指定輸入和輸出使用者緩衝區的型別。

  • -p選項
    允許您分析不同操作模式下的效能。

  • -l選項
    允許您指定效能分析的級別。

閱讀結果

在HostResultsDir / latest_results資料夾中開啟結果(CSV檔案或JSON檔案)以檢視結果。 (HostResultsDir是您在json配置檔案中指定的內容。)

測量方法

在所有情況下,snpe-net-run可執行檔案都用於載入模型並通過模型執行輸入。

表現(“時間”)

使用SNPE庫中的內部計時實用程式進行計時測量。當執行snpe-net-run時,庫會將計時資訊記錄到檔案中。然後將該檔案離線解析,以檢索總推理時間和每層時間。

總推斷時間包括每層計算時間以及開銷(例如層之間的資料移動以及進出執行時的開銷),而每層時間嚴格來說是每一層的計算時間。對於較小的網路,開銷相對於計算時間而言可能是相當大的,尤其是在解除安裝網路以在GPU或DSP上執行時。

同樣,在神經元conv-neuron或fc-neuron對的情況下,GPU / DSP上存在的進一步優化可能會導致層時間分配錯誤。在GPU上執行時,兩對的總時間將分配給conv,而對於DSP,則將它們分配給神經元。

基準依賴性

基準指令碼所依賴的二進位制檔案位於以下配置檔案中,具體取決於目標體系結構,編譯器和STL庫:

  • Android 32-bit
    • clang - libc++: snpebm/snpebm_artifacts.json
  • Android 64-bit
    • clang - libc++: snpebm/snpebm_artifacts_android_aarch64.json
  • LinuxEmbedded: snpebm/snpebm_artifacts_le.json

相關文章