现在有市场消息表示,NVIDIA正计划减少A800 GPU的产量,以促进其更高端的H800 GPU 的销售。很显然NVIDIA是希望从H800 GPU上获得更多销售量,从中国市场获得更多利益。而且最近一段时间有传闻美国要彻底封杀AI芯片的出口,让国内甚至连A100和H800都无法买到,所以受到这个传闻的影响,国内厂商这段时间疯狂采购NVIDIA的GPU,而现在NVIDIA减产A800,同时将产能重心转向H800,很显然是看准了国内厂商的需求,想借此大赚。
之前NVIDIA并没有在国内大量推销H800,主要是让国内公司根据自己需求选购,所以国内公司都更愿意购买A800,毕竟H800售价 25万。不过现在美国彻底封杀AI芯片出口的传闻散播出来,NVIDIA又大大降低了A800的产能,这使得中国厂商不得不转而购买H800 GPU。
H800采用全新的Hopper架构,拥有最高可达 18432 个FP32(单精度)CUDA核心和 9216 个FP64(双精度)CUDA核心,以及576个第四代张量核心。运算能力方面:FP64性能 34 TFlops(34万亿次/秒),FP64 Tensor Core性能 67 TFlops,TF32性能 989 TFlops,FP16 Tensor Core性能 1979 TFlops,INT8性能 3958 TOPS。
看到上面的参数你是否和我一样存有疑惑,CPU为什么只看核心数、主频或者缓存大小而GPU有这么多参数?下面我们就来解读一下GPU这些参数。
文章目录
- Hopper架构核心数
- GPU算力是如何计算的呢?
- 张量核心(Tensor Core )
- GPU这么牛!我们还需要CPU吗?
Hopper架构核心数
一个H800芯片有8组GPC(图形处理器集群),每个又由9个TPC(纹理处理器集群)组成,GPC之间通过L2缓存共享中间数据,GPC计算的中间数据通过NVLink与其他GPU连接/交换。每个TPC由两个SM(流式多处理器)组成。每组SM有128个FP32 CUDA核心,总计18432个。每组SM有64个FP64 CUDA核心,总计9216个。
i9 CPU也只有24核心,那GPU的运算速度快也是无可厚非的。
GPU算力是如何计算的呢?
GPU的性能取决于内存带宽、内存访问模式、并联方式、组网带宽、算法并行性等多个因素,所以GPU算力的计算可以分为理论浮点运算峰值计算能力和实际应用性能。
不同精度核心是固定的,就可以确定在某个精度下的算力了,那我们就可以算出H800的FP64(双精度)算力,已知Hopper架构GPU主频 1.89 GHz,GPU每核心单个周期浮点计算系数是2,从上面我们又知道Hopper架构拥有9216个FP64 CUDA核心。
每一个 SM 的两个 warp(线程束)调度单元和两个指令分发单元,允许同时启动和执行两个 warp。Fermi 双 warp 调度机制可以同时启动两个 warp 。
H800的FP64(双精度)理论峰值算力
= 9216 x 1.89 x 2 = 34836.48 GFlops = 34 TFlops。
由于Hopper架构不同版本的卡核心数略有不同,比如PCIe 5.0版本,SM虽然还是128组,但是CUDA核心只有14952个,所以算力也有所不同。
i9 处理器有 24 核心,基础频率为 3.3 GHz,36 线程,AVX2 每时钟周期的单精度运算次数 32, 每时钟周期的双精度运算次数 16。
i9的FP64(双精度)理论峰值算力
= 24 x 3.3 x 16 = 1267.2 GFlops = 1.2 TFlops。
单个处理器的运算速度超过 1TFLOP,和H800的 34 TFlops相比差距还是非常大的。
浮点数的规格不同,算力载体不同,算力差异是非常巨大的。这里我们要引入另一个概念,通用计算、智算和超算:
- 通用计算算力:FP32(单精度)算力
- AI智算算力:FP16(半精度)算力
- 超算算力:FP64(双精度)算力
《【智算中心】国产GPU横向对比》 中我们也讲到,当前国产GPU还无法达到英伟达通用GPU的能力,只能侧重于某一个方向,比如昇腾910只支持FP16及一下精度,海光DCU却侧重于FP64超算领域。
张量核心(Tensor Core )
Tensor Core 可实现混合精度计算,并能根据精度的降低动态调整算力,在保持准确性的同时提高吞吐量。
TF32 = TensorFlow-32 英伟达提出的代替FP32的单精度浮点格式
早在NVIDIA A100/Ampere安培架构 GPU 中的就引入了新数据类型,TF32 使用与半精度 (FP16) 数学相同的 10 位尾数,表明对于 AI 工作负载的精度要求有足够的余量。并且TF32采用与FP32相同的8位指数,因此可以支持相同的数值范围。使TF32 在性能、范围和精度上实现了平衡 。
这样的组合使TF32 成为了代替FP32 ,进行单精度数学计算的绝佳替代品,尤其是用于大量的乘积累加计算,其是深度学习和许多HPC 应用的核心。
借助于NVIDIA 函示库,用户无需修改代码,即可使其应用程式充分发挥TF32 的各种优势。TF32 Tensor Core 根据FP32 的输入进行计算,并生成FP32 格式的结果。
为获得最佳性能,A100 还具有经过增强的16 位数学功能。它以两倍于TF32 的速度支持FP16 和Bfloat16(BF16)。利用自动混合精度。
GPU这么牛!我们还需要CPU吗?
CPU和GPU大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
于是CPU和GPU就呈现出非常不同的架构(示意图):
CPU由算术逻辑单元(ALU)、控制器(Control )和寄存器(Cache)及实现它们之间联系的数据、控制及状态的总线(DRAM)构成。CPU内核必须处理计算机所做的每一个操作,计算、内存获取、IO、中断,因此它有一个庞大的复杂指令集。要实现指令集,您需要更多的逻辑,因此与 GPU 相比,更多的晶体管每个核心的成本更高。
GPU的特点是有很多的ALU和更少的缓存内存、更简单的指令和更低的每时钟时钟速率,但它们经过优化,可以作为一个组进行更多计算。指令集越简单,缓存越少,每个内核的成本就越低。
所以CPU擅长逻辑控制,串行的运算。而GPU擅长做简单的、重复的,大规模并发计算,应用场景不同,短期内也不存在替代之说。