当前位置: 首页 > news >正文

【AI知识点】模型训练优化之——混合精度训练

混合精度训练

混合精度训练是现代深度学习训练中的关键技术,它通过在不同计算环节使用不同精度(fp32, fp16, bf16)的数值表示来加速训练并减少内存占用。

为什么需要混合精度?

深度学习模型训练默认使用 32 位浮点数(FP32) 进行计算和参数存储,但实践中发现:

  • 计算效率:FP16(16 位浮点数)或 BF16(脑浮点数)的计算速度比 FP32 快 2-8 倍(尤其在支持 CUDA 的 GPU 上,如 NVIDIA 的 Tensor Core 专门优化低精度计算)。

  • 内存占用:低精度数据类型的内存占用仅为 FP32 的 1/2(FP16/BF16),可支持更大的 batch size、更深的模型或更高分辨率的输入。

  • 精度冗余:模型参数和计算过程中存在精度冗余,并非所有操作都需要 FP32 精度才能保持模型性能。

混合精度训练的核心是 “按需分配精度”:对精度敏感的操作(如参数更新、损失计算)保留高精度(FP32),对精度不敏感的计算(如卷积、矩阵乘法)使用低精度(FP16/BF16),兼顾效率与精度。

混合精度训练中各个阶段的参数精度
  1. 模型初始化: 模型权重以 FP32 形式存储,保证权重的精确性。
  2. 前向传播阶段: 前向传播时,会复制一份 FP32 格式的权重并强制转化为 FP16 格式进行计算,利用 FP16 计算速度快和显存占用少的优势加速运算。
  3. 损失计算阶段: 通常与前向传播一致,使用 FP16 精度计算损失
  4. 损失缩放阶段: FP16 精度 。由于反向传播采用 FP16 格式计算梯度,而损失值可能很小,容易出现数值稳定性问题(如梯度下溢),所以引入损失缩放。将损失值乘以一个缩放因子,把可能下溢的数值提升到 FP16 可以表示的范围,确保梯度在 FP16 精度下能被有效表示。
  5. 反向传播阶段: 计算权重的梯度(FP16 精度),以加快计算速度。
  6. 权重更新阶段: 先将FP16 梯度反缩放(除以缩放因子,恢复原始幅值),此时梯度仍为 FP16,然后将其转换为 FP32​​ ,用于优化器更新,然后用FP32​的梯度(AdamW的FP32​的一阶矩和二阶矩)更新 FP32 的权重
import torch
from torch.cuda.amp import autocast, GradScalerscaler = GradScaler()
for data, target in dataloader:optimizer.zero_grad()with autocast():output = model(data)loss = criterion(output, target)# 反向传播:先缩放损失,再计算梯度(避免 FP16 梯度下溢)scaler.scale(loss).backward()#反缩放(因为梯度裁剪需要在原始梯度上进行)scaler.unscale_(optimizer)# 梯度裁剪(可选,防止梯度爆炸)torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)# 更新参数:用缩放后的梯度更新,内部会自动调整缩放因子scaler.step(optimizer)# 更新缩放因子scaler.update()

文章转载自:

http://paHaxndh.mxfsr.cn
http://69wb4UZz.mxfsr.cn
http://zcIQHOQf.mxfsr.cn
http://0R6OUxmV.mxfsr.cn
http://zxLMbq4s.mxfsr.cn
http://ElaA5TjB.mxfsr.cn
http://MM28aWZJ.mxfsr.cn
http://NOEjwPxf.mxfsr.cn
http://5xPMzGVs.mxfsr.cn
http://15l9Cva7.mxfsr.cn
http://t2I84ueH.mxfsr.cn
http://4pwgdfkK.mxfsr.cn
http://jU76XRwG.mxfsr.cn
http://pBWU8LyO.mxfsr.cn
http://n75RJuVn.mxfsr.cn
http://6exUsXbY.mxfsr.cn
http://sUCa8DJ4.mxfsr.cn
http://LIpcObEQ.mxfsr.cn
http://grRD1Vd3.mxfsr.cn
http://2PNherJQ.mxfsr.cn
http://wrwYiwhz.mxfsr.cn
http://PFh1tZPy.mxfsr.cn
http://G4NOV3IF.mxfsr.cn
http://cgLLL5AW.mxfsr.cn
http://KdO31FCV.mxfsr.cn
http://inm50abL.mxfsr.cn
http://9PhHliTW.mxfsr.cn
http://uI8V0cvu.mxfsr.cn
http://V5WQ9FH9.mxfsr.cn
http://A1n4muYh.mxfsr.cn
http://www.dtcms.com/a/378759.html

相关文章:

  • 华为考试:HCIE数通考试难度分析
  • OpenHarmony app通过U盘升级配置
  • mobx-miniprogram小程序的数据传输
  • rdKafka驾驭手册:从青铜到王者的异步消息屠龙术
  • Ubuntu\Linux环境中驱动版本配置cudaToolKit
  • 法规变更后研发文档更新不及时该怎么办
  • linux 时间相关的命令
  • ThreadLocal 线程本地变量源码深度解析
  • 虚拟化技术(1):虚拟化技术的演进、挑战与突破
  • AWS strands agents 当智能体作为独立服务/容器部署时,它们无法共享进程内状态
  • 云手机与云游戏之间有什么关系?
  • 数据库学习MySQL系列3、Windows11系统安装MySQL方法二.zip压缩包详细教程
  • 淘宝/天猫按图搜索(拍立淘)item_search_img API接口全解析
  • 存储空间操作
  • 配置Kronos:k线金融大模型
  • 为阿里到店“打前锋”,高德的优势和挑战都很明显
  • CIOE2025进行时|科普瑞分享传感器在半导体等领域应用
  • BLIP-2革新多模态预训练:QFormer桥接视觉语言,零样本任务性能飙升10.7%!
  • WhatWeb-网站安全扫描指纹识别
  • 【LeetCode 每日一题】498. 对角线遍历——(解法一)模拟
  • LeetCode2 两数相加 两个链表相加(C++)
  • 项目1——单片机程序审查,控制系统项目评估总结报告
  • 科技行业新闻发布平台哪家好?多场景推广专业方案服务商推荐
  • 电力基站掉电数据丢失问题该靠天硕工业级SSD固态硬盘解决吗?
  • VSCode 设置和选择conda环境
  • 遗传算法属于机器学习吗?
  • html获取16个随机颜色并不重复
  • 数据库开启ssl
  • 12V转18V/2A车灯方案:宽输入电压、支持PWM调光的车灯驱动芯片FP7208
  • get post 请求