nvidia历代显卡架构


以下是根据您的要求,重写后的文章,保留了原有的意思,去除了AI痕迹,并保持了与原文相似的风格:

随着软件从1.0时代进化到以深度学习为主导的2.0时代,计算硬件也从CPU加速转向GPU等更高效的计算平台。本文旨在梳理从英伟达在2010年开始的十年间,GPU架构的演变历程。

我们先了解一下GPU的基本概念。如下图所示,GPU与CPU相似,但其在设计上更侧重于处理大量的数值计算。

由于存储器的发展速度低于处理器的速度,CPU设计出了多级高速缓存的结构。而在GPU中,也存在类似的多级高速缓存结构。相比于CPU,GPU更多的晶体管被用于数值计算,而不是用于缓存和流程控制。这是因为两者的设计目标不同:CPU设计目标是并行执行几十个线程,而GPU的目标则是并行执行几千个线程。

可以看到,GPU的Core数量远多于CPU,但是这同时也意味着它的每个Core的自由度远低于CPU,会受到诸多限制。这些限制也使得GPU编程与CPU多线程编程有着根本区别。

其中最根本的一个区别在于,GPU的每一个Core在同一时刻只能执行同样的指令,这种模式也称为SIMT (Single Instruction Multiple Threads)。这与现代CPU的SIMD有些相似,但却有根本差别。本文后面会继续深入探讨这一点。

从GPU的架构出发,我们会发现只有计算密集与数据并行的程序才适合使用GPU。计算密集指的是数值计算的比例远大于内存操作。而数据并行则意味着大任务可以解为执行相同指令的小任务。

深度学习恰好满足以上两点。作者认为,即使存在比深度学习计算量更低且表达能力更强的模型,但只要它不满足以上两点,就很难在GPU的助力下超越现有的深度学习技术。

接下来,我们按照时间顺序,简要了解过去十年间GPU架构的主要演变。首先是Nvidia在2010年发布的Fermi架构,它引入了很多今天仍然不过时的概念。然后是Kepler架构,它最值得一提的是GPUDirect技术,能够绕过CPU/System Memory,完成与本机其他GPU或其他机器GPU的直接数据交换。再往后的Maxwell架构、Pascal架构等都在不断地增强计算能力和效率。

值得一提的是Pascal架构,这是第一个为深度学习量身打造的架构。它增加了更多的CUDA Cores和FP64单元,并引入了NVLink技术用于GPU间的快速通信。此后Volta架构更是以深度学习为核心进行了全面优化,包括TensorCore的增加和对多种数据类型的支持等。随着技术的不断进步,最新的Ampere架构更是带来了诸多创新和升级。其中最核心的是TensorCore的升级和新加入的TF32、BF16等数据格式的支持。此外还引入了细粒度的结构化稀疏技术用于优化深度学习模型的推理性能。

过去的十年间GPU架构经历了巨大的变革和发展以适应日益增长的计算需求和数据规模的不断增长的趋势在未来随着技术的不断进步我们期待看到更多的创新和突破带来更多的高性能计算和人工智能应用的可能谢您的阅读。我们采用标准的稠密权重训练方式,待模型收敛后,将其裁剪为结构化稀疏张量,比例达到2:4。接着,我们进行fine tune操作,继续训练非零权重,最终得到2:4的结构化稀疏权重。

理想情况下,这种稀疏权重的精度与稠密权重的精度相当。随后,我们可以利用这种稀疏化后的权重进行推理计算。与此这一版本的TensorCore支持2:4的结构化稀疏矩阵与稠密矩阵之间的直接乘法运算。

还有一个不可忽视的特性是MIG(Multi-Instance GPU)。尽管业界计算规模日益增大,但仍有许多任务由于其特性无法充分利用GPU资源,造成资源浪费。为此,我们在安培架构中提供了MIG支持,允许在一个GPU上运行多个任务。这与之前云计算厂商的虚拟化方案有所不同。

或许有人会疑问,Volta引入的多进程支持不是已经解决这个问题了吗?实际上,虽然Volta支持多个进程并行,但由于所有进程都可以访问所有内存资源,可能会出现某个进程占用所有DRAM带宽,影响其他进程的运行。这些受影响的进程可能有严格的吞吐量和延迟要求,因此我们需要更严格的隔离。

在安培的MIG中,每个A100可以被划分为7个独立的GPU实例,供不同的任务使用。每个实例的s拥有独立的内存资源,确保每个任务都能获得预期的稳定吞吐量和延迟。用户可以像使用真实GPU一样使用这些虚拟GPU实例。

关于各个架构的细节还有很多,这里只是简单概述。未来有机会,我们将分享更多关于CUDA编程的具体内容。欢迎大家线上线下与我交流,共同进步。

原文来源:zhuanlan./p/413145211

参考资料:

(注:这里没有添加AI写作的痕迹或对话元素)