Press "Enter" to skip to content

一个深入探索模型量化用于大规模部署的文章

介绍

在人工智能中,出现了两个不同的挑战:在云环境中部署大型模型,产生了巨大的计算成本,阻碍了可扩展性和盈利能力,以及需要支持复杂模型的资源受限的边缘设备。这些挑战的共同问题是在不影响准确性的情况下缩小模型尺寸。模型量化是一种流行的技术,可以提供潜在解决方案,但也引发了对潜在准确性的担忧。

一个深入探索模型量化用于大规模部署的文章 四海 第1张

量化感知训练成为一个有力的解决方案。它将量化无缝地集成到模型训练过程中,可以显著减小模型尺寸,有时可以减小两到四倍以上,同时保持重要的准确性。本文深入探讨了量化,在后训练量化(PTQ)和量化感知训练(QAT)之间进行了比较。此外,我们提供了实际见解,展示了如何使用Deci开发的开源训练库SuperGradients来有效地实现这两种方法。

此外,我们还探讨了用于移动和嵌入式平台的卷积神经网络(CNNs)的优化,解决了尺寸和计算需求的独特挑战。我们着重于量化,研究了数字表示在优化移动和嵌入式平台模型中的作用。

学习目标

  • 了解人工智能中模型量化的概念。
  • 了解典型量化级别及其权衡。
  • 区分量化感知训练(QAT)和后训练量化(PTQ)。
  • 探索模型量化的优势,包括内存效率和能源节省。
  • 发现模型量化如何实现更广泛的人工智能模型部署。

本文是Data Science Blogathon的一部分。

理解模型量化的需求

一个深入探索模型量化用于大规模部署的文章 四海 第2张

模型量化是深度学习中的一种基本技术,旨在解决与模型尺寸、推理速度和内存效率相关的关键挑战。它通过将模型权重从高精度浮点表示(通常为32位)转换为较低精度浮点(FP)或整数(INT)格式(例如16位或8位)来实现这一目标。

量化的好处是双重的。首先,它显著减小了模型的内存占用,并提高了推理速度,而不会造成显著的准确性降低。其次,它通过减少内存带宽需求和增强缓存利用来优化模型性能。

在硬件架构上,INT8表示通常在深度神经网络的上下文中被称为“量化”,但是根据不同的模型,还会使用其他格式,如UINT8和INT16,这取决于硬件架构。不同的模型需要不同的量化方法,通常需要先有先验知识,并进行细致的微调以在准确性和模型尺寸减小之间取得平衡。

量化引入了挑战,特别是对于INT8等低精度整数格式,由于其有限的动态范围。将FP32的广阔动态范围压缩为只有255个INT8值可能导致准确性损失。为了解决这个挑战,可以通过通道或层级缩放调整权重和激活张量的比例和零点值,以更好地适应量化格式。

此外,量化感知训练可以在模型训练过程中模拟量化过程,使模型能够优雅地适应较低的精度。通过校准来实现的挤压或范围估计是这个过程的一个重要方面。

总之,模型量化对于部署高效的人工智能模型非常重要,在限制性计算资源的边缘设备上准确性和资源效率之间取得微妙的平衡。

模型量化技术

量化级别

量化将模型的高精度浮点权重和激活转换为较低精度的定点值。 “量化级别”指的是表示这些定点值的比特数。典型的量化级别有8位、16位,甚至是二进制(1位)量化。选择适当的量化级别取决于模型准确性与内存、存储和计算效率之间的权衡。

详细介绍量化感知训练(Quantization-Aware Training, QAT)

量化感知训练(QAT)是一种在神经网络训练过程中使用的技术,用于为其准备量化模型。它帮助模型在低精度数据下有效运行学习。下面是QAT的工作原理:

  • 在QAT期间,模型使用量化约束进行训练。这些约束包括在前向和后向传递过程中模拟低精度数据类型(例如8位整数)。
  • 使用量化感知损失函数,考虑量化误差以惩罚与全精度模型行为的偏差。
  • QAT通过调整权重和激活来帮助模型学习应对量化引起的精度损失。

训练后量化(Post-training Quantization, PTQ)与量化感知训练(QAT)的比较

PTQ和QAT是两种不同的模型量化方法,各具优点和影响。

一个深入探索模型量化用于大规模部署的文章 四海 第3张

训练后量化(PTQ)

PTQ是一种在模型完整训练后应用的量化技术,通常使用浮点表示的标准精度。在PTQ中,模型的权重和激活被量化为较低精度格式,例如8位整数或16位浮点数,以减少内存使用量并提高推理速度。虽然PTQ提供了简单性和与现有模型的兼容性,但由于训练后的转换,可能会导致适度的精确性损失。

量化感知训练(QAT)

另一方面,QAT是一种更为精细的量化方法。它在PTQ模型的基础上进行微调,并将量化过程(包括缩放、剪切和舍入)无缝集成到训练过程中。这使得模型能够在量化后保持准确性。QAT通过优化模型权重以准确模拟推理时的量化。在训练过程中,它使用”伪量化”模块来模拟测试或推理阶段的行为,其中权重被舍入或限制为低精度表示。这种方法在实际推理中导致更高的准确性,因为模型从一开始就知道量化。

量化算法

有各种算法和方法可用于量化神经网络。一些常见的量化技术包括:

  • 权重量化:将模型的权重量化为较低精度值(例如8位整数)。权重量化可以显著减少模型的内存占用。
  • 激活量化:除了量化权重外,在推理过程中可以量化激活。这进一步减少计算需求和内存使用。
  • 动态量化:动态量化允许在推理过程中动态调整量化范围的方法,帮助缓解准确性损失。
  • 量化感知训练(QAT):正如前面提到的,QAT是一种训练方法,可以将量化约束纳入其中,使模型能够在低精度数据下有效运行。
  • 混合精度量化:该技术结合了不同精度的权重和激活量化,以优化准确性和效率。
  • 带校准的训练后量化:在训练后量化中,使用校准来确定权重和激活的量化范围,以最小化准确性损失。

总之,选择训练后量化或量化感知训练(QAT)取决于具体的部署需求以及模型性能和效率之间的平衡。PTQ提供了更简单的方法来减小模型大小,但由于原始全精度模型与量化模型之间的固有差异,可能会导致精确性损失。另一方面,QAT将量化约束直接集成到训练过程中,确保模型从一开始就能够与低精度数据有效运行。

这样可以更好地保留准确性并对量化过程进行更精细的控制。当准确性至关重要时,量化自训练通常是首选。它使深度学习模型能够在优化性能与高效利用硬件资源之间取得微妙的平衡。对于在资源有限的设备上部署,准确性不容妥协的情况下,这是非常适合的。

模型量化的好处

  1. 更快的推理速度:量化模型部署和运行速度更快,非常适合实时应用,如语音识别、图像处理和自动驾驶汽车。降低精度可以实现更快的计算,从而降低延迟。
  2. 降低部署成本:更小的模型尺寸意味着较低的存储和内存需求,显著降低了部署AI解决方案的成本,特别是在存储和计算成本较高的云服务中。
  3. 提高可访问性:量化使得将AI部署在智能手机、物联网设备和边缘计算平台等资源有限的设备上成为可能。这将AI的应用范围扩大到更广泛的受众,为偏远或欠发达地区的应用提供了新机会。
  4. 改善隐私和安全:通过减小模型尺寸,量化可以在设备上进行AI处理,减少将敏感数据发送到集中服务器的需求。这通过最小化数据的暴露,增强了隐私和安全。
  5. 环境影响:更小的模型尺寸意味着较低的功耗,使得数据中心和云基础设施更加节能。这有助于减轻大规模AI部署对环境的影响。
  6. 可扩展性:量化模型更易于分发和部署,可以有效扩展AI服务,以适应日益增长的用户需求和流量,而无需进行重大的基础设施投资。
  7. 兼容性:量化模型通常更兼容更广泛的硬件范围,使得在各种设备和平台上部署AI解决方案更容易。
  8. 实时应用:减小模型尺寸和更快的推理速度使得量化模型非常适合实时应用,如增强现实、虚拟现实和游戏,其中低延迟对于流畅的用户体验至关重要。

这些好处共同使得模型量化成为优化AI部署的关键技术,确保在各种应用和设备上实现高效和可访问性。

一个深入探索模型量化用于大规模部署的文章 四海 第4张

实际应用示例

  • 医疗保健:在医疗保健领域,模型量化使得在边缘设备上部署AI驱动的医学影像解决方案成为可能。便携式超声机和智能手机应用现在可以利用量化模型对心脏状况进行诊断和检测肿瘤。这减少了需要昂贵的专业设备的需求,并使医疗保健专业人员能够在偏远或资源有限的环境中及时提供准确的诊断。
  • 自动驾驶汽车:模型量化在自动驾驶汽车中发挥着关键作用,其中实时决策至关重要。通过减小感知和控制任务的深度学习模型尺寸,自动驾驶汽车可以在嵌入式硬件上高效运行。这提高了安全性、响应能力和导航复杂环境的能力,使自动驾驶成为现实。
  • 自然语言处理(NLP):在自然语言处理领域,量化模型实现了在智能音箱、聊天机器人和移动设备上部署语言模型。这实现了实时的语言理解和生成,使语音助手和语言翻译应用更易于使用,并对用户的查询作出响应。
  • 工业自动化:工业自动化利用量化模型进行预测性维护和质量控制。配备量化模型的边缘设备可以实时监测设备状态和检测缺陷,从而最大程度地减少停机时间,并提高制造工厂的生产效率。
  • 零售和电子商务:零售商使用量化模型进行库存管理和客户参与。部署在店内摄像头上的实时图像识别模型可以跟踪产品可用性并优化店铺布局。类似地,量化的推荐系统为电子商务平台提供个性化的购物体验,提高客户满意度和销售额。

这些实际应用示例说明了模型量化在各个行业的多样性和影响力,使得AI解决方案更加易于获得、高效和具有成本效益。

挑战和注意事项

在模型量化中,有几个关键挑战和注意事项影响了高效的AI部署。一个基本的挑战在于在准确性和效率之间取得微妙的平衡。过度的量化可能会导致显著的准确性损失,因此必须根据应用的具体需求来调整量化方法。

此外,并非所有的AI模型都同样适合量化,模型的复杂性在量化过程中对准确性减少的敏感性起到至关重要的作用。这需要仔细评估量化是否适用于给定的模型和应用场景。后训练量化(PTQ)和量化感知训练(QAT)之间的选择同样至关重要。这个决定显著影响准确性、模型复杂性和开发时间表,强调开发人员需要做出明智的选择,以与项目的部署要求和可用资源相一致。这些考虑共同强调在实施模型量化时需要进行仔细的规划和评估,因为它们直接影响AI应用中模型准确性和资源效率之间的复杂权衡。

准确性权衡

  • 详细探讨模型准确性和量化之间的权衡:本节深入研究通过量化来保持模型准确性并实现资源效率之间的复杂平衡。它探讨了激进量化如何导致准确性损失,并提供了关于适应特定应用的量化级别做出明智决策所需的考虑事项。

量化感知训练挑战

  • 在实施量化感知训练(QAT)时遇到的常见挑战和克服这些挑战的策略:我们解决了开发人员在将量化感知训练(QAT)集成到模型训练过程中遇到的障碍。我们还提供了克服这些挑战的策略和最佳实践,确保成功实施量化感知训练。

硬件限制

  • 探讨硬件加速器在量化模型部署中的作用:本节探讨了硬件加速器(如GPU、TPU和专用的AI硬件)在部署量化模型中的作用。它强调了硬件兼容性和优化对于实现高效和高性能的量化模型推断的重要性。

在树莓派上使用量化的MobileNetV2实现实时物体检测

1:硬件设置

一个深入探索模型量化用于大规模部署的文章 四海 第5张

  • 介绍您的树莓派型号(例如,树莓派4)。
  • 树莓派摄像头模块(或用于旧型号的USB网络摄像头)
  • 电源适配器
  • 带有树莓派OS的MicroSD卡
  • HDMI线缆、显示器、键盘和鼠标(用于初始设置)
  • 强调由于资源限制,需要在树莓派上部署轻量级模型的需求。

2:软件安装

  • 使用树莓派OS(以前称为Raspbian)设置树莓派。
  • 安装Python和所需的库:
sudo apt update
sudo apt install python3-pip
pip3 install opencv-python-headless
pip3 install opencv-python
pip3 install numpy
pip3 install tensorflow==2.7

3:数据收集和预处理

  • 收集或访问用于物体检测的数据集(例如COCO数据集)。
  • 使用LabelImg等工具对图像中感兴趣的对象进行标记。
  • 将注释转换为TensorFlow所需的格式(例如,TFRecord)。

4:导入必要的库

import argparse  # 用于命令行参数解析
import cv2  # OpenCV库,用于计算机视觉任务
import imutils  # 用于处理图像和视频的实用功能
import numpy as np  # 用于数值操作的NumPy库
import tensorflow as tf  # 用于机器学习和深度学习的TensorFlow库

5:模型量化

  • 使用TensorFlow量化预训练的MobileNetV2模型:
import tensorflow as tf

# 加载预训练模型
model = tf.keras.applications.MobileNetV2(weights='imagenet', input_shape=(224, 224, 3))

# 量化模型
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quantized_model = converter.convert()

# 保存量化模型
with open('quantized_mobilenetv2.tflite', 'wb') as f:
    f.write(tflite_quantized_model)

步骤5:部署和实时推理

6: 解析命令行参数

  • 使用“argparse”解析命令行参数。这里配置了接受自定义训练模型的路径、标签文件以及置信度阈值。
# 解析命令行参数
ap = argparse.ArgumentParser()
ap.add_argument("-m", "--model", required=True, help="自定义训练模型的路径")
ap.add_argument("-l", "--labels", required=True, help="类别标签文件的路径")
ap.add_argument("-c", "--confidence", type=float, default=0.2, help="最小概率用于过滤弱检测结果")
args = vars(ap.parse_args())

7: 加载模型和标签

  • 该代码加载自定义训练的目标检测模型和类别标签。
# 加载自定义训练模型和标签
print("[INFO] 加载模型...")
model = tf.saved_model.load(args["model"])  # 加载自定义训练的 TensorFlow 模型
with open(args["labels"], "r") as f:
    CLASSES = f.read().strip().split("\\n")  # 从文件加载类别标签

8: 初始化视频流

  • 设置视频流,从默认摄像头捕获帧。
# 初始化视频流
print("[INFO] 开始视频流...")
cap = cv2.VideoCapture(0)  # 初始化视频流(0代表默认摄像头)
fps = cv2.getTickFrequency()
start_time = cv2.getTickCount()

9: 实时目标检测循环

  • 主循环从视频流中捕获帧,使用自定义模型进行目标检测,并在帧上显示结果。
  • 检测到的对象显示为带有标签和置信度分数的边界框。
while True:
    # 从视频流中读取帧
    ret, frame = cap.read()
    frame = imutils.resize(frame, width=800)  # 调整帧的大小以提高处理速度

    # 使用自定义模型进行目标检测
    detections = model(frame)

    # 遍历检测到的对象
    for detection in detections['detection_boxes']:
        # 提取边界框坐标
        startY, startX, endY, endX = detection[0], detection[1], detection[2], detection[3]

        # 在帧上绘制边界框和标签
        label = CLASSES[0]  # 用你的类别标签逻辑替换
        confidence = 1.0  # 用你的置信度分数逻辑替换
        color = (0, 255, 0)  # 边界框的颜色,这里使用绿色(你可以修改)
        cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
        text = "{}: {:.2f}%".format(label, confidence * 100)
        cv2.putText(frame, text, (startX, startY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

    # 显示带有目标检测结果的帧
    cv2.imshow("自定义目标检测", frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        break  # 按下 'q' 键时退出循环

# 清理资源
cap.release()  # 释放视频流
cv2.destroyAllWindows()  # 关闭 OpenCV 窗口

10: 性能评估

  • 使用时间和系统监测工具(htop)在树莓派上度量推理速度和资源利用率。
  • 讨论在项目中观察到的准确性和效率之间的权衡。

11: 结论和见解

  • 总结关键发现,并强调模型量化如何实现在资源受限的设备(如树莓派)上进行实时目标检测。
  • 突出本项目的实用性和实际应用,如在安全摄像头或机器人中部署目标检测。

通过按照这些步骤并使用提供的 Python 代码,学习者可以在树莓派上构建一个实时目标检测系统,展示模型量化在边缘设备上实现高效人工智能应用的好处。

结论

模型量化是一种重要的技术,深刻影响着 AI 部署的格局。它使资源受限的移动设备和边缘设备能够高效运行 AI 应用,并提高了云端 AI 服务的可伸缩性和成本效益。量化的影响在整个 AI 生态系统中回荡,使 AI 变得更加可访问、响应和环境友好。

此外,量化与新兴的人工智能趋势相一致,如联邦学习和边缘人工智能,开辟了创新的新领域。随着我们目睹人工智能的持续发展,模型量化成为一种至关重要的工具,确保人工智能能够触达更广泛的受众、提供实时洞察,并适应不同行业不断变化的需求。在这个充满活力的景观中,模型量化在人工智能的强大能力与实际部署的可行性之间建立了桥梁,为更高效、可访问和可持续的人工智能解决方案铺平了道路。

要点

  • 模型量化对于在资源受限设备上部署大型人工智能模型至关重要。
  • 量化级别,如8位或16位,可以减小模型大小并提高效率。
  • 量化感知训练(QAT)是在训练期间进行量化训练。
  • 训练后量化(PTQ)简化但可能降低准确性,需要进行微调。
  • 选择取决于具体的部署需求以及准确性和效率之间的平衡,这对于资源受限设备而言至关重要。

常见问题

本文显示的媒体不是Analytics Vidhya所拥有,并根据作者的意愿使用。

Leave a Reply

Your email address will not be published. Required fields are marked *