FP32、FP16 和 INT8

简介: FP32、FP16 和 INT8

FP32、FP16 和 INT8

当涉及到深度学习和计算任务时,FP32、FP16、INT8 和 INT4 是常用的数据类型,用于表示不同的数值精度和存储需求。

1. FP32

单精度浮点数:提供了较高的精度和动态范围,适用于大多数科学计算和通用计算任务。

位数说明(32 bits)

  • 符号位(sign):1 bit
  • 指数位(exponent):8 bits
  • 尾数位(fraction):24 bits (23 explicitly stored)

计算方式: 参考 维基百科 - Single-precision floating-point format

v a l u e = ( − 1 ) s i g n × 2 ( E − 127 ) × ( 1 + ∑ i = 1 23 b 23 − i 2 − i ) . \mathrm{value}=(-1)^{\mathrm{sign}}\times2^{(E-127)}\times\left(1+\sum_{i=1}^{23}b_{23-i}2^{-i}\right).value=(1)sign×2(E127)×(1+i=123b23i2i).

  • s i g n = b 31 = 0 sign = b_{31} = 0sign=b31=0
  • E = ( b 30 b 29 … b 23 ) 2 = ∑ i = 0 7 b 23 + i 2 + i = 124 E = (b_{30}b_{29} \ldots b_{23})_{2} = \sum\limits_{i=0}^{7}b_{23+i} 2^{+i} =124E=(b30b29b23)2=i=07b23+i2+i=124
  • 1. b 22 b 21 … b 0 = 1 + ∑ i = 1 23 b 23 − i 2 − i = 1 + 1 ⋅ 2 − 2 = 1.25 1.b_{22}b_{21} \ldots b_0 = 1 + \sum\limits_{i=1}^{23} b_{23-i} 2^{-i} = 1 + 1 \cdot 2^{-2} = 1.251.b22b21b0=1+i=123b23i2i=1+122=1.25

结果:

v a l u e = ( + 1 ) × 2 − 3 × 1.25 = + 0.15625. \mathrm{value}=(+1)\times2^{-3}\times1.25=+0.15625.value=(+1)×23×1.25=+0.15625.

可借助 IEEE-754 Floating Point Converter 自动计算:

2. FP16

半精度浮点数:相对于FP32提供了较低的精度,但可以减少存储空间和计算开销。主要应用于深度学习和机器学习等计算密集型任务。

位数说明(16 bits)

  • 符号位(sign):1 bit
  • 指数位(exponent):5 bits
  • 尾数位(fraction):11 bits (10 explicitly stored)

计算方式: 参考 维基百科 - Half-precision floating-point format

Exponent Significand = zero Significand ≠ \neq= zero Equation
0000 0 2 00000_2000002 zero, - 0 subnormal numbers ( − 1 ) s i g n × 2 − 14 × 0. f r a c t i o n 2 (-1)^{\mathrm{sign}}\times2^{-14}\times0.\mathrm{fraction}_{2}(1)sign×214×0.fraction2
0000 1 2 , . . . , 1111 0 2 00001_2, ..., 11110_2000012,...,111102 normalized value normalized value ( − 1 ) s i g n × 2 E − 15 × 1. f r a c t i o n 2 (-1)^{\mathrm{sign}}\times2^{E-15}\times1.\mathrm{fraction}_{2}(1)sign×2E15×1.fraction2
1111 1 2 11111_2111112 ± infinity NaN(quiet, signalling)

3. INT8

8 位整数:主要用于对图像、音频等进行量化处理,以减少计算量和存储需求。

使用 8 位(1 字节)内存来存储每个数值,可以表示范围从 -128 到 127 的整数。

位数说明(8 bits)

  • 最高位代表符号位(0 - 正,1 - 负)

Maximum value:

image.png

Minimum value:

image.png

目录
相关文章
|
6月前
|
机器学习/深度学习
fprintf()函数和fwrite()函数
fprintf()函数和fwrite()函数
67 1
|
6月前
|
C语言
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
sizeof和strlen的对比
sizeof和strlen的对比
51 0
|
人工智能 自然语言处理 PyTorch
使用Unit Scaling进行FP16 和 FP8 训练
Unit Scaling 是一种新的低精度机器学习方法,能够在没有损失缩放的情况下训练 FP16 和 FP8 中的语言模型。
221 0
使用Unit Scaling进行FP16 和 FP8 训练
sizeof与strlen练习
sizeof与strlen练习
51 0
|
C++
C/C++size(),sizeof(),length(),strlen() 对比分析详解
C/C++size(),sizeof(),length(),strlen() 对比分析详解
179 0
C/C++size(),sizeof(),length(),strlen() 对比分析详解
scanf fscanf sscanf printf fprintf sprintf的区别和使用 fseek的使用
scanf fscanf sscanf printf fprintf sprintf的区别和使用 fseek的使用
121 0