术语表

半精度

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

半精度,也称为 FP16,是一种浮点数格式,使用 16 位内存来表示一个数字,而不是更常见的 32 位单精度(FP32)或 64 位双精度(FP64)格式。在深度学习中,使用半精度可显著减少模型的内存占用和计算要求。这种权衡是以减少数值范围和精度为代价的。然而,现代技术,尤其是混合精度训练,使 FP16 成为高效机器学习(ML)的基石,因为它可以在对模型精度影响最小的情况下实现更快的训练和推理。

半精度如何工作

从 FP32 到 FP16,存储模型权重和激活所需的内存减少了一半。这样就可以使用更大的模型、更大的批量或在内存更少的GPU上进行训练。此外,现代 GPU(如配备英伟达™(NVIDIA®)张量核心的 GPU)专门设计用于执行 16 位矩阵运算,速度远高于 32 位运算。

FP16 面临的主要挑战是数值范围有限,这可能导致训练过程中出现梯度消失等问题。为了解决这个问题,半精度几乎总是使用混合精度方法来实现。这种策略包括在 FP16 中执行大部分计算以提高速度,但在权重更新和某些损失函数计算等关键操作中战略性地使用 FP32,以保持数值稳定性。PyTorchTensorFlow等深度学习框架为自动混合精度训练提供了内置支持。

应用与实例

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

  1. 加速模型训练:使用混合精度可以显著加快大型深度学习模型如用于图像分类自然语言处理(NLP)的模型)的训练,从而减少训练时间和成本。Ultralytics HUB等平台经常在云训练过程中使用这些优化技术。
  2. 优化对象检测推理: Ultralytics YOLO11等模型可以导出为ONNXTensorRT等格式,并具有 FP16 精度,从而实现更快的实时推理。这对于需要高吞吐量的应用(如分析多个视频馈送的安防系统或高速生产线上的质量控制)来说至关重要。
  3. 在资源有限的设备上部署:FP16 模型内存占用少、计算成本低,适合在英伟达 Jetson边缘人工智能平台或使用TensorFlow Lite苹果 Core ML 等框架的移动设备上部署。
  4. 训练大型语言模型 (LLM): GPT-3等模型和其他基础模型体积庞大,必须使用 16 位格式才能将模型放入内存,并在合理的时间内完成训练

半精度与其他格式

  • Bfloat16 (BF16):Bfloat16 是谷歌开发的另一种 16 位格式,与 FP16 相比,Bfloat16 分配给指数的位数更多,分配给尾数的位数更少。这使其具有与 FP32 相同的动态范围,对下溢和溢出的适应能力更强,但代价是精度较低。谷歌的 TPU 大量使用了这种算法。您可以在谷歌云人工智能博客上了解更多相关信息。
  • 模型量化:虽然两者都是模型优化技术,但模型量化通常是将浮点权重(FP32 或 FP16)转换为低位整数格式,最常见的是 8 位整数 (INT8)。这可以提高速度,尤其是在 CPU 和某些加速器上,但通常需要更仔细的校准过程,如量化感知训练 (QAT),以避免模型性能大幅下降。
  • 单精度(FP32):这是大多数深度学习框架的默认格式。它具有精度高、动态范围广的特点,因此在训练时非常稳健。不过,它比半精度格式更慢、更耗内存,因此不太适合部署大型模型或需要最快速度的应用。正如各种模型比较所示,这些格式之间的权衡是一个关键的考虑因素。

加入 Ultralytics 社区

加入人工智能的未来。与全球创新者联系、合作和成长

立即加入
链接复制到剪贴板