术语表

半精度

了解半精度 (FP16) 如何通过更快的计算速度、更少的内存使用和更高效的模型部署来加速人工智能。

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

了解更多

半精度,技术上称为 FP16(浮点 16 位),是一种使用 16 位表示数字的数值格式,与更常见的 32 位单精度(FP32)或 64 位双精度(FP64)格式不同。在人工智能(AI)领域,尤其是深度学习(DL)领域,利用半精度已成为优化模型训练和推理的关键技术,可在计算效率和数值精度之间取得平衡。它使模型运行更快,内存消耗更少,使复杂的人工智能在更广泛的硬件上变得可行。

什么是半精度?

浮点数用于在计算机中表示实数,在固定位数内逼近实数。IEEE 754 标准定义了常用格式,包括 FP16 和 FP32。FP16 用 1 位表示符号,5 位表示指数(决定范围),10 位表示有效数字或尾数(决定精度)。相比之下,FP32 使用 1 个符号位、8 个指数位和 23 个意义位。位数的减少意味着 FP16 的数值范围和精度明显低于 FP32。有关这些格式工作原理的基本概述,请参阅浮点运算基础知识

半精度的优势

在深度学习工作流程中,使用 FP16 具有多项优势:

  • 减少内存使用:与 FP32 相比,存储在 FP16 中的模型权重、激活和梯度只需一半内存。这就允许使用更大的模型、更大的批量或在内存有限的设备上部署。
  • 计算速度更快:现代硬件,如配备Tensor 核 的NVIDIA )图形处理器和Google TPU 等专用处理器,执行 FP16 运算的速度比 FP32 运算快得多。
  • 更高的吞吐量和更低的延迟:降低内存带宽要求与加快计算速度相结合,可提高训练期间的吞吐量并降低推理延迟,从而为要求苛刻的应用提供实时推理

潜在缺点

完全使用 FP16 虽然有益,但有时也会导致问题:

  • 数值范围缩小:较小的指数范围使得 FP16 数字更容易出现溢出(变得太大)或下溢(变得太小,通常为零)。
  • 精度较低:符号位数的减少意味着精度的降低,如果管理不慎,有时会影响敏感模型的最终精度
  • 梯度问题:在训练过程中,FP16 中的小梯度值可能会下溢为零,从而阻碍学习。这会加剧梯度消失等问题。

半精度与相关概念

必须将 FP16 与其他数字格式和技术区分开来:

  • 单精度 (FP32):许多机器学习(ML)框架的默认格式,如 PyTorchTensorFlow.对于大多数任务而言,它能很好地兼顾范围和精度,但比 FP16 更耗费资源。
  • 双精度 (FP64):提供极高的精度,但所需内存和计算资源是 FP32 的两倍。主要用于科学计算,很少用于深度学习。
  • 混合精度这是 FP16 在深度学习中最常见的使用方式。它包括在训练或推理过程中战略性地同时使用 FP16 和 FP32。通常,卷积和矩阵乘法等计算密集型操作在 FP16 中执行,以提高速度,而权重更新或某些还原等关键操作则保留在 FP32 中,以保持数值稳定性和准确性。损失缩放等技术有助于缓解下溢问题。请参阅原始混合精度训练论文PyTorch AMPTensorFlow 混合精度指南。Ultralytics 模型经常利用混合精度;请参阅模型训练技巧
  • BFloat16 (BF16):另一种 16 位格式,主要由Google 开发。它使用 8 个指数位(与 FP32 相同,可提供较大范围),但只有 7 个符号位(精度低于 FP16)。它对训练大型语言模型 (LLM) 特别有用。了解有关BFloat16 的更多信息。
  • 模型量化进一步降低模型精度的技术,通常为 8 位整数 (INT8) 或更低。这为在边缘设备上部署提供了最高效率,但通常需要仔细校准或量化感知训练(QAT)来保持精度。请参见 PyTorch上的量化介绍

应用与实例

半精度主要通过混合精度技术得到广泛应用:

  1. 加速模型训练:使用混合精度可以显著加快大型深度学习模型如用于图像分类自然语言处理 (NLP) 的模型)的训练,从而缩短训练时间并降低成本。Ultralytics HUB等平台经常使用这些优化技术。
  2. 优化物体检测推理类似的模型 Ultralytics YOLO11等模型可以导出(使用导出模式文档中描述的工具)为以下格式 ONNXTensorRT等格式,以实现更快的推理。这对于需要实时性能的应用(如自动驾驶汽车或实时视频监控系统)来说至关重要。
  3. 在资源有限的设备上部署:FP16 模型内存占用少、计算成本低,适合在NVIDIA Jetson边缘计算平台或使用TensorFlow LiteCore ML 等框架的移动设备上部署。
  4. 训练大型语言模型 (LLM): GPT-3等模型和较新架构的模型体积庞大,必须使用 16 位格式(FP16 或 BF16)才能将模型装入内存,并在合理的时间内完成训练。

总之,半精度(FP16)是深度学习优化工具包中的一个重要工具,可以加快计算速度,减少内存使用。虽然半精度在范围和精度上有局限性,但使用混合精度技术通常可以有效地解决这些问题,因此对于训练大型模型和部署高效的人工智能应用来说,半精度是不可或缺的。

阅读全部