修剪
通过剪枝优化人工智能模型--降低复杂性、提高效率,并在不牺牲性能的情况下更快地部署到边缘设备上。
剪枝是一种模型优化技术,用于减小训练有素的神经网络 (NN) 的规模和计算复杂度。这一过程包括识别并删除模型中多余或不太重要的参数(权重)或结构(神经元、通道或层)。其目的是创建一个更小、更快、更节能的模型,并保持与原始模型相当的准确度。这对于在边缘设备等资源有限的环境中部署复杂的人工智能模型尤为重要。
修剪工作原理
剪枝过程通常在深度学习模型完全训练完成后开始。它的工作原理是,许多大型模型参数过多,这意味着它们包含许多对最终预测贡献甚微的权重和神经元。识别这些不重要成分的常用方法是分析它们的大小;值接近零的参数被认为不太重要。一旦确定,这些参数就会被删除或设置为零。剪枝过程结束后,现在规模较小的网络通常会进行微调,包括对模型再进行几次历时训练。这一步骤有助于剩余参数适应架构变化,并恢复剪枝过程中可能损失的性能。这种剪枝和微调的迭代过程可以重复进行,以实现模型大小和性能之间的理想平衡,如"深度压缩"等基础研究论文所述。
修剪类型
剪枝技术可根据从网络中删除的内容进行大致分类:
- 非结构化剪枝(权重剪枝):这种方法根据特定标准(如权重大小)从网络中删除单个权重。这种方法会产生一个稀疏的模型,其中许多连接被清零。虽然这种方法可以大大减少参数数量,但在没有专门软件库(如英伟达稀疏模型工具)的CPU或GPU等标准硬件上,它不一定能带来更快的推理速度。
- 结构剪枝:这种方法可删除网络的整个结构组件,如神经元、通道,甚至卷积神经网络(CNN)中的整个层。由于删除的是网络中的规则块,它可以直接缩小模型的大小,降低计算要求,标准硬件可以轻松利用这种方法,通常可以带来更可预测的速度提升。像Neural Magic 的 DeepSparse这样的工具,就是为了在 CPU 上加速这种结构稀疏模型的推理而设计的。
PyTorch和TensorFlow等主要机器学习框架都提供了实施剪枝的内置工具和教程。
实际应用
要在计算资源有限的实际场景中部署强大的人工智能模型,剪枝是必不可少的。
- 优化边缘设备上的物体检测:Ultralytics YOLO等模型用于实时物体检测。通过对YOLOv8 等模型进行剪枝,可将其部署到Raspberry Pi或NVIDIA Jetson 等低功耗边缘设备上。这使得诸如设备智能监控、优化交通管理以及在机器人中集成计算机视觉等应用成为可能。
- 本地运行大型语言模型 (LLM):剪枝可以大幅减少基于Transformer 等架构的大型语言模型 (LLM)的内存占用。经过剪枝的 LLM 可以直接在智能手机或笔记本电脑上运行,用于文本摘要或本地虚拟助手等自然语言处理 (NLP)任务。这不仅提高了响应速度,还通过将用户数据保留在设备上提高了数据隐私性,这也是电子前沿基金会(EFF)等组织的一项重要原则。
剪枝与其他优化技术的比较
剪枝是模型优化的几种技术之一,经常与其他技术一起使用。重要的是要将其与相关概念区分开来:
- 模型量化:这种技术降低了模型权重和激活的数值精度(例如,从 32 位浮点数降至 8 位整数)。这样可以缩小模型大小,加快计算速度,尤其是在有专门支持的硬件上。与删除参数的剪枝不同,量化会压缩参数。
- 知识蒸馏:在这种方法中,训练一个较小的 "学生 "模型来复制一个较大的、预先训练好的 "教师 "模型的输出。其目的是将所学知识转移到更紧凑的架构中,而剪枝则是对现有架构进行修改。
这些技术并不相互排斥。常见的工作流程是首先修剪模型以去除多余参数,然后对修剪后的模型进行量化以获得最高效率。优化后的模型可以使用Ultralytics的导出功能导出为ONNX等标准格式,以便在各种推理引擎中广泛部署。Ultralytics HUB等平台可帮助管理从训练到优化模型部署的整个生命周期。