术语表

模型修剪

通过模型剪枝优化机器学习模型。针对资源有限的部署,实现更快的推理、更少的内存使用和更高的能效。

使用Ultralytics HUB 对YOLO 模型进行简单培训

了解更多

模型剪枝是一种机器学习(ML)技术,用于通过减少模型的大小和复杂性来优化训练有素的模型。这包括识别和删除对模型整体性能贡献最小的不太重要的参数,如神经网络(NN)中的模型权重或连接。其主要目的是创建更小、更快的模型,所需的计算能力和内存更少,而精度通常不会显著下降。这一过程是剪枝这一更广泛概念的具体应用,直接应用于 ML 模型,使其在部署时更加高效。

为什么使用模型修剪?

模型剪枝的主要驱动力是效率。现代深度学习(DL)模型,尤其是计算机视觉(CV)等领域的模型,可能非常庞大,而且计算密集。这给模型部署带来了挑战,尤其是在资源有限的设备上,如智能手机、嵌入式系统或边缘计算场景。模型剪枝可通过以下方式帮助解决这些问题:

  • 缩小模型尺寸:更小的模型需要更少的存储空间,这对于像边缘人工智能设备这样内存容量有限的设备来说至关重要。
  • 提高推理速度:更少的参数意味着更少的计算量,从而降低推理延迟,实现实时推理能力,这对自动驾驶汽车等应用至关重要。Ultralytics HUB 应用程序就得益于这种针对移动部署的优化。
  • 降低能耗:计算负荷的减少意味着用电量的降低,有助于实现更可持续的人工智能实践,延长移动设备的电池寿命。
  • 提高泛化能力:有时,剪枝可以通过去除冗余参数来减少过拟合,从而提高模型在未见数据上的性能。

模型修剪类型

模型剪枝技术各不相同,但一般都根据去除内容的粒度划分为不同类别:

  • 权重剪枝(非结构化):将低于一定重要性阈值(通常基于幅度)的单个权重去除(设为零)。这样可以得到稀疏模型,但可能需要专门的硬件或软件,NVIDIA的稀疏模型工具,以获得最佳速度。
  • 神经元修剪:将认为不重要的整个神经元(及其连接)从网络中删除。
  • 过滤器/通道剪枝(结构化):删除卷积神经网络(CNN)中的整个过滤器或通道。这种结构化剪枝方法通常能在标准硬件上实现更直接的提速,而不需要专门的库。Neural Magic 的 DeepSparse等工具利用稀疏性实现CPU 加速,通常与剪枝相结合YOLOv5 与Neural Magic 教程)。

剪枝可以在模型完全训练完成后进行,也可以在训练过程中进行。剪枝后,模型通常会进行微调(在较小的架构上进一步训练),以恢复参数去除过程中损失的性能。像 PyTorch等框架提供了实现各种剪枝方法的实用程序,如PyTorch 剪枝教程所示。

实际应用

模型剪枝在许多人工智能领域都很有价值:

  1. 优化边缘设备上的物体检测类似于 Ultralytics YOLO等用于物体检测的模型可以进行剪枝,以便在资源有限的硬件(如Raspberry PiGoogle 的 EdgeTPUNVIDIA Jetson)上高效运行。这样就能实现设备监控、交通监控(优化交通管理博客)或机器人导航(在机器人学博客中集成 CV)等应用。
  2. 本地部署大型语言模型 (LLM):剪枝技术可大幅缩小大型模型(如基于Transformer架构的模型)的尺寸,使其能够直接在用户设备(如智能手机)上运行,以执行自然语言处理 (NLP)等任务,而无需持续的云连接。这不仅提高了数据的私密性,还减少了设备上翻译或智能助手等应用的延迟。

剪枝与其他优化技术的比较

模型剪枝是用于模型优化的几种技术之一。它有别于以下几种技术,但往往是它们的补充:

  • 模型量化降低模型权重和激活的数值精度(例如,从 32 位浮点数到 8 位整数),从而减小模型大小并加快计算速度,尤其是在具有专门支持的硬件上,如 TensorRT.
  • 知识蒸馏训练一个较小的 "学生 "模型来模仿一个较大的、预先训练好的 "教师 "模型的行为。目的是将大型模型中的知识转移到更紧凑的模型中。

这些技术可以结合使用;例如,可以先对一个模型进行剪枝,然后进行量化,以达到最高效率。优化后的模型通常会导出为标准格式,如 ONNX(Ultralytics 导出选项)等标准格式,以实现广泛的部署兼容性。Ultralytics HUB等平台提供了管理模型和数据集(如 COCO)的环境,并简化了优化部署的路径。

阅读全部