术语表

混合精度

通过混合精度训练提高深度学习效率!在不牺牲精度的前提下,实现更快的速度、更少的内存使用和更低的能耗。

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

了解更多

混合精度训练是深度学习(DL)中使用的一种技术,用于加速模型训练和减少内存消耗,而不会对模型的准确性产生重大影响。它通过在神经网络(NN)中策略性地组合使用不同的数值精度格式来存储和计算数值来实现这一目标。通常,这包括在存储模型权重等关键部分使用标准的 32 位浮点格式(FP32 或单精度),而在前向和后向传递(反向传播)过程中使用速度更快、内存消耗更少的 16 位浮点格式(FP16或半精度,有时也称为 BF16 或 BFloat16)进行计算。

混合精度如何工作

混合精度的核心理念是利用低精度格式的速度和内存优势,同时缓解潜在的数值稳定性问题。常见的方法包括以下步骤:

  1. 以 FP32 格式保存主权重:以标准 FP32 格式保存模型权重的主副本,以确保权重更新的高精度。
  2. 使用 FP16/BF16 进行计算:在训练循环中,将 FP32 权重转换为 FP16 或 BF16,用于前向和后向传递。在配备了Tensor 核 的NVIDIA )图形处理器等现代硬件上,使用这些低精度格式的计算速度要快得多。
  3. 损耗缩放:使用 FP16 时,可表示数字的范围比 FP32 小得多。这会导致在反向传播过程中计算出的小梯度值变为零(下溢),从而阻碍学习。为了避免这种情况,在反向传播之前,损失值会被放大,从而有效地将梯度放大到 FP16 可表示的范围内。在权重更新之前,这些梯度会被缩减。BF16 具有类似 FP32 的更宽动态范围,但精度较低,因此通常可以避免损失缩放。
  4. 更新主权重:计算出的梯度(如果使用了损耗缩放,则缩减后的梯度)用于更新权重主副本,权重主副本仍保留在 FP32 中。

这种谨慎的平衡使模型的训练速度更快,使用的 GPU 更少。 GPU内存。

混合精度的优势

  • 更快的训练:低精度计算(FP16/BF16)在兼容硬件上的执行速度更快,大大减少了每次训练所需的时间。这样就能更快地进行迭代和实验。
  • 减少内存消耗:FP16/BF16 值所需内存是 FP32 值的一半。这一减少适用于前向传递过程中存储的激活和后向传递过程中计算的梯度。内存使用量降低后,可以训练更大的模型或使用更大的批量,从而提高模型性能和训练稳定性。
  • 提高效率:更快的计算速度和更低的内存带宽要求相结合,可以更有效地利用硬件资源,从而降低云计算或内部集群的培训成本。

混合精度与相关概念

  • 全精度 (FP32):传统训练使用 FP32 进行所有存储和计算。一般来说,它在数值上更稳定,但比混合精度更慢,更耗费内存。
  • 半精度(FP16/BF16):在整个训练过程中只使用 FP16 或 BF16 会导致严重的数值不稳定性(尤其是没有损失缩放等技术的 FP16)和潜在的精度损失。混合精度是一种结合了 FP32 和 FP16/BF16 的更稳健的方法。
  • 模型量化这通常是指将模型权重和/或激活转换为更低精度的格式,如 8 位整数 (INT8),主要用于优化推理速度和效率,尤其是在边缘设备上。虽然有时会在训练过程中使用(量化感知训练),但它有别于标准训练阶段使用的典型 FP32/FP16 混合精度。

应用与实例

在大规模机器学习(ML)模型的训练中,混合精度被广泛采用。

  1. 训练大型语言模型 (LLM): GPT-3BERT 和 T5 等模型有数十亿个参数。仅使用 FP32 对其进行训练将需要大量的GPU 内存和时间。混合精度可显著减少内存需求并加快计算速度,从而使此类基础模型的训练变得可行。 PyTorchTensorFlow等框架提供了对混合精度训练的内置支持。
  2. 加速计算机视觉模型:计算机视觉(CV)领域,混合精度可加快卷积神经网络(CNN)视觉变换器(ViT)等复杂模型的训练,这些模型用于物体检测图像分割图像分类等任务。例如,Ultralytics YOLO 模型,包括最新的 Ultralytics YOLO11训练过程中可以利用混合精度来加快收敛速度和提高资源利用效率,这一点在我们的模型训练技巧和模型比较中已经提到。这样,用户就可以在COCO 等数据集上更快地训练高性能模型。更快的训练周期有助于在Ultralytics HUB 等平台上更快地进行超参数调整和模型开发。混合精度还可以在推理过程中使用,以加快部署速度,特别是在将模型导出为以下格式时 TensorRT等格式导出模型时尤其如此。
阅读全部