- 前言
- 一些關鍵字理解
- 計算量 FLOPs
- 記憶體訪問代價 MAC
- GPU 記憶體帶寬
- Latency and Throughput
- Volatile GPU Util
- 英偉達 GPU 架構
- CNN 架構的理解
- 手動設計高效 CNN 架構建議
- 一些結論
- 一些建議
- 輕量級網路模型部署總結
- 輕量級網路論文決議文章匯總
- 參考資料
文章同步發于 github 倉庫 和 csdn 博客,最新板以
github為主,
本人水平有限,文章如有問題,歡迎及時指出,如果看完文章有所識訓,一定要先點贊后收藏,畢竟,贈人玫瑰,手有余香,
前言
關于如何手動設計輕量級網路的研究,目前還沒有廣泛通用的準則,只有一些指導思想,和針對不同芯片平臺(不同芯片架構)的一些設計總結,建議大家從經典論文中吸取指導思想和建議,然后自己實際做各個硬體平臺的部署和模型性能測驗,
一些關鍵字理解
計算量 FLOPs
FLOPs:floating point operations指的是浮點運算次數,理解為計算量,可以用來衡量演算法/模型時間的復雜度,FLOPS:(全部大寫),Floating-point Operations Per Second,每秒所執行的浮點運算次數,理解為計算速度, 是一個衡量硬體性能/模型速度的指標,即一個芯片的算力,MACCs:multiply-accumulate operations,乘-加操作次數,MACCs大約是FLOPs的一半,將 w[0]?x[0]+... 視為一個乘法累加或1個MACC,
記憶體訪問代價 MAC
MAC: Memory Access Cost 記憶體訪問代價,指的是輸入單個樣本(一張影像),模型/卷積層完成一次前向傳播所發生的記憶體交換總量,即模型的空間復雜度,單位是 Byte,
FLOPs和MAC的計算方式,請參考我之前寫的文章 神經網路模型復雜度分析,
GPU 記憶體帶寬
GPU的記憶體帶寬決定了它將資料從記憶體 (vRAM) 移動到計算核心的速度,是比GPU記憶體速度更具代表性的指標,GPU的記憶體帶寬的值取決于記憶體和計算核心之間的資料傳輸速度,以及這兩個部分之間總線中單獨并行鏈路的數量,
NVIDIA RTX A4000 建立在 NVIDIA Ampere 架構之上,其芯片規格如下所示:

A4000 芯片配備 16 GB 的 GDDR6 顯存、256 位顯存介面(GPU 和 VRAM 之間總線上的獨立鏈路數量),因為這些與顯存相關的特性,所以 A4000 記憶體帶寬可以達到 448 GB/s,
Latency and Throughput
參考英偉達-Ashu RegeDirector of Developer Technology 的
ppt檔案 An Introduction to Modern GPU Architecture,
深度學習領域延遲 Latency 和吞吐量 Throughput的一般解釋:
- 延遲 (
Latency): 人和機器做決策或采取行動時都需要反應時間,延遲是指提出請求與收到反應之間經過的時間,大部分人性化軟體系統(不只是 AI 系統),延遲都是以毫秒來計量的, - 吞吐量 (
Throughput): 在給定創建或部署的深度學習網路規模的情況下,可以傳遞多少推斷結果,簡單理解就是在一個時間單元(如:一秒)內網路能處理的最大輸入樣例數,
CPU 是低延遲低吞吐量處理器;GPU 是高延遲高吞吐量處理器,
Volatile GPU Util
一般,很多人通過 nvidia-smi 命令查看 Volatile GPU Util 資料來得出 GPU 利用率,但是!關于這個利用率(GPU Util),容易產生兩個誤區:
- 誤區一:
GPU的利用率 =GPU內計算單元干活的比例,利用率越高,算力就必然發揮得越充分, - 誤區二: 同條件下,利用率越高,耗時一定越短,
但實際上,GPU Util 的本質只是反應了,在采樣時間段內,一個或多個內核(kernel)在 GPU 上執行的時間百分比,采樣時間段取值 1/6s~1s,
原文為 Percent of time over the past sample period during which one or more kernels was executing on the GPU. The sample period may be between 1 second and 1/6 second depending on the product. 來源檔案 nvidia-smi.txt
通俗來講,就是,在一段時間范圍內, GPU 內核運行的時間占總時間的比例,比如 GPU Util 是 69%,時間段是 1s,那么在過去的 1s 中內,GPU 內核運行的時間是 0.69s,如果 GPU Util 是 0%,則說明 GPU 沒有被使用,處于空閑中,
也就是說它并沒有告訴我們使用了多少個 SM 做計算,或者程式有多“忙”,或者記憶體使用方式是什么樣的,簡而言之即不能體現出算力的發揮情況,
GPU Util的本質參考知乎文章-教你如何繼續壓榨GPU的算力 和 stackoverflow 問答,
英偉達 GPU 架構
GPU 設計了更多的晶體管(transistors)用于資料處理(data process)而不是資料緩沖(data caching)和流控(flow control),因此 GPU 很適合做高度并行計算(highly parallel computations),同時,GPU 提供比 CPU 更高的指令吞吐量和記憶體帶寬(instruction throughput and memory bandwidth),
CPU 和 GPU 的直觀對比圖如下所示

圖片來源 CUDA C++ Programming Guide
最后簡單總結下英偉達 GPU 架構的一些特點:
SIMT(Single Instruction Multiple Threads) 模式,即多個Core同一時刻只能執行同樣的指令,雖然看起來與現代CPU的SIMD(單指令多資料)有些相似,但實際上有著根本差別,- 更適合計算密集與資料并行的程式,原因是缺少
Cache和Control,
2008-2020 英偉達 GPU 架構進化史如下圖所示:

另外,英偉達 GPU 架構從 2010 年開始到 2020 年這十年間的架構演進歷史概述,可以參考知乎的文章-英偉達GPU架構演進近十年,從費米到安培,
GPU 架構的深入理解可以參考博客園的文章-深入GPU硬體架構及運行機制,
CNN 架構的理解
在一定的程度上,網路越深越寬,性能越好,寬度,即通道(channel)的數量,網路深度,及 layer 的層數,如 resnet18 有 18 層網路,注意我們這里說的和寬度學習一類的模型沒有關系,而是特指深度卷積神經網路的(通道)寬度,
- 網路深度的意義:
CNN的網路層能夠對輸入影像資料進行逐層抽象,比如第一層學習到了影像邊緣特征,第二層學習到了簡單形狀特征,第三層學習到了目標形狀的特征,網路深度增加也提高了模型的抽象能力, - 網路寬度的意義:網路的寬度(通道數)代表了濾波器(
3維)的數量,濾波器越多,對目標特征的提取能力越強,即讓每一層網路學習到更加豐富的特征,比如不同方向、不同頻率的紋理特征等,
手動設計高效 CNN 架構建議
一些結論
- 分析模型的推理性能得結合具體的推理平臺(常見如:英偉達
GPU、移動端ARMCPU、端側NPU芯片等);目前已知影響CNN模型推理性能的因素包括: 算子計算量FLOPs(引數量Params)、卷積block的記憶體訪問代價(訪存帶寬)、網路并行度等,但相同硬體平臺、相同網路架構條件下,FLOPs加速比與推理時間加速比成正比, - 建議對于輕量級網路設計應該考慮直接
metric(例如速度speed),而不是間接metric(例如FLOPs), FLOPs低不等于latency低,尤其是在有加速功能的硬體 (GPU、DSP與TPU)上不成立,得結合具硬體架構具體分析,- 不同網路架構的
CNN模型,即使是FLOPs相同,但其MAC也可能差異巨大, - 大部分時候,對于
GPU芯片,Depthwise卷積算子實際上是使用了大量的低FLOPs、高資料讀寫量的操作,因為這些具有高資料讀寫量的操作,再加上多數時候GPU芯片算力的瓶頸在于訪存帶寬,使得模型把大量的時間浪費在了從顯存中讀寫資料上,導致GPU的算力沒有得到“充分利用”,結論來源知乎文章-FLOPs與模型推理速度,
一些建議
- 在大多數的硬體上,
channel數為16的倍數比較有利高效計算,如海思351x系列芯片,當輸入通道為4倍數和輸出通道數為16倍數時,時間加速比會近似等于FLOPs加速比,有利于提供NNIE硬體計算利用率,(來源海思351X芯片檔案和MobileDets論文) - 低
channel數的情況下 (如網路的前幾層),在有加速功能的硬體使用普通convolution通常會比separable convolution有效率,(來源 MobileDets 論文) - shufflenetv2 論文 提出的四個高效網路設計的實用指導思想: G1同樣大小的通道數可以最小化
MAC、G2-分組數太多的卷積會增加MAC、G3-網路碎片化會降低并行度、G4-逐元素的操作不可忽視, GPU芯片上 \(3\times 3\) 卷積非常快,其計算密度(理論運算量除以所用時間)可達 \(1\times 1\) 和 \(5\times 5\) 卷積的四倍,(來源 RepVGG 論文)- 從解決梯度資訊冗余問題入手,提高模型推理效率,比如 CSPNet 網路,
- 從解決
DenseNet的密集連接帶來的高記憶體訪問成本和能耗問題入手,如 VoVNet 網路,其由OSA(One-Shot Aggregation,一次聚合)模塊組成,
輕量級網路模型部署總結
在閱讀和理解經典的輕量級網路 mobilenet 系列、MobileDets、shufflenet 系列、cspnet、vovnet、repvgg 等論文的基礎上,做了以下總結:
- 低算力設備-手機移動端
cpu硬體,考慮mobilenetv1(深度可分離卷機架構-低FLOPs)、低FLOPs和 低MAC的shuffletnetv2(channel_shuffle算子在推理框架上可能不支持) - 專用
asic硬體設備-npu芯片(地平線x3/x4等、海思3519、安霸cv22等),目標檢測問題考慮cspnet網路(減少重復梯度資訊)、repvgg(直連架構-部署簡單,網路并行度高有利于發揮GPU算力,量化后有掉點風險) - 英偉達
gpu硬體-t4芯片,考慮repvgg網路(類vgg卷積架構-高并行度帶來高速度、單路架構省顯存/記憶體)
MobileNet block (深度可分離卷積 block, depthwise separable convolution block)在有加速功能的硬體(專用硬體設計-NPU 芯片)上比較沒有效率,
這個結論在 CSPNet 和 MobileDets 論文中都有提到,
除非芯片廠商做了定制優化來提高深度可分離卷積 block 的計算效率,比如地平線機器人 x3 芯片對深度可分離卷積 block 做了定制優化,
下表是 MobileNetv2 和 ResNet50 在一些常見 NPU 芯片平臺上做的性能測驗結果,

以上,均是看了輕量級網路論文總結出來的一些不同硬體平臺部署輕量級模型的經驗,實際結果還需要自己手動運行測驗,
輕量級網路論文決議文章匯總
- MobileNetv1論文詳解
- ShuffleNetv2論文詳解
- RepVGG論文詳解
- CSPNet論文詳解
- VoVNet論文解讀
參考資料
- An Introduction to Modern GPU Architecture
- 輕量級網路論文決議合集
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538380.html
標籤:其他
上一篇:LVS負載均衡集群——DR模式
下一篇:cv演算法工程師成長路線
