主頁 >  其他 > B-神經網路模型復雜度分析

B-神經網路模型復雜度分析

2022-11-29 07:36:43 其他

  • 前言
  • 一,模型計算量分析
    • 卷積層 FLOPs 計算
    • 全連接層的 FLOPs 計算
  • 二,模型引數量分析
    • 卷積層引數量
    • BN 層引數量
    • 全連接層引數量
  • 三,模型記憶體訪問代價計算
    • 卷積層 MAC 計算
  • 四,一些概念
    • 雙精度、單精度和半精度
    • 浮點計算能力
    • 硬體利用率(Utilization)
  • 五,參考資料

前言

現階段的輕量級模型 MobileNet/ShuffleNet 系列、CSPNet、RepVGG、VoVNet 等都必須依賴于于具體的計算平臺(如 CPU/GPU/ASIC 等)才能更完美的發揮網路架構,

1,計算平臺主要有兩個指標:算力 $\pi $和 帶寬 $\beta $,

  • 算力指的是計算平臺每秒完成的最大浮點運算次數,單位是 FLOPS
  • 帶寬指的是計算平臺一次每秒最多能搬運多少資料(每秒能完成的記憶體交換量),單位是 Byte/s

計算強度上限 \(I_{max}\),上面兩個指標相除得到計算平臺的計算強度上限,它描述了單位記憶體交換最多用來進行多少次計算,單位是 FLOPs/Byte

\[I_{max} = \frac {\pi }{\beta} \]

這里所說的“記憶體”是廣義上的記憶體,對于 CPU 而言指的就是真正的記憶體(RAM);而對于 GPU 則指的是顯存,

2,和計算平臺的兩個指標相呼應,模型也有兩個主要的反饋速度的間接指標:計算量 FLOPs 和訪存量 MAC

  • 計算量(FLOPs):指的是輸入單個樣本(一張影像),模型完成一次前向傳播所發生的浮點運算次數,即模型的時間復雜度,單位是 FLOPs
  • 訪存量(MAC):指的是輸入單個樣本(一張影像),模型完成一次前向傳播所發生的記憶體交換總量,即模型的空間復雜度,單位是 Byte,因為資料型別通常為 float32,所以需要乘以 4CNN 網路中每個網路層 MAC 的計算分為讀輸入 feature map 大小、權重大小(DDR 讀)和寫輸出 feature map 大小(DDR 寫)三部分,
  • 模型的計算強度 \(I\)\(I = \frac{FLOPs}{MAC}\),即計算量除以訪存量后的值,表示此模型在計算程序中,每 Byte 記憶體交換到呼叫于進行多少次浮點運算,單位是 FLOPs/Byte,可以看到,模計算強度越大,其記憶體使用效率越高,
  • 模型的理論性能 \(P\) :我們最關心的指標,即模型在計算平臺上所能達到的每秒浮點運算次數(理論值),單位是 FLOPS or FLOP/sRoof-line Model 給出的就是計算這個指標的方法,

3,Roofline 模型講的是程式在計算平臺的算力和帶寬這兩個指標限制下,所能達到的理論性能上界,而不是實際達到的性能,因為實際計算程序中還有除算力和帶寬之外的其他重要因素,它們也會影響模型的實際性能,這是 Roofline Model 未考慮到的,例如矩陣乘法,會因為 cache 大小的限制、GEMM 實作的優劣等其他限制,導致你幾乎無法達到 Roofline 模型所定義的邊界(屋頂),

所謂 “Roof-line”,指的就是由計算平臺的算力和帶寬上限這兩個引數所決定的“屋頂”形態,如下圖所示,

  • 算力決定“屋頂”的高度(綠色線段)
  • 帶寬決定“房檐”的斜率(紅色線段)

roof-line

Roof-line 劃分出的兩個瓶頸區域定義如下:

Roof-line劃分出的兩個瓶頸區域

個人感覺如果在給定計算平臺上做模型部署作業,因為芯片的算力已定,工程師能做的主要作業應該是提升帶寬,

一,模型計算量分析

終端設備上運行深度學習演算法需要考慮記憶體和算力的需求,因此需要進行模型復雜度分析,涉及到模型計算量(時間/計算復雜度)和模型引數量(空間復雜度)分析,

為了分析模型計算復雜度,一個廣泛采用的度量方式是模型推斷時浮點運算的次數 (FLOPs),即模型理論計算量,但是,它是一個間接的度量,是對我們真正關心的直接度量比如速度或者時延的一種近似估計,

本文的卷積核尺寸假設為為一般情況,即正方形,長寬相等都為 K

  • FLOPs:floating point operations 指的是浮點運算次數,理解為計算量,可以用來衡量演算法/模型時間的復雜度,
  • FLOPS:(全部大寫),Floating-point Operations Per Second,每秒所執行的浮點運算次數,理解為計算速度,是一個衡量硬體性能/模型速度的指標,
  • MACCs:multiply-accumulate operations,乘-加操作次數,MACCs 大約是 FLOPs 的一半,將 \(w[0]*x[0] + ...\) 視為一個乘法累加或 1MACC

注意相同 FLOPs 的兩個模型其運行速度是會相差很多的,因為影響模型運行速度的兩個重要因素只通過 FLOPs 是考慮不到的,比如 MACMemory Access Cost)和網路并行度;二是具有相同 FLOPs 的模型在不同的平臺上可能運行速度不一樣,

注意,網上很多文章將 MACCs 與 MACC 概念搞混,我猜測可能是機器翻譯英文文章不準確的緣故,可以參考此鏈接了解更多,需要指出的是,現有很多硬體都將乘加運算作為一個單獨的指令

卷積層 FLOPs 計算

卷積操作本質上是個線性運算,假設卷積核大小相等且為 \(K\),這里給出的公式寫法是為了方便理解,大多數時候為了方便記憶,會寫成比如 \(MACCs = H \times W \times K^2 \times C_i \times C_o\)

  • \(FLOPs=(2\times C_i\times K^2-1)\times H\times W\times C_o\)(不考慮bias)
  • \(FLOPs=(2\times C_i\times K^2)\times H\times W\times C_o\)(考慮bias)
  • \(MACCs=(C_i\times K^2)\times H\times W\times C_o\)(考慮bias)

\(C_i\) 為輸入特征圖通道數,\(K\) 為過卷積核尺寸,\(H,W,C_o\) 為輸出特征圖的高,寬和通道數二維卷積程序如下圖所示:

二維卷積是一個相當簡單的操作:從卷積核開始,這是一個小的權值矩陣,這個卷積核在 2 維輸入資料上「滑動」,對當前輸入的部分元素進行矩陣乘法,然后將結果匯為單個輸出像素,

卷積程序

公式解釋,參考這里,如下:

理解 FLOPs 的計算公式分兩步,括號內是第一步,計算出output feature map 的一個 pixel,然后再乘以 \(H\times W\times C_o\),從而拓展到整個 output feature map,括號內的部分又可以分為兩步:\((2\times C_i\times K^2-1)=(C_i\times K^2) + (C_i\times K^2-1)\),第一項是乘法運算次數,第二項是加法運算次數,因為 \(n\) 個數相加,要加 \(n-1\)次,所以不考慮 bias 的情況下,會有一個 -1,如果考慮 bias,剛好中和掉,括號內變為\((2\times C_i\times K^2)\)

所以卷積層的 \(FLOPs=(2\times C_{i}\times K^2-1)\times H\times W\times C_o\) (\(C_i\) 為輸入特征圖通道數,\(K\) 為過濾器尺寸,\(H, W, C_o\)為輸出特征圖的高,寬和通道數),

全連接層的 FLOPs 計算

全連接層的 \(FLOPs = (2I ? 1)O\)\(I\) 是輸入層的維度,\(O\) 是輸出層的維度,

二,模型引數量分析

模型引數數量(params):指模型含有多少引數,直接決定模型的大小,也影響推斷時對記憶體的占用量,單位通常為 MGPU 端通常引數用 float32 表示,所以模型大小是引數數量的 4 倍,這里考慮的卷積核長寬是相同的一般情況,都為 K

模型引數量的分析是為了了解記憶體占用情況,記憶體帶寬其實比 FLOPs 更重要,目前的計算機結構下,單次記憶體訪問比單次運算慢得多的多,對每一層網路,端側設備需要:

  • 從主記憶體中讀取輸入向量 / feature map
  • 從主記憶體中讀取權重并計算點積;
  • 將輸出向量或 feature map 寫回主記憶體,

MAes:memory accesse,記憶體訪問次數,

卷積層引數量

卷積層權重引數量 = $ C_i\times K^2\times C_o + C_o$,

\(C_i\) 為輸入特征圖通道數,\(K\) 為過濾器(卷積核)尺寸,\(C_o\) 為輸出的特征圖的 channel 數(也是 filter 的數量),算式第二項是偏置項的引數量 ,(一般不寫偏置項,偏置項對總引數量的數量級的影響可以忽略不記,這里為了準確起見,把偏置項的引數量也考慮進來,)

假設輸入層矩陣維度是 96×96×3,第一層卷積層使用尺寸為 5×5、深度為 16 的過濾器(卷積核尺寸為 5×5、卷積核數量為 16),那么這層卷積層的引數個數為 5×5×3×16+16=1216個,

BN 層引數量

BN 層引數量 = \(2\times C_i\)

其中 \(C_i\) 為輸入的 channel 數(BN層有兩個需要學習的引數,平移因子和縮放因子)

全連接層引數量

全連接層引數量 = \(T_i\times T_o + T_O\)

\(T_i\) 為輸入向量的長度, \(T_o\) 為輸出向量的長度,公式的第二項為偏置項引數量,(目前全連接層已經逐漸被 Global Average Pooling 層取代了,) 注意,全連接層的權重引數量(記憶體占用)遠遠大于卷積層,

三,模型記憶體訪問代價計算

MAC(memory access cost) 記憶體訪問代價也叫記憶體使用量,指的是輸入單個樣本(一張影像),模型/卷積層完成一次前向傳播所發生的記憶體交換總量,即模型的空間復雜度,單位是 Byte

CNN 網路中每個網路層 MAC 的計算分為讀輸入 feature map 大小(DDR 讀)、權重大小(DDR 讀)和寫輸出 feature map 大小(DDR 寫)三部分,

卷積層 MAC 計算

以卷積層為例計算 MAC,可假設某個卷積層輸入 feature map 大小是 (Cin, Hin, Win),輸出 feature map 大小是 (Hout, Wout, Cout),卷積核是 (Cout, Cin, K, K),理論 MAC(理論 MAC 一般小于 實際 MAC)計算公式如下:

# 端側推理IN8量化后模型,單位一般為 1 byte
input = Hin x Win x Cin  # 輸入 feature map 大小
output = Hout x Wout x Cout  # 輸出 feature map 大小
weights = K x K x Cin x Cout + bias   # bias 是卷積層偏置
ddr_read = input +  weights
ddr_write = output
MAC = ddr_read + ddr_write

feature map 大小一般表示為 (N, C, H, W),MAC 指標一般用在端側模型推理中,端側模型推理模式一般都是單幀影像進行推理,即 N = 1(batch_size = 1),不同于模型訓練時的 batch_size 大小一般大于 1,

四,一些概念

雙精度、單精度和半精度

CPU/GPU 的浮點計算能力得區分不同精度的浮點數,分為雙精度 FP64、單精度 FP32 和半精度 FP16,因為采用不同位數的浮點數的表達精度不一樣,所以造成的計算誤差也不一樣,對于需要處理的數字范圍大而且需要精確計算的科學計算來說,就要求采用雙精度浮點數,而對于常見的多媒體和圖形處理計算,32 位的單精度浮點計算已經足夠了,對于要求精度更低的機器學習等一些應用來說,半精度 16 位浮點數就可以甚至 8 位浮點數就已經夠用了,
對于浮點計算來說, CPU 可以同時支持不同精度的浮點運算,但在 GPU 里針對單精度和雙精度就需要各自獨立的計算單元,

浮點計算能力

FLOPS:每秒浮點運算次數,每秒所執行的浮點運算次數,浮點運算包括了所有涉及小數的運算,比整數運算更費時間,下面幾個是表示浮點運算能力的單位,我們一般常用 TFLOPS(Tops) 作為衡量 NPU/GPU 性能/算力的指標,比如海思 3519AV100 芯片的算力為 1.7Tops 神經網路運算性能,

  • MFLOPS(megaFLOPS):等于每秒一佰萬(=10^6)次的浮點運算,
  • GFLOPS(gigaFLOPS):等于每秒拾億(=10^9)次的浮點運算,
  • TFLOPS(teraFLOPS):等于每秒萬億(=10^12)次的浮點運算,
  • PFLOPS(petaFLOPS):等于每秒千萬億(=10^15)次的浮點運算,
  • EFLOPS(exaFLOPS):等于每秒百億億(=10^18)次的浮點運算,

硬體利用率(Utilization)

在這種情況下,利用率(Utilization)是可以有效地用于實際作業負載的芯片的原始計算能力的百分比,深度學習和神經網路使用相對數量較少的計算原語(computational primitives),而這些數量很少的計算原語卻占用了大部分計算時間,矩陣乘法(MM)和轉置是基本操作,MM 由乘法累加(MAC)操作組成,OPs/s(每秒完成操作的數量)指標通過每秒可以完成多少個 MAC(每次乘法和累加各被認為是 1 個 operation,因此 MAC 實際上是 2 個 OP)得到,所以我們可以將利用率定義為實際使用的運算能力和原始運算能力的比值:

算力利用率公式

\[mac\ utilization = \frac {used\ Ops/s}{raw\ OPs/s} = \frac {FLOPs/time(s)}{Raw\_FLOPs}(Raw\_FLOPs = 1.7T\ at\ 3519) \]

五,參考資料

  • PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE
  • 神經網路引數量的計算:以UNet為例
  • How fast is my model?
  • MobileNetV1 & MobileNetV2 簡介
  • 雙精度,單精度和半精度
  • AI硬體的Computational Capacity詳解
  • Roofline Model與深度學習模型的性能分析

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538629.html

標籤:其他

上一篇:MICCAI 論文投稿須知翻譯

下一篇:千年荒漠變綠洲,看沙漠“衛士”攜手昇騰AI植起綠色希望

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more