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

PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战

PyTorch 在深度学习中提供了多种 IEEE 754 二进制浮点格式的支持,包括半精度(float16)、Brain‑float(bfloat16)、单精度(float32)和双精度(float64),并通过统一的 torch.dtype 接口进行管理citeturn0search0turn0search3。用户可利用 torch.finfo 查询各类型的数值极限(如最大值、最小值、机器 ε 等),通过 torch.set_default_dtype/torch.get_default_dtype 设置或获取全局默认浮点精度,并使用 torch.promote_types 控制运算中的类型提升规则citeturn0search2turn0search4。在现代 GPU 上,PyTorch 提供了 torch.amp.autocasttorch.amp.GradScaler 等自动混合精度(AMP)工具,能够在保证数值稳定性的前提下,大幅提升训练速度和降低显存占用citeturn0search6turn0search11。

PyTorch 浮点类型对比

类型 (torch.dtype)别名位宽符号位指数位尾数位 (显式)有效精度 (含隐含位)典型用途
torch.float16torch.half16151011 位 (~3.3 十进制位)推理加速,对精度要求不高的场景
torch.bfloat16161878 位 (~2.4 十进制位)大规模训练(TPU、支持 BF16 的 GPU)
torch.float32torch.float32182324 位 (~7.2 十进制位)深度学习训练/推理的标准精度
torch.float64torch.double641115253 位 (~15.9 十进制位)科学计算、高精度数值分析

上表位宽、指数位、尾数位数据遵循 IEEE 754 标准:二进制16(binary16)格式指数 5 位、尾数 10 位citeturn1search0;二进制32(binary32)格式指数 8 位、尾数 23 位citeturn1search8;二进制64(binary64)格式指数 11 位、尾数 52 位citeturn1search8。

数值属性查询

  • torch.finfo(dtype):返回指定浮点类型的数值极限信息,包括:
    • bits:总位宽
    • eps:机器 ε,即最小增量
    • min/max:可表示的最小/最大值
    • tiny/smallest_normal:最小非规范/规范化值 citeturn0search2。
import torch
print(torch.finfo(torch.float32))
# finfo(resolution=1e-06, min=-3.40282e+38, max=3.40282e+38, eps=1.19209e-07, smallest_normal=1.17549e-38, tiny=1.17549e-38, dtype=float32)

默认精度与类型提升

  • 全局默认浮点精度

    • torch.get_default_dtype():获取当前默认浮点类型,初始值为 torch.float32citeturn0search9。
    • torch.set_default_dtype(d):设置默认浮点类型,仅支持浮点类型输入;后续通过 Python float 构造的张量将采用该类型citeturn0search4。
  • 类型提升 (Type Promotion)

    • torch.promote_types(type1, type2):返回在保证不降低精度与范围的前提下,最小的可兼容浮点类型,用于混合类型运算时的结果类型推断citeturn0search5。

自动混合精度(AMP)

PyTorch 的 AMP 机制在 前向/反向传播 中自动选择低精度(float16bfloat16)计算,而在 权重更新 等关键环节保留 float32,以兼顾性能与数值稳定性。

  • torch.amp.autocast:上下文管理器,针对支持的设备(如 CUDA GPU 或 CPU)自动切换运算精度;在 CUDA 上默认使用 float16,在 CPU 上可指定 dtype=torch.bfloat16citeturn0search6。
  • torch.amp.GradScaler:动态缩放梯度,避免低精度下的梯度下溢,实现稳定训练;与 autocast 搭配使用可获显著加速(1.5–2×)和显存节省citeturn0search11。

示例(CUDA 上的混合精度训练):

from torch.amp import autocast, GradScaler
scaler = GradScaler()
for data, target in loader:optimizer.zero_grad()with autocast():output = model(data)loss = loss_fn(output, target)scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()

实践建议

  1. 开发与调试阶段:优先使用 float32,确保数值稳定。
  2. 大规模训练:若硬件支持 BF16,可尝试 bfloat16 训练;否则在 GPU 上结合 AMP 使用 float16。 3. 部署推理:在对精度容忍度高的场景下采用 float16,监控精度变化。
  3. 默认设置优化:根据项目需求使用 torch.set_default_dtype 控制全局默认精度,并结合 torch.promote_types 处理跨类型运算。

相关文章:

  • PyTorch分布式训练调试方法(跟踪调用过程)
  • java 排序算法-快速排序
  • # 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类
  • Oracle日志系统之附加日志
  • uni-app 安卓10以上上传原图解决方案
  • 2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)
  • uniapp运行在app端如何使用缓存
  • GPU 在机器学习中的应用优势:从技术特性到云端赋能
  • 神经网络优化 - 小批量梯度下降之批量大小的选择
  • CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
  • 初创企业机器学习训练:云服务器配置对效率、成本与可扩展性的影响
  • Python项目--基于机器学习的股票预测分析系统
  • 鸿蒙语言基础
  • c#开发大冲锋游戏登录器
  • OpenCV 中的分水岭算法的原理及其应用---图像分割的利器
  • day31和day32图像处理OpenCV
  • 《数据结构之美--链表oj练习》
  • 【最后203篇系列】028 FastAPI的后台任务处理
  • 第R3周:RNN-心脏病预测
  • 【硬件系统架构】冯·诺依曼架构
  • 第二十届华表奖提名名单公布,张译、王一博、马丽、郭帆等入围
  • 国家发改委党组在《人民日报》发表署名文章:新时代新征程民营经济发展前景广阔大有可为
  • 潘功胜在美谈关税:吁全球经济勿滑向“高摩擦、低信任”轨道
  • 嫦娥八号任务合作项目,这十个入选
  • 再放宽!新版市场准入负面清单发布,无人驾驶航空器、电子烟等新业态被纳入
  • 汪东进卸任中海油董事长,深耕油气领域40余年、已临近退休