terminology


TERMINOLOGY

FLOPs

  • FLOPs:(部分大写,小s)floating point operations 指的是浮点运算次数,理解为计算量,可以用来衡量算法/模型时间的复杂度
  • FLOPS:(全部大写,大s),Floating-point Operations Per Second,每秒所执行的浮点运算次数,理解为计算速度, 是一个衡量硬件性能/模型速度的指标,即一个芯片的算力。
  • MACCsmultiply-accumulate operations,乘-加操作次数,MACCs 大约是 FLOPs 的一半。将 w[0]∗x[0]+… 视为一个乘法累加或 1MACC

MAC

MAC: Memory Access Cost 内存访问代价。指的是输入单个样本(一张图像),模型/卷积层完成一次前向传播所发生的内存交换总量,即模型的空间复杂度,单位是 Byte

Bandwitdh

  • GPU 的内存带宽决定了它将数据从内存 (vRAM) 移动到计算核心
    (Tensor core)的速度,是比 GPU 内存速度更具代表性的指标。
  • GPU 的内存带宽的值取决于内存和计算核心之间的数据传输速度,以及这两个部分之间总线中单独并行链路的数量

Latency and Throughput

  • 延迟 (Latency): 延迟是指提出请求与收到反应之间经过的时间,延迟都是以毫秒来计量的。(单位:ms)
  • 吞吐量 (Throughput): 在一个时间单元(如:一秒)内网络能处理的最大输入样例数。(帧率FPS:samples/second)

CPU 是低延迟低吞吐量处理器;GPU 是高延迟高吞吐量处理器

GPU Utility

本质只是反应了,在采样时间段内,一个或多个内核(kernel)在 GPU 上执行的时间百分比,采样时间段取值 1/6s~1s

通俗来讲,就是,在一段时间范围内, GPU 内核运行的时间占总时间的比例。比如 GPU Util69%,时间段是 1s,那么在过去的 1s 中内,GPU 内核运行的时间是 0.69s。如果 GPU Util0%,则说明 GPU 没有被使用,处于空闲中。

NVIDIA GPU ARCH

GPU 设计了更多的晶体管(transistors)用于数据处理(data process)而不是数据缓冲(data caching)和流控(flow control),因此 GPU 很适合做高度并行计算highly parallel computations)。同时,GPU 提供比 CPU 更高的指令吞吐量内存带宽instruction throughput and memory bandwidth)。

image-20230815160141815

高效 CNN 总结

网络宽度,即通道(channel)的数量,也是滤波器(3 维)的数量;网络深度,即 layer 的层数,如 resnet1818 层网络。注意我们这里说的网络宽度和宽度学习一类的模型没有关系,而是特指深度卷积神经网络的(通道)宽度。

  • 网络深度的意义CNN 的网络层能够对输入图像数据进行逐层抽象,比如第一层学习到了图像边缘特征,第二层学习到了简单形状特征,第三层学习到了目标形状的特征。即深度决定了网络的表达(抽象)能力,网络越深学习能力越强
  • 网络宽度的意义:网络越宽,对目标特征的提取能力越强,即这一层网络能学习到更加丰富的特征,比如不同方向、不同频率的纹理特征等。即宽度决定了网络在某一层学到的信息量

总而言之,在一定的程度上,网络越深越宽,性能越好,但关键在于如何取 trade-off

结论

  1. 分析模型的推理性能得结合具体的推理平台(常见如:英伟达 GPU、移动端 ARM CPU、端侧 NPU 芯片等);目前已知影响 CNN 模型推理性能的因素包括: 算子计算量 FLOPs(参数量 Params)、卷积 block 的内存访问代价(访存带宽)、网络并行度等。但相同硬件平台、相同网络架构条件下, FLOPs 加速比与推理时间加速比成正比。
  2. 建议对于轻量级网络设计应该考虑直接 metric(例如速度 speed),而不是间接 metric(例如 FLOPs)。
  3. FLOPs 低不等于 latency 低,尤其是在有加速功能的硬体 (GPUDSPTPU)上不成立,得结合具硬件架构具体分析
  4. 不同网络架构的 CNN 模型,即使是 FLOPs 相同,但其 MAC 也可能差异巨大。
  5. Depthwise 卷积操作对于流水线型 CPUARM 等移动设备更友好,对于并行计算能力强的 GPU 和具有加速功能的硬件(专用硬件设计-NPU 芯片)上比较没有效率Depthwise 卷积算子实际上是使用了大量的低 FLOPs、高数据读写量的操作。因为这些具有高数据读写量的操作,再加上多数时候 GPU 芯片算力的瓶颈在于访存带宽,使得模型把大量的时间浪费在了从显存中读写数据上,从而导致 GPU 的算力没有得到“充分利用”。结论来源知乎文章-FLOPs与模型推理速度和论文 G-GhostNet

建议

  1. 在大多数的硬件上,channel 数为 16 的倍数比较有利高效计算。如海思 351x 系列芯片,当输入通道为 4 倍数和输出通道数为 16 倍数时,时间加速比会近似等于 FLOPs 加速比,有利于提供 NNIE 硬件计算利用率。(来源海思 351X 芯片文档和 MobileDets 论文)
  2. channel 数的情况下 (如网路的前几层),在有加速功能的硬件使用普通 convolution 通常会比 separable convolution 有效率。(来源 MobileDets 论文
  3. shufflenetv2 论文 提出的四个高效网络设计的实用指导思想: G1同样大小的通道数可以最小化 MAC、G2-分组数太多的卷积会增加 MAC、G3-网络碎片化会降低并行度、G4-逐元素的操作不可忽视。
  4. GPU 芯片上 3×3 卷积非常快,其计算密度(理论运算量除以所用时间)可达 1×1 和 5×5 卷积的四倍。(来源 RepVGG 论文
  5. 从解决梯度信息冗余问题入手,提高模型推理效率。比如 CSPNet 网络。
  6. 从解决 DenseNet 的密集连接带来的高内存访问成本和能耗问题入手,如 VoVNet 网络,其由 OSAOne-Shot Aggregation,一次聚合)模块组成。

模型部署总结

在阅读和理解经典的轻量级网络 mobilenet 系列、MobileDetsshufflenet 系列、cspnetvovnetrepvgg 等论文的基础上,做了以下总结:

  1. 低算力设备-手机移动端 cpu 硬件,考虑 mobilenetv1(深度可分离卷机架构-低 FLOPs)、低 FLOPs 和 低MACshuffletnetv2channel_shuffle 算子在推理框架上可能不支持)
  2. 专用 asic 硬件设备-npu 芯片(地平线 x3/x4 等、海思 3519、安霸cv22 等),分类、目标检测问题考虑 cspnet 网络(减少重复梯度信息)、repvgg2(即 RepOptimizer: vgg 型直连架构、部署简单)
  3. 英伟达 gpu 硬件-t4 芯片,考虑 repvgg 网络(类 vgg 卷积架构-高并行度有利于发挥 gpu 算力、单路架构省显存/内存,问题: INT8 PTQ 掉点严重)

MobileNet block (深度可分离卷积 block, depthwise separable convolution block)在有加速功能的硬件(专用硬件设计-NPU 芯片)上比较没有效率。

显卡性能

img

持久模式:persistence mode 能够让 GPU 更快响应任务,待机功耗增加。
        关闭 persistence mode 同样能够启动任务。
        持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少
风扇转速:主动散热的显卡一般会有这个参数,服务器显卡一般是被动散热,这个参数显示N/A。
        从0到100%之间变动,这个速度是计算机期望的风扇转速,实际情况下如果风扇堵转,可能打不到显示的转速。
        有的设备不会返回转速,因为它不依赖风扇冷却而是通过其他外设保持低温(比如有些实验室的服务器是常年放在空调房间里的)。 
温度:单位是摄氏度。 
性能状态:从P0到P12,P0表示最大性能,P12表示状态最小性能。 
Disp.A:Display Active,表示GPU的显示是否初始化。 
ECC纠错:这个只有近几年的显卡才具有这个功能,老版显卡不具备这个功能。 
MIG:Multi-Instance GPU,多实例显卡技术,支持将一张显卡划分成多张显卡使用,目前只支持安培架构显卡。
新的多实例GPU (MIG)特性允许GPU(从NVIDIA安培架构开始)被安全地划分为多达7个独立的GPU实例。
用于CUDA应用,为多个用户提供独立的GPU资源,以实现最佳的GPU利用率。
对于GPU计算能力未完全饱和的工作负载,该特性尤其有益,因此用户可能希望并行运行不同的工作负载,以最大化利用率。

RTX4090,24GB显存,大概1.5W人民币;

A100,40GB显存,大概5.5W人民币;

A100,80GB显存,大概7.5W人民币;

H100,80GB显存,大概24W人民币;

单机多卡

  • PCIE通信的情况下(rtx4090显卡情况),单卡性能为基准100%,那么双卡的性能可能是(100%+90%),三卡可能是(100%+90%+80%),以此类推,8卡可能是(100%+90%+80%+70%+60%+50%+40%+30%),也就是说使用PCIE通信的情况下单机多卡的加速比要远低于线性加速比。

  • 如果使用nvlink通信(A100和H100显卡情况),单卡性能为基准100%,那么双卡的性能可能是(100%+98%),三卡可能是(100%+98%+96%),以此类推,8卡可能是(100%+98%+96%+94%+92%+90%+88%+86%),所以说单机多卡的情况下nvlink通信也会较大幅度提供性能。

$ nvidia-smi topo --matrix              #查看系统/GPU 拓扑
$ nvidia-smi nvlink --status            #查询 NVLink 连接本身以确保状态、功能和运行状况。
$ nvidia-smi nvlink --capabilities      #查询 NVLink 连接本身以确保状态、功能和运行状况。
$ nvidia-smi topo --matrix
        GPU0    GPU1    CPU Affinity    NUMA Affinity
GPU0     X      SYS     0,2,4,6,8,10    0
GPU1    SYS      X      1,3,5,7,9,11    1

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

$ nvidia-smi nvlink --status
GPU 0: NVIDIA A100 80GB PCIe (UUID: GPU-e940fdff-7348-576b-fa77-4ce0f23dac70)
         Link 0: <inactive>
         Link 1: <inactive>
         Link 2: <inactive>
         Link 3: <inactive>
         Link 4: <inactive>
         Link 5: <inactive>
         Link 6: <inactive>
         Link 7: <inactive>
         Link 8: <inactive>
         Link 9: <inactive>
         Link 10: <inactive>
         Link 11: <inactive>
GPU 1: NVIDIA A100 80GB PCIe (UUID: GPU-1bf9bc37-b6aa-f94a-56b3-02cc34601dae)
         Link 0: <inactive>
         Link 1: <inactive>
         Link 2: <inactive>
         Link 3: <inactive>
         Link 4: <inactive>
         Link 5: <inactive>
         Link 6: <inactive>
         Link 7: <inactive>
         Link 8: <inactive>
         Link 9: <inactive>
         Link 10: <inactive>
         Link 11: <inactive>

多机多卡

单机的基准性能为100%,双机性能(100%+90%),三机性能(100%+90%+90%),四机性能(100%+90%+90%+90%),五机性能(100%+90%+90%+90%+80%)等。

Reference


文章作者: Lee Jet
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lee Jet !
评论
  目录