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

Float32、Float16、BFloat16

  • 我们先介绍 Float32、Float16、BFloat16 的 浮点数表示方法

  • 然后根据浮点数表示,来分析总结他们是怎么控制 精度和 数值范围 的

  • 最后再来对比的说明 Float32、Float16、BFloat16 的 应用场景 和 硬件支持

1、浮点数的表示方法

  • Float32 : 单精度浮点数格式

    • 使用 32位(4字节)来表示一个浮点数

    • 遵循 IEEE 754标准,32位 包括 1 位符号位、8 位指数部分和 23 位尾数部分

  • Float16:半精度浮点数格式,

    • 使用 16位(2字节)来表示一个浮点数

    • 遵循 IEEE 754标准,16位 包括 1 位符号位、5 位指数部分和 10 位尾数部分

  • BFloat16: Brain Floating Point 16-bit

    • 使用 16位(2字节)来表示一个浮点数

    • 不遵循 IEEE 754标准,16位 包括 1 位符号位、8 位指数部分 和 7 位尾数部分

数据类型

一共位数

符号位数(Sign)

指数位数(Exponent)

尾数位数(Mantissa)

Float32

32

1

8

23

Float16

16

1

5

10

BFloat16

16

1

8

7

float32 结构为 :
S | EEEEEEEE | MMMMMMMMMMMMMMMMMMMMMMMfloat16 结构为 :
S | EEEEE | MMMMMMMMMMbfloat16 结构为 :
S | EEEEEEEE | MMMMMMMMMMMM

 

浮点数的值 通过以下公式计算:

\text { value }=(-1)^{S} \times(1+\text { Mantissa }) \times 2^{(\text {Exponent-Bias })}

其中 :

  • S:符号位,表示数字的正负:0 为正,1 为负

  • Mantissa:尾数部分

  • Exponent:指数部分,表示 2 的幂次

  • Bias:指数的偏置

    • float32 的 Bias 为 127

    • float16 的 Bias 为 15

    • bfloat16 的 Bias 为 127

下面我们具体来举例说明 浮点数的表示

1)float32

  float32 :32位浮点数,通常称为 单精度浮点数

2)float16

  float16 是 16 位浮点数,通常称为 半精度浮点数

  float16的浮点数表示方法 与 float32 的表示方法类似,只不过在表示上有较小的精度和范围。

3)bfloat16

BFloat16 主要用于 深度学习训练阶段,特别是在需要保持与 Float32 类似的 数值范围 的同时,减少内存占用(精度比较低)


2、指数偏置 Bias

指数的偏置(Bias) 主要是用来 控制指数部分的正负。

由上面例子可知 :

  • 实际指数 是 -1,它表示的是浮点数的真实指数。

  • 实际指数 -1 加上 指数偏置 127 后,得到存储的指数 126,它的二进制形式 01111110 是存储在浮点数表示中的值。

所以,指数偏置的作用:是将原本可能为负的指数值 (-1),转换为 无符号整数(126),以便于计算机在表示时能够方便地使用无符号整数表示 指数部分。


3、精度 与 数值范围

1)指数部分 (Exponent) 控制数据范围

 

  结论 :指数部分位数越多,可以表示的 数据范围越大 

2)尾数部分 (Mantissa) 控制精度

结论 :尾数部分位数越多,可以表示的 精度越高

有效数字:指的是在浮点数表示中,能够精确表达的数字。即,从最左边非零数字到最后一位数字的所有数字

  • 123.45 有 5 个有效数字:1, 2, 3, 4, 5

  • 0.00456 有 3 个有效数字:4, 5, 6

  • 400 有 3 个有效数字:4, 0, 0


4、应用场景 与 硬件支持

应用场景:

  • Float32:最常见的浮点数类型,适用于大多数机器学习的训练阶段和推理阶段,适合精度要求高的任务

  • Float16: 主要用于推理阶段, 数值精度较低,可通过硬件加速提高计算效率

  • BFloat16:主要用于深度学习训练阶段,尤其是在需要保持数值范围的同时(BFloat16保留了和 float32 类似的数值范围),又想要降低内存需求的任务,旨在减少内存占用和加速计算

硬件支持 :

  • Float32 :大多数现代硬件(如 CPU 和 GPU)都对 float32 提供良好的支持

  • Float16:一些 GPU(尤其是 NVIDIA 的 Volta 及之后的架构,如 V100、A100、T4)对 float16 有硬件支持,可以显著加速训练和推理

  • BFloat16bfloat16 在某些硬件(特别是 Google 的 TPU 以及 Intel 的处理器)上得到硬件支持,用于加速深度学习的训练和推理

相关文章:

  • 第一部分:git基本操作
  • Java基础第四章、面向对象
  • 剖析经典二维动画的制作流程,汲取经验
  • C++入门(下)
  • 【网络原理】TCP提升效率机制(二):流量控制和拥塞控制
  • Python 快速获取Excel工作表名称
  • PyTorch与CUDA的关系
  • 脚本批量启动Node服务器
  • SEO长尾关键词布局实战
  • 【Java面试笔记:进阶】19.Java并发包提供了哪些并发工具类?
  • 手写Java线程池与定时器:彻底掌握多线程任务调度
  • 浏览器f12可以搜索接口的入参 和返回内容
  • 新手如何学习人工智能
  • 大模型助力嘉兴妇幼:数据分类分级的智能化飞跃
  • 5.6 Microsoft Semantic Kernel:专注于将LLM集成到现有应用中的框架
  • 25%甘油(灭菌)保存菌液以及10%甘油(普通)保存蛋白的原理及操作-实验操作系列-010
  • MyBatis-Plus 自动填充与更新策略知识清单
  • 反爬策略应对指南:淘宝 API 商品数据采集的 IP 代理与请求伪装技术
  • SkyWalking 安装与使用详细总结
  • Zynq 7000的PS侧DDR3地址范围及相关信息
  • 《我的后半生》:人生下半场,也有活力重启的可能
  • 小马智行彭军:今年是Robotaxi量产元年,有望3年后盈亏平衡
  • 上海汽车贸易有限公司原总经理王璟接受监察调查
  • 广州远洋宾馆负一层配电房发生火情:明火已扑灭,无人员伤亡
  • 18米巨作绘写伏羲女娲,安徽展石虎最后十年重彩画
  • 印尼塔劳群岛发生6.2级地震,震源深度140千米