术语表

混合精度

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

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

了解更多

混合精度训练是深度学习中使用的一种技术,可在不显著影响模型性能的情况下加速计算并降低内存需求。它通过在训练和推理过程中对模型的不同部分策略性地使用不同的数值精度格式(主要是 16 位浮点(FP16 或精度)和 32 位浮点(FP32 或单精度))来实现这一目标。这种方法兼顾了较低精度的速度和内存效率,以及较高精度的数值稳定性和准确性

了解数字精度

深度学习模型传统上依赖于IEEE 754 标准单精度浮点格式(FP32)来存储权重、激活度和梯度。FP32 具有宽动态范围和高精度,因此对复杂计算非常稳健。不过,FP32 运算需要大量的计算能力和内存带宽。较低精度的格式,如 FP16,仅使用 16 位,内存占用减半,通常能在兼容硬件(如配备NVIDIA Tensor 核的现代GPU)上实现更快的计算。

混合精度如何工作

混合精度训练智能地结合了 FP16 和 FP32。其核心思想是使用更快的 FP16 格式执行计算密集型操作,如模型层内的卷积和矩阵乘法。然而,某些运算对 FP16 较小的范围和精度很敏感。为了保持模型的稳定性和准确性,训练过程的关键部分,如损失计算梯度更新,通常采用更稳健的 FP32 格式。采用动态损耗缩放等技术,可以在梯度过小或过大而不适合 FP16 表示时防止数值下溢或溢出问题。PyTorch (通过自动混合精度 - AMP)TensorFlow (通过tf.keras.mixed_precision API)等框架为实现混合精度训练提供了自动支持。

混合精度的优势

实施混合精度有几个主要优势:

  • 更快的培训:在支持的硬件上,FP16 操作的速度明显加快,从而缩短了培训时间。
  • 减少内存使用:将模型权重和激活值存储在 FP16 中,可将内存需求减半,从而允许建立更大的模型或增加批次规模,从而提高训练的动态性。
  • 能源效率:更快的计算速度和更少的数据移动可降低训练和推理过程中的能耗。
  • 保持精度:如果使用损失缩放等技术正确实施,混合精度通常可以达到与完整 FP32 训练相当的精度。有关优化训练的更多详情,请参阅这些模型训练技巧

实际应用

混合精度被广泛应用于各种人工智能领域:

  1. 计算机视觉:最先进的物体检测模型,包括 Ultralytics YOLO模型,如 YOLOv8YOLO11等 YOLO 模型通常在训练过程中利用混合精度。这使它们能够更快地进行训练,并处理COCOObjects365 等更大的数据集,最终实现在从云服务器到NVIDIA Jetson 等边缘设备等平台上的高效部署。
  2. 自然语言处理 (NLP): GPT-3BERT大型语言模型 (LLM)的训练需要大量计算。混合精度训练对于管理内存和计算需求至关重要,这使得为文本生成机器翻译情感分析等任务训练这些模型变得可行。

考虑因素和相关概念

混合精度的成功实施固然大有裨益,但也需要:

  • 硬件支持:要达到最佳加速效果,需要专门为加速 FP16 计算而设计的硬件(如NVIDIA Volta、图灵、安培或更新的 GPU)。
  • 数值稳定性:需要谨慎处理,通常通过自动框架工具和损耗缩放来避免与 FP16 的有限范围有关的问题。
  • 框架集成:利用深度学习框架的内置支持,如 PyTorchTensorFlow简化了实施过程。

区分混合精度训练和模型量化非常重要。虽然两者都涉及使用较低精度,但量化通常会将模型转换为更低位的格式(如 INT8),主要是为了优化推理速度和减小模型大小,以便在资源受限的设备上部署,通常是在初始训练之后。混合精度侧重于通过结合 FP16 和 FP32 来加速训练过程本身。

混合精度已成为深度学习工具包中的一项标准技术,可以更快、更高效地开发和训练更大、更复杂的模型。

阅读全部