就像针对数据中心的GPU可以一直追溯到十年前的 Fermi架构一样,如果我没记错,Tesla C2050是Tesla系列中的第一款计算卡。而今天聊到的Ampere GPU设计中包含计算引擎、缓存和协调逻辑的层次结构。基本的计算单元组织单位是流式多处理器,即SM,SM结构有许多并排放置的不同功能的计算引擎,就像一个部门里的一个个职员,等待部门经理任务分发器并行发送给它们的工作。
在每年发布两次的500强排名中,这些SM单元就是HPC专家所认为的CPU领域的核心,比如在评估超级计算机的核心数量时,这些超级计算机一年两次进入500强。L1指令和数据缓存外的任何计算块都都被这种思维方式的强行核心化,就像你爹对外人介绍你、你哥和你弟统一宣传犬子。而在Nvidia所谓的核心中,我们在CPU Land中可能将其称为单元(Nvidia的人有时也称其为单位,没啥区别,叫法不同而已)。
在过去,SM中的计算个体被称为不同的流处理器(或SPs或CUDA核心),但是这些SPs现在分了很多不同的计算类型,它们具有不同的数据格式和处理类型,而不仅仅是32位的单精度CUDA核心。即SM中的每个SPs都应该被认为是我们所知道的核心,而不应该把SM叫做核心,并且非常粗浅的认为和CPU领域中的核心是一个概念。在GPU方面Nvidia最终关心的是每台设备的绝对功耗、单位功耗的成本以及每瓦效益。
废话说了一大篇,下面看看一个SM团簇和傻儿子SP们的结构:
每个SP具有16个32位整数单元(INT32),16个32位浮点单元(FP32)和8个64位(FP64)单元。这与Volta SM非常相似。下面是Volta SM结构,我们来作个对比:
Volta上0级缓存的大小我们一直被蒙在鼓里,也不知道Ampere GPU的具体规模(你信爆料?)。但是Ampere SP上的翘曲调度程序、调度单元和寄存器文件上的输入设计和速度看起来与Volta GPU上的相同。这两个设备的L1指令高速缓存大小也没有写明,但是我们知道,在SM上的L1数据缓存在伏特下为128 KB,现在增加了50%,达到192kb(安培架构)。加载/存储和纹理单元本质上是相同的。
从整体角度来看,Ampere与Volta大概构型非常相似,但是Ampere SP和SM有很多细节方面的调整,比如融合两个张量的核心单位的SP,使GPU做FP64计算时效率相当爆炸。另外有很多数据格式和稀疏矩阵加速的创新式改进,可以让Ampere在AI工作上提供更高性能,相当于将FP单元或Tensor Core单元加倍,可以在尽可能大的范围内做到这一点。
另外需要提到的一点,稀疏矩阵加速有一个花式技巧,如下图:
在GPU上训练了机器学习模型后,模型会输出一组密集权重。英伟达(Nvidia)创建了一种自动修剪技术,该技术使用2:4非零模式将矩阵的密度降低了一半,不会导致推理权重的有效性下降,并且跳过了引入的零值, Tensor Core单元可以执行的浮点数或整数运算,效率超过使用密集矩阵的两倍之多。
Volta GPU总共有84个SM单元,其中80个SM单元在正常工作,其中4个因为不合格被屏蔽,这帮助Nvidia从代工合作伙伴台积电的12纳米工艺中获得了更好的良品率,这在三年前绝对是最前沿的。随着台积电转向7nm工艺,Ampere芯片上可以有更多的SM单元。SM的增长率提高了52.4%,这是从Volta转向Ampere的性能提升的很大一部分来源。生产的Volta和Ampere平台分别搭载80 SM和108 SM,因此,仅仅因为设备上计算单元数量的增加,理论性能就增加了35%。下面是满血Ampere GA100 128SM的架构图:
安培GPU的计算层次结构是这样的:两个SMs一起组成一个纹理处理器集群(TPC)。其中8个TPC(也就是16个SMs)组成了一个GPU处理集群,其中8个组成了完整的GPU。8个多实例GPU(或MIG)片可以独立地用作虚拟推理引擎和桌面基础设施的虚拟GPU,这就是老黄在发布会上所说多任务的含义。Volta GV100 GPU有6个GPC,理论上它们也可以是自己的MIG,但是Nvidia并没有像在GA100中那样,在GV100中直接为每个GPC分配单独的缓存路径和内存控制器。这就是MIG的真正含义:一个更独立的GPC,消除了在将一个GPU作为8个小设备运行时对内存容量和带宽的争夺。
在SMs全阵列激活的情况下,Ampere有8291个FP32和INT32单元,4096个FP64单元和512个张量核心单元。这是一个集成度相当高的GPU。仅激活了108个SM,就有6912个FP32和INT32单元、3456个FP64单元和432个张量核心单元可以运行工作负载。
从安培(Volta)往安培(Ampere)看,除了架构外其它配套设备也发生了一些重要变化,接口支持PCI-Express 4.0,速率为Volta PCI-Express 3.0接口的带宽的两倍,双工速率为128GB/s(x16插槽上单向为64GB/s)。
还有NVLink端口。如果你使用Pascal PA100 GPU,NVLink 1.0的运行速度为20Gb/s,并且设备上四个端口中的每个端口均提供40GB/s的带宽(单向20GB/s)。而VoltaGPU上Nvidia将其NVLink 2.0的信号传输速率提高到25.8Gb/s,每个方向和六个接口的总带宽为50 GB/s,这使得用户可以在Volta GV100芯片中获得300GB/s的带宽。对于Ampere,不少业内人士认为Nvidia正在让下一代GPU支持PAM-4,PAM-4信号增加两位,并且在25GHz频率下,每个NVLink 3.0双向通道具有与NVLink 2.0相同的25GB/s带宽,但是只需要一半的信号数量与NVLink 2.0配对,每个端口提供相同的50GB/s带宽。因此,现在Ampere芯片可以具有12个NVLink端口,这些端口仍与300GB/s的NVSwitch端口聚合的带宽匹配,这意味着可以做一些拓扑操作来互连GPU,增强使用者的业务灵活性。
在显存方面,A100有12个HBM2显存控制器,被植入GA100芯片上的6组HBM2显存中,使A100拥有40GB的显存容量和1555GB/s的总内存带宽,并且以1215MHz运行。Volta芯片以HBM2内存以877.5 MHz的频率运行,最初只有16GB的容量和900GB/s的带宽。大约一年后,内存容量增加了一倍,但带宽保持不变。去年11月,在去年11月的SC19超级计算会议上,Nvidia悄悄推出了只有PCI-Express 3.0版本和1106 MHz的Tesla V100S。 HBM2内存将Volta上的带宽提高到1134GB/s。为了达到计划要求的性能,V100S可以通过将剩余的四个SM激活以达到完整的84SM,从而将整个性能提高4.7%。但事实证明,V100S只有80个SM在1601 MHz频率下运行,所以性能是增长了4.6%而非4.7%,一些超大规模生产者或HPC中心需要巨大算力的企业才会去购买V100S,而A100会一步一步代替V100S。
如果比较GV100和GA100架构,懂行的人会发现Ampere芯片上的L2缓存分为两个部分,而不是Volta芯片核心的单个L2缓存。二级缓存已增加到40MB,是Volta的6.7倍,并结合了新的分区交叉开关结构,该结构让A100的L2缓存读取是Volta L2缓存读取效率的2.3倍,这是Ampere性能改进的主要因素之一。简单点来说,可能在程序内跑分测试你会发现Volta和Ampere单个单元效率没有变化,但是这些相同的基本计算单元会在A100上获得更多的性能,并将工作从FP32或FP64单位负载移到张量核心上,进一步得到加速。
对于实际TDP,Nvidia的GPU架构师认为他们没有足够的L1缓存和L2缓存来降低GV100芯片中的延迟,并且通过调整内存层次结构并将其扩展到安培架构,从而使安培在Volta设计的单元中获得更多的潜在性能。用于推理的MIG设计和用于虚拟桌面的虚拟gpu的独立路径也是一个优势,它为AI训练和HPC创建了一个更加平衡的引擎。还有许多其他功能可以提高性能,比如异步复制可以将数据从全局HBM2内存加载到SM L1高速缓存,而无需通过寄存器文件。
使用FP16或FP32的FP16、bfloat16 (BF16)和用于新的Tensor Core的张量浮点32 (TF32)格式的FP16显示了在没有稀疏矩阵支持的情况下的性能,开启该模式后性能提高了2倍。稀疏矩阵支持在激活时将Tensor Core的INT4(4字节整数)和INT8(8字节整数)推理处理提高了2倍。Tensor Core不能直接用于FP64计算,但是Tensor Core实现的64位矩阵运算可以提供2倍于FP64运算的吞吐量,相比之下,在GA100上的FP64单元规模对比GV100提升了35%,后者只有普通的FP64单元。
将GA100芯片与GV100进行比较时,基本FP64单元的基本性能仅增加了25%,从7.8TPFS增至9.7TPFS,考虑到SM数量增加了35%,频率降低了7.8%,这大约是比较合理的变动。但是如果你想获得两倍的性能,你可以在每个SP的Tensor Core团运行FP64矩阵运算。
值得一提的是,额外的20%的内存带宽和内存容量将被解锁,剩下的18.5%的潜在性能也将被释放,这些改动将体现在被解封的SM单元上。与Volta架构相比,Ampere的潜在性能更大。