1. 算力的概念
算力顾名思义是“计算能力”的缩写,指的是IT设备的计算能力。
工信部数据,截至 2023 年 6 月底,全国在用数据中心机架总规模超过 760 万标准机架,算力总规模达到 197 百亿亿次 / 秒(即 197EFLOPS=197*1000P,1P= 每秒 1000 万亿次计算速度)。10 月初,工信部等六部门联合印发《算力基础设施高质量发展行动计划》,提出到 2025 年,计算力方面,算力规模超过300EFLOPS,智能算力占比达到 35% ,东西部算力平衡协调发展。
2. 算力的分类和单位
- 基础算力:以 CPU 的计算能力为主,适用于各个领域的计算
- 智能算力:以 GPU 、FPGA 、ASIC 芯片等输出的计算能力为主,侧重人工智能领域
- 超算算力:以超算( HPC )集群输出的计算能力为主,科研、国防、高端制造等领域
上述算力分类是从狭义的角度进行的统计,目前和信息技术有关的一切,其实都可以笼统称为算力领域,算力及服务的时代,除了狭义上的算力,还包括存储的存力、网络的传输能力、算法的能力等等。
算力的单位通常采用 FLOPS (FloatingPoint Operations Per Second )表示每秒钟能够完成的浮点运算或指令数,例如一台计算机每秒钟可以完成10 亿次浮点运算,那么它的 FLOPS值就是 10 GFLOPS。
除了 FLOPS 还有其他多种不同的衡量方法。主要有如下:
- MIPS(每秒钟执行的百万指令数)
- DMIPS(Dhrystone 每秒钟执行的百万指令数)
- OPS(每秒操作次数,Operations Per Second)
- Hash/s(每秒哈希运算次数, Hash Per Second )
3. 怎么理解“浮点运算”
浮点运算是指计算机处理带“小数位”的加减乘除运算。
例如:1.1加2.2就是属于浮点运算的范畴,我们人脑很好处理,直接就得出 3.3的结果了,但是对计算机来说,是一个非常复杂的过程。因为计算机的能读懂语言都是以 0 和 1构成的二进制数字进行运算的。比如在基础的二进制里,1就是 1,2是“10”,3 是“11”,这也带来一个问题:计算机能够处理的数字只有整数。解决这个问题的办法很简单:0.1 可以看成是 1 除以 10 的结果,我们想让计算机计算一个带小数点的数字,只要告诉CPU这是一个被1后面加了多少个 0 整除的整数就行。因此,计算机在处理小数点的时候,就多了好几个运算步骤,浮点运算的速度也就成了衡量计算机性能的标准。
4. 算力的计算方式
CPU 算力计算公式:
Flops=【CPU核数】*【单核主频】*【CPU单个周期浮点计算能力】
以 6348 CPU 为例,支持 AVX512 指令集,且FMA系数 =2 ,所以 CPU 每周期算力值为:
- CPU 单周期双精度浮点计算能力 = 2 ( FMA 数量)*2 (同时加法和乘法) * 512 / 64 = 32
- CPU 单周期单精度浮点计算能力 = 2 ( FMA 数量)*2 (同时加法和乘法) * 512 / 32 = 64
- 6348 双精算力 = 28 x 2.6(10^9)x(32)/(10^12)= 2.3 Tflops
- 6348 单精算力 = 28 x 2.6(10^9)x(64)/(10^12)= 4.6 Tflops
GPU 算力计算公式:
A100 的核心参数:
- CUDA核心数: 6912 个
- 加速频率:1.41 GHz
- GPU 每核心单个周期浮点计算系数: 2
A100 的标准算力(FP32单精)= 6912 x 1.41 x 2 = 19491.84 Gflots = 19.5 Tflops 双精算力 = 19.5 Tflops / 2 = 9.7 Tflops
5. 常见的不同精度浮点型数据格式
最早在科学计算 HPC 领域,FLOPS通常指双精度浮点数( FP64 )。现在也被用于 AI 领域,但通常指的是其他精度( FP32/FP16/BF16/INT8等类型),同时还引入了一些新的浮点数格式。
- FP64:双精度占用 64位空间,通常用于大规模科学计算、工程计算等需要高精度计算的算法
- FP32:单精度占用 32位空间。与双精度浮点数相比,存储空间较小但精度较低,部分科学计算和工程计算也可以使用 FP32
- FP16:半精度浮点数占用 16位空间。存储空间更小但精度进一步降低,通常用于模型训练过程中参数和梯度计算
- BF16:用于半精度矩阵乘法计算的浮点数格式,占用 16位存储空间。相对于FP16,在保持存储空间相同的情况下能够提高运算精度和效率
- TF32:TensorFLoat-32 ,是 NVIDIA 定义的使用 TensorCore 的中间计算格式
- INT8:8 位整数,用于量化神经网络的计算,由于存储和计算都相对于浮点数更加高效,在低功耗、嵌入式系统和边缘设备等领域有着广泛的应用。用TOPS(Tera Operations Per Second,每秒处理的万亿级别的操作数)作为计算性能的单位。