FLOPs,即浮点运算,是衡量机器学习(ML)模型计算复杂度的基本指标,在深度学习中尤为如此。它量化了模型一次前向传递(通常在推理过程中)所需的浮点运算(如加、减、乘、除)总数。了解 FLOPs 对于评估模型效率、比较不同架构以及确定模型是否适合各种硬件平台(从功能强大的云服务器到资源有限的边缘设备)至关重要。
什么是 FLOP?
浮点运算是任何涉及有小数点的数字(浮点数)的数学计算。在神经网络 (NN) 中,这些运算广泛出现在卷积层和全连接层等层中。浮点数衡量的是处理单个输入(如图像)所需的运算总数。
由于现代深度学习模型涉及数十亿次此类操作,FLOPs 通常以 GigaFLOPs(GFLOPs,数十亿 FLOPs)或 TeraFLOPs(TFLOPs,数万亿 FLOPs)表示。重要的是,不要混淆 FLOPs(总运算,衡量计算工作量的指标)和 FLOPS(每秒浮点运算,衡量硬件处理速度的指标,如GPU 的能力)。在评估模型复杂性时,"FLOPs "几乎总是指总运算次数。
人工智能和机器学习的相关性
FLOPs 是估算人工智能模型计算成本的一个重要的、与硬件无关的指标。其相关性的主要方面包括
FLOP 与相关概念
将 FLOPs 与其他常用指标区分开来很有帮助:
- FLOPs 与参数:参数(或模型权重)的数量表示模型在内存存储方面的大小。FLOPs 衡量的是运行模型的计算成本。一个模型可能有很多参数,但 FLOPs 却很低(例如,如果权重使用稀少),或者参数很少,但 FLOPs 却很高(例如,每个参数涉及很多操作)。这两个指标对于评估效率都很重要。例如,YOLOv9 引入了一些技术,与之前的一些技术相比,可以用相对较少的参数和 FLOP 达到较高的精度。
- FLOPs 与推理速度:FLOPs 代表理论计算工作量,而推理速度(通常以每秒帧数(FPS)或每毫秒推理次数来衡量)则是在特定硬件上的实际测量性能。内存带宽、软件堆栈(例如PyTorch, TensorFlow)、量化和批量大小等因素都会对实际速度产生重大影响。针对延迟与吞吐量的优化展示了实际性能的调整如何超越 FLOPs。
- FLOPs 与 MACs/MACC:乘法累加运算(MAC 或 MACC)计算的是卷积神经网络(CNN)中常见的融合乘法和加法运算的次数。由于一个 MAC 通常涉及一个乘法运算和一个加法运算,因此通常近似为 2 FLOP。有些研究论文或模型卡报告的是 MAC 而不是 FLOP。检查使用的是哪种指标至关重要,因为它们之间的差别大约是 2 倍。在根据报告的计算成本对模型进行比较时,了解这种差异至关重要。
应用与实例
FLOP 广泛应用于各种人工智能和 ML 环境:
- 为边缘部署选择模型:一家开发智能安防摄像头的公司需要一个能在处理能力有限的边缘设备上高效运行的物体检测模型。他们比较了几种模型,包括不同尺寸的Ultralytics YOLO (如 YOLO11n 与 YOLO11s)。通过检查每种型号报告的 FLOPs(如Ultralytics YOLO11 文档中的 FLOPs),他们可以根据设备的计算预算(以硬件 FLOPS 衡量)选择满足延迟要求的最大型号。像YOLO11n这样的低 FLOPs 型号是最佳选择。
- 新架构的基准测试:开发新型计算机视觉架构的研究人员需要证明其效率。他们在COCO 等标准基准数据集上比较其模型的准确度(如mAP)和 GFLOPs。他们将自己的模型与现有的最先进模型(如EfficientNet或各种YOLO 版本)一起绘制在准确率-FLOPs 图上,以显示改进后的权衡结果。许多模型比较页面(如YOLOv9 vs YOLOX)都将 FLOPs 作为关键比较点。
计算和估算 FLOP
FLOP 通常是通过逐层分析模型的架构,并根据输入/输出维度和层类型(卷积、全连接等)求出每层所需的运算量来计算的。各种工具和库,如fvcore或深度学习框架中的内置剖析器,可以帮助自动进行计算或提供估计值。输入分辨率会对许多视觉模型的 FLOP 数量产生重大影响。
局限性
FLOP 虽然有用,但也有局限性:
- 它们没有考虑内存访问成本 (MAC),而内存访问成本可能是一个重要瓶颈。
- 它们无法反映操作中可能存在的并行程度。
- 实际性能在很大程度上取决于特定硬件的优化和底层软件库(cuDNN、Intel MKL)的效率。
- 某些操作(如ReLU 等激活函数)的 FLOP 数较低,但仍会影响延迟。
因此,FLOPs 应与其他性能指标、参数和实际基准一起考虑,以全面了解模型的效率。Ultralytics HUB等工具可以帮助管理模型,并在开发和部署过程中跟踪各种性能方面。