【AI系统】计算之比特位宽

简介: 本文详细介绍了计算机中整数和浮点数的比特位宽概念及其在AI模型中的应用。通过对比特位宽的定义、整数与浮点数的表示方法、AI中常用的数据类型(如FP32、TF32、FP16、BF16、FP8和Int8)及其在模型训练和推理中的作用进行了阐述。特别关注了FP8数据类型在提高计算性能和减少内存占用方面的新进展,以及降低比特位宽对AI芯片性能的影响,强调了低比特位宽在AI领域的重要性。

在前面的深度学习计算模式里面我们提到了模型的量化操作,通过建立一种有效的数据映射关系,使得模型以较小的精度损失获得更好的模型执行效率的收益。模型量化的具体操作就是将高比特的数据转换为低比特位宽表示。本文我们将对计算的比特位宽概念做一个更具体的了解。

比特位宽的定义

在计算机科学中,整数和浮点数是两种基本的数据类型,它们在计算机中可以用不同长度的比特表示,也就是比特位宽,比特位宽决定了它们的表示范围和数据精度。下面我们一起回顾一下计算机中整数和浮点数的表示定义。

整数类型

在计算机中,整数类型的表示通常采用二进制补码形式。二进制补码是一种用来表示有符号整数的方法,它具有以下特点:

  • 符号位:整数的最高位(最左边的位)通常用作符号位,0 表示正数,1 表示负数。

  • 数值表示:1)对于正数,其二进制补码与其二进制原码相同。2)对于负数,其二进制补码是其二进制原码取反(除了符号位,每一位取反,0 变为 1,1 变为 0),然后再加 1。

  • 范围:对于 n 位比特位宽的整数类型,其表示范围为 $-2^{(n-1)} \quad$到 $2^{(n-1)}-1\quad$,其中有一位用于表示符号位。

举例说明,对于一个 8 位二进制补码整数:

  • 0110 1100 表示正数 108。

  • 1111 0011 表示负数-13。其二进制原码为 1000 1101,取反得到 1111 0010,加 1 得到补码。

06BitWidth01.png

浮点数类型

在计算机中,浮点数据类型的表示通常采用 IEEE 754 标准,该标准定义了两种精度的浮点数表示:单精度和双精度。

一个单精度浮点数通常由 32 位二进制组成,按照 IEEE 754 标准的定义,这 32 位被划分为三个部分:符号位、指数部分和尾数部分。

  • 符号位:占用 1 位,表示数值的正负。

  • 指数部分:占用 8 位,用于表示数值的阶码(数据范围)。

  • 尾数部分:占用 23 位,用于表示数值的有效数字部分(小数精度)。

一个双精度浮点数通常由 64 位二进制组成,同样按照 IEEE 754 标准的定义,这 64 位被划分为三个部分:符号位、指数部分和尾数部分。同单精度不同的是,指数部分位宽是 11 位,尾数部分位宽是 52 位。单精度和双精度浮点数的取值范围和精度有所不同,双精度浮点数通常具有更高的精度和更大的取值范围。

06BitWidth02.png

IEEE 754 标准中浮点数根据指数的值会分为规格化,非规格化和特殊值,如零值、无穷大和 NaN (Not a Number),它们的定义如下:

规格化浮点数用于表示较大的数值,指数部分至少有一位为 1,可以表示更大的数值范围和更高的精度。非规格化浮点数用于表示接近于零的数值,指数部分全为 0,可以表示比规格化浮点数更接近于零的小数值。

  • 规格化浮点数:指数部分至少有一位为 1,且不能全为 1。在规格化浮点数中,尾数部分的最高位总是 1,并且在存储时通常省略了这个最高位,以节省存储空间。规格化浮点数的指数部分表示了数值的阶码,而尾数部分表示了数值的有效数字。例如,对于单精度浮点数,规格化浮点数的指数范围是 1 到 254。

  • 非规格化浮点数:指数部分全为 0,尾数部分不全是 0。在非规格化浮点数中,尾数部分的最高位不再强制为 1,而是可以为 0,这样可以表示非常接近于零的数值。非规格化浮点数可以用来增加浮点数的精度范围,但通常会失去一些精度。例如,在单精度浮点数中,当指数部分全为 0 时,尾数部分的最高位可以为 0,这时表示的数值接近于零。

  • 特殊值有三种:1)零值:指数部分和尾数部分都为 0,符号位可以为 0 或 1,表示正零或负零,零值的真实值为 0。2)无穷大:指数部分全为 1,尾数部分全为 0,符号位分别为 0 和 1。无穷大的真实值为正无穷大和负无穷大。3)NaN:指数部分全为 1,尾数部分至少有一位为 1,符号位可以是任意值。NaN 表示浮点数的无效操作或不确定结果,NaN 的真实值通常没有实际意义。

对于规格化和非规格化浮点数,其真实值的计算公式定义如下,其中 S 是符号位,取指 0 或 1,表示浮点数的正负;E 是指数部分,决定了数值的范围;M 是尾数部分,决定了小数点的有效位数;$E_{bw}$ 表示指数的位宽;B 表示指数的偏移量,B 的取值取决于浮点数的指数位宽,比如 E 的位宽是 8,$B=2^7-1=127\quad\quad\quad\quad\quad$。

$$ \begin{align} &规格化浮点数:(-1 )^S \times 2^{E-B} \times (1+M)\\ &非规格化浮点数:(-1 )^S \times 2^{1-B} \times M\\ &B=2^{E_{bw}-1}-1\\\ \end{align} $$

举例说明,对一个单精度浮点数的表示:

0 10000011 10100000000000000000000
  • 符号位:0,S=0,表示正数,$(-1)^0=1 \quad\quad\quad$。
  • 指数部分:10000011,E-B=130-127=3,表示指数为 $2^3=8\quad$ 。
  • 尾数部分:10100000000000000000000,表示尾数为 1.101,即 1.625(二进制转换为十进制)。

所以,这个单精度浮点数表示的数值为 8.625。即:

$$ (-1)^0 \times 2^{130-127} \times (1+0.625)=8.625\\ $$

AI 的数据类型及应用

在 AI 模型中常用数据位宽有 8bit、16bit 和 32bit,根据不同的应用场景和模型训练推理阶段需求,可以选择不同位宽的数据类型。

下图是现有 AI 模型中出现过的数据类型位宽和定义,可以看到关于浮点数据类型在 E 和 M 位宽有很多种设计,比如对同样的 16bit 和 8bit 位宽的浮点数,出现了不同的 E,M 位宽设计,这些数据类型的出现也是 AI 领域在具体实践应用中,对软件和硬件设计不断优化的表现。

06BitWidth04.png

AI 不同数据类型格式

FP32: 单精度浮点数格式 ,FP32 是一种广泛使用的数据格式,其可以表示很大的实数范围,足够深度学习训练和推理中使用。每个数据占 4 个字节。

TF32: Tensor Float 32 是 Tensor Core 支持的新的数据类型,从英伟达 A100 中开始支持。TF32 比 FP32 减少了 13 位的小数部分精度位宽,所以其峰值计算速度相比 FP32 有了很大的提升。

FP16: P16 是一种半精度浮点格式,因为神经网络具有很强的冗余性,降低数据位宽的计算对于模型性能来说影响不大,FP16 和 FP32 混合精度训练模式被大量使用。

BF16: FP16 设计时并未考虑深度学习应用,其动态范围太窄。由谷歌开发的 16 位浮点格式称为“Brain Floating Point Format”,简称“bfloat16”,bfloat16 解决了 FP16 动态范围太窄的问题,提供与 FP32 相同的动态范围。其可以认为是直接将 FP32 的前 16 位截取获得的,在 Transformer 架构模型中有很好的表现,因此现在对大模型训练或者微调,都主要采用 BF16 的数据格式。

FP8: FP8 是 NVIDIA 的 H100 GPU 产品中推出的一种 8bit 位宽浮点数据类型,有 E4M3 和 E5M2 两种设计,其中 E5M2 保持了 FP15 的数据范围,而 E4M3 则对数据精度有更好的支持。FP8 数据类型可以在保持与 FP16/BF16 相似的模型精度下,节省模型的内存占用以及提升吞吐量。基于 FP8 的类型在 LLM 领域的表现正在被加速探索中。

Int: Int 数据类型一般在 AI 模型中的特定应用场景中被使用,比如大量整数类型的任务场景,或者对资源受限的硬件平台进行模型量化,Int8 是一个不错的选择。

FP8 实践应用

FP8 数据类型是近两年才出现的浮点数,随着 2022 年英伟达 H100 GPU 产品对其支持的推出,目前已经有了很多的探索应用。下面我们来更具体的了解一下它的定义和应用情况。

FP32、FP16、BF16 和 FP8 E5M2 的浮点数表示都遵循前面提到的 IEEE754 浮点数据标准,FP8 的 E4M3 则不完全遵循 IEEE754 标准约定,主要不同在于当指数位全为 1 时候,去掉了无穷大类型的表示,约定仅当尾数全为 1 表示 NaN,否则仍然表示规格化数据的值,这样可以增加数据的表示范围。比如当二进制序列为 0 1111 110 时候,表示的值为 $1 * 2^8 * 1.75 =448 \quad\quad\quad\quad\quad$。如果仍完全采用 IEEE754 标准,支持的最大的数据是 240。下表展示了 FP8 两种类型的数据范围一些细节。

06BitWidth05.png

FP8 的两种数据类型在神经网络训练的不同部分有不同的用途,在 DNN 训练过程中,这两种类型都都可能被使用。通常,前向传播的 Activations 和 Weights 需要更高的精度,因此在前向传播过程中最好使用 E4M3 数据类型;在反向传播过程中,通过网络传播的 Gradients 通常对精度损失不太敏感,但需要更高的动态范围,最好使用 E5M2 数据格式来存储它们。

AI 模型在业界长期依赖于 FP16 和 FP32 数据类型的训练,后来 BF16 数据类型解决了 GPT 模型计算过程中数据溢出问题也被广泛使用。随着英伟达的 GPU 产品开始推出 FP8 数据类型,除了英伟达本身技术团队对 FP8 应用的实践与支持,越来越多的机构也开始探索 FP8 在 LLM 上的性能表现。比如微软团队在 2023 年的一篇论文提出一种用于训练 LLM 的 FP8 混合精度框架 FP8-LM,将 FP8 尽可能应用在大模型训练的计算、存储和通信中,使用 H100 训练 GPT-175B 的速度比 BF16 快 64%,节省 42% 的内存占用,给以后大规模 LLM 模型应用带来了很大的鼓舞。

数据位宽的降低可以带来了更大的吞吐和更高的计算性能,虽然精度有所降低,但是在 LLM 场景下,采用技术和工程手段,FP8 能够提供与更高精度类型相媲美的结果,同时带来显著的性能提升和能效改善,未来肯定会产生更多的应用实践,以后 AI 芯片的设计也要考虑对 FP8 数据类型的支持。

降低比特位宽

似乎 AI 模型设计中绕不开对低比特位宽数据的探索,在计算资源有限,成本有限的大环境背景下,这是一个必然的选择。高比特的数据位宽,可以保证模型的精度,但是硬件的计算和存储成本也会更高,而对不同的场景,有不同的模型精度需求,所以需要对不同的场景,设计使用不同精度的数据类型,以降低硬件执行的成本。

降低比特位宽其实就是降低数据的精度,对于 AI 芯片来说,降低比特位宽可以带来如下好处:

  1. 降低 MAC 的输入和输出数据位宽,能够有效减少数据的搬运和存储开销。更小的内存搬移带来更低的功耗开销。

  2. 减少 MAC 计算的开销和代价,比如,两个 int8 数据类型的相乘,累加和使用 16bit 位宽的寄存器即可,而 FP16 数据类型的相乘,累加和需要设计 32 位宽的寄存器。8bit 和 16bit 计算对硬件电路设计的复杂度影响也很大。

06BitWidth06.png

上面表格展示了降低位宽对芯片的功耗和面积影响程度。左图是对功耗的比较,随着比特位宽的增加,对应乘加操作的能耗在逐渐增加,从 SRAM 的数据搬移过程是功耗的主要来源;右图是对应芯片面积的比较,可以看到随着数据位宽的增加,需要的芯片面积也在成倍的增加。

针对 AI 芯片不同阶段的精度需求,市场上已经推出了 8-bit 的推理芯片产品和 16-bit 浮点数据的训练芯片产品。比如华为昇腾 910 和英伟达的 A100。

06BitWidth07.png

如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/ 或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~

目录
相关文章
|
5天前
|
人工智能 前端开发 小程序
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
AigcPanel:开源的 AI 虚拟数字人系统,一键安装开箱即用,支持视频合成、声音合成和声音克隆
AigcPanel 是一款开源的 AI 虚拟数字人系统,支持视频合成、声音克隆等功能,适用于影视制作、虚拟主播、教育培训等多种场景。
32 12
AigcPanel:开源的 AI 虚拟数字人系统,一键安装开箱即用,支持视频合成、声音合成和声音克隆
|
2天前
|
存储 人工智能 开发框架
Eliza:TypeScript 版开源 AI Agent 开发框架,快速搭建智能、个性的 Agents 系统
Eliza 是一个开源的多代理模拟框架,支持多平台连接、多模型集成,能够快速构建智能、高效的AI系统。
31 8
Eliza:TypeScript 版开源 AI Agent 开发框架,快速搭建智能、个性的 Agents 系统
|
1天前
|
机器学习/深度学习 人工智能 监控
AI在交通管理系统中的应用
AI在交通管理系统中的应用
31 23
|
3天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
3天前
|
存储 人工智能 芯片
面向AI的服务器计算互连的创新探索
面向AI的服务器计算互连创新探索主要涵盖三个方向:Scale UP互连、AI高性能网卡及CIPU技术。Scale UP互连通过ALink系统实现极致性能,支持大规模模型训练,满足智算集群需求。AI高性能网卡针对大规模GPU通信和存储挑战,自研EIC网卡提供400G带宽和RDMA卸载加速,优化网络传输。CIPU作为云基础设施核心,支持虚拟化、存储与网络资源池化,提升资源利用率和稳定性,未来将扩展至2*800G带宽,全面覆盖阿里云业务需求。这些技术共同推动了AI计算的高效互联与性能突破。
|
2天前
|
人工智能 运维 API
PAI企业级能力升级:应用系统构建、高效资源管理、AI治理
PAI平台针对企业用户在AI应用中的复杂需求,提供了全面的企业级能力。涵盖权限管理、资源分配、任务调度与资产管理等模块,确保高效利用AI资源。通过API和SDK支持定制化开发,满足不同企业的特殊需求。典型案例中,某顶尖高校基于PAI构建了融合AI与HPC的科研计算平台,实现了作业、运营及运维三大中心的高效管理,成功服务于校内外多个场景。
|
8天前
|
机器学习/深度学习 人工智能 自动驾驶
企业内训|AI大模型在汽车行业的前沿应用研修-某汽车集团
本课程是TsingtaoAI为某汽车集团高级项目经理设计研发,课程全面系统地解析AI的发展历程、技术基础及其在汽车行业的深度应用。通过深入浅出的理论讲解、丰富的行业案例分析以及实战项目训练,学员将全面掌握机器学习、深度学习、NLP与CV等核心技术,了解自动驾驶、智能制造、车联网与智能营销等关键应用场景,洞悉AI技术对企业战略布局的深远影响。
138 97
|
13天前
|
机器学习/深度学习 人工智能 物联网
AI赋能大学计划·大模型技术与应用实战学生训练营——湖南大学站圆满结营
12月14日,由中国软件行业校园招聘与实习公共服务平台携手魔搭社区共同举办的AI赋能大学计划·大模型技术与产业趋势高校行AIGC项目实战营·湖南大学站圆满结营。
AI赋能大学计划·大模型技术与应用实战学生训练营——湖南大学站圆满结营
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
39 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务