AI时代人人都应该了解的知识内存计算在人工智能中的应用前景和挑战-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

自动驾驶.智能机器人.新材料发现.医学.医学图像分析……人工智能时代的科学研究严重依赖于计算支持。Nvidia是提供计算能力的领先硬件芯片制造商。如果我们不谈论GPU和Nvidia,我们会尴尬地告诉别人我们在人工智能领域。在人工智能领域,获得Nvidia的相关认证也是该行业非常关注的问题,这代表了该行业在技术.架构和轨道方面的上游地位。

那么,Nvidia的GPU是如何加速计算的呢?本系列将介绍GPU计算加速的一些基本知识:

什么是GPU

GPU的全称是图形处理单元,也称为视觉处理器和图形显示卡。GPU负责渲染2D.3D和VR效果,主要关注计算机图形和图像。

让我们直观地了解GPU

众所周知,由于内存的开发比处理器的开发慢,所以在CPU上开发了多级缓存结构,如上图所示。在GPU中,有类似的多级缓存结构。GPU使用更多的晶体管进行数值计算,而不是CPU,而不是缓存和流量控制。这源于两者的不同设计目标。CPU的设计目标是并行执行几十个线程,而GPU的目标是并行运行数千个线程。

从上图中可以看出,GPU内核的数量远远超过CPU的数量,但也有收益和损失。由此可见,GPU的缓存和控制远低于CPU,这使得GPU单核的自由度远低于CPU的自由度,并将受到许多限制,最终将由程序承担。这些限制也使得GPU编程与CPU多线程编程有着根本的不同。

最基本的区别之一可以从上图中看到。每行有多个核心,但只有一个控件。这意味着多个内核只能同时执行同一指令。此模式也称为SIMT(单指令多线程)。这有点类似于现代CPU的SIMD,但有根本的区别。本文稍后将对此进行详细讨论。

从GPU架构的角度来看,我们会发现,由于缺少缓存和控制,只有计算密集型和数据并行的程序才适合使用GPU。

计算密集型:数值计算的比例远大于内存操作的比例,因此内存访问延迟可以通过计算来屏蔽,因此与CPU相比,对缓存的需求没有那么大。

数据并行姓:大任务可以分解为执行相同指令的小任务,因此对复杂过程控制的需求很低。

深度学习正好满足上述两点。即使有一个模型比深度学习具有更低的计算能力和更强的表达能力,如果它不满足上述两点,它也必然无法在GPU的支持下实现深度学习。

GPU历史

掀起人工智能浪潮

1962年,麻省理工学院博士伊万·萨瑟兰(Ivan Sutherland)发表了一篇论文和他的画板程序,奠定了计算机图形学的基础。在接下来的20年里,计算机图形学不断发展,但当时计算机没有配备特殊的图形处理芯片,图形处理任务都由CPU完成。

1984年,SGI公司为专业领域推出了高端图形工作站,该工作站提供了特殊的图形处理硬件,通常称为图形加速器。开发的图形系统引入了许多经典概念,如顶点变换和纹理映射。在接下来的10年中,SGI不断开发出一系列性能更好的图形工作站。然而,由于价格高昂,很难在消费者市场上获得人气,而且用户非常少。在此期间,消费者领域没有特殊的图形处理硬件,只有一些2D加速器。

1995年,3dfx发布了消费类历史上第一款3D图形加速器voodoo,这也是第一款真正的消费类3D图形卡。在接下来的几年里,AMD和ATI(2006年被AMD收购)分别发布了他们的TNT系列和Rage系列图形卡。他们在硬件上实现了Z缓存和双缓存,并可以执行光栅化等操作。同时,他们还实现了DirectX 6的功能集

2009年10月22日,Microsoft最新的DirectX11随Windows 7一起发布。DirectX11与以前的版本相比没有显著改进,但它是DirectX10的增强补充。其中包含的Shader Model 5.0继承了统一的渲染架构,并在可编程姓方面增加了对计算.外壳和域的支持。目前,支持Shader Model 5.0的代表姓GPU包括NVIDIA的Geforce GTX 580和AMD的Radeon 6970。

截至2011年,由Nvidia主导的CUDA和OpenCL1.2~2.0标准的通用计算已经爆炸式增长。2012年,NVIDIA发布了开普勒架构,2014年,NVIDIA发布Maxwell架构,2016年,Pascal Pascal架构,2017年,Volta Volt架构,2018年,Turing架构,2020年,Ampere Ampere架构系列。随着驱动程序和开发环境的不断优化,科学家和人工智能开发人员认为GPU非常适合并行计算,这可以加速现代科学计算。因此,GPU开启了人工智能时代的浪潮。

CPU和GPU

CPU和GPU都需要使用内核来执行算术和逻辑操作,如加法.减法和乘法。核心中有ALU(逻辑运算单元)和寄存器电路。在计算过程中,核心只能按顺序执行某些任务。因此,为了同时并行处理更多任务,芯片公司开发了一种多核架构。只要彼此之间没有依赖关系,每个核都会做自己的事情,多核之间不会相互干扰,就可以实现并行计算的效果,并且可以大大缩短计算时间。

CPU与GPU

个人桌面计算机CPU通常只有2到8个CPU核,数据中心中的服务器只有大约20到40个CPU核心,而GPU有数千个核心。与CPU内核不同,GPU内核只能专注于特定的任务。智湖的一些人把CPU比作大学教授,把GPU比作学校里成千上万的学生。他们还做加法和减法。成千上万的学生能做的计算比几十名大学教授多得多。俗话说,三个鞋匠等于一个诸葛亮。大学教授的知识结构和个人能力远强于小学生。他们可以独立解决复杂的问题。小学生知识有限,只能进行简单的计算。目前,GPU在处理简单的计算任务方面具有更大的优势,但它主要依赖于人类海战。它不能像CPU那样发挥自己的作用,也不能在短时间内取代CPU。如下图所示,在整个计算机系统中,CPU起着协调和管理的作用,管理计算机的主存储器.硬盘.网络.GPU等组件。

计算机系统架构概述

如果只关注CPU和GPU,计算结构将如下图所示。CPU主要从主存储器读取和写入数据,并通过总线与GPU交互。GPU有自己的独立存储,称为视频存储,除了超级多计算核。服务器上可以安装多个GPU卡,但GPU卡具有巨大的热量输出。普通空调系统很难冷却大量GPU卡。因此,大型数据中心通常使用水冷散热,并且位于温度较低的地方。

CPU和GPU架构

GPU核心在进行计算时只能直接从视频存储器读取和写入数据。程序员需要在代码中指出哪些数据需要从存储器和视频存储器中复制。这些数据在总线上传输,因此总线的传输速度和带宽成为一些计算任务的瓶颈。由于这个瓶颈,许多计算任务不适合GPU。例如,尽管我在过去两年中关注的推荐系统也使用了深度学习,因为输入是大规模稀疏的,但GPU加速带来的收益小于数据相互复制的时间损失。最新的总线技术是NVLink。IBM的Power CPU和Nvidia的高端显卡可以直接通过NVLink进行通信。同时,单个机器上的多个Nvidia图形卡也可以使用NVLink相互通信,这适用于具有多个GPU卡的并行计算场景。

多年来的GPU架构

费米

费米是Nvidia在2010年发布的架构。它引入了许多至今仍未过时的概念。然而,比费米更早的体系结构找不到太多信息。所以t

以前提到过翘曲,但以前只提到过32条线。让我们在这里开始详细解释。首先,让我们看一下双扭曲调度器的概述。

在前面的概览图和上图中,您可以注意到中有两个Warp Scheduler和两个Dispatch Units。这意味着,同时,两个扭曲将同时运行,每个扭曲将分配给一个Cuda核心组(16个Cuda核心).16个加载/存储单元或四个SFU以供实际执行,每次只执行一条指令。warp Scheduler维护多个(例如,几十个)扭曲状态。

这里介绍了一个核心约束。Warp中的线程随时都在执行相同的指令。对于程序员来说,无法观察到Warp中不同线程的不同执行。

但我们都知道,不同的线程可能会进入不同的分支。如何执行相同的指令?

如上图所示,当发生分支时,将只执行进入分支的线程。如果进入分支的线程更少,则会浪费资源。

在概览图中,我们可以看到中有64KB的片上内存,其中48KB是共享内存,16KB是L1缓存。对于L1缓存和非片上L2缓存,它们的功能与CPU多级缓存结构中的L1/L2缓存非常相似,而共享内存与CPU有很大的不同。通常,CPU和GPU中的L1/L2缓存不能由程序员调度。共享内存被设计成一个片上缓存,供程序员调度。

开普勒

2012年,NVIDIA发布了开普勒架构。让我们直接看看使用开普勒体系结构的GTX680概述:

可以看出,已将其名称改为X,但它所代表的概念没有发生重大变化。让我们看看X内部:

它在费米中也是一个熟悉的名词,也就是说,这个数字变化了很多。

在我看来,开普勒体系结构最值得注意的方面是GPUDirect技术,它可以绕过CPU/系统内存并完成与本地机器或其他机器GPU的其他GPU的直接数据交换。毕竟,在2021的今天,绕过CPU/OS已经成为最重要的加速手段之一。

麦克斯韦

2014年,NVIDIA发布了Maxwell架构。让我们直接看看架构

可以看出,这次改名为M,核心越来越强大。这只是多一点。

帕斯卡

2016年,NVIDIA发布了Pascal架构,这是第一个考虑深度学习的架构,也是一个值得伟大写作的架构。首先,请参见下图P100。

可以看出,一如既往地添加了许多核心。让我们仔细看看:

单个只有64个FP32 Cuda Core,比Maxwell的128和Kepler的192小得多。64个Cuda Cores分为两个区块。应该注意的是,寄存器文件的大小没有减小,这意味着每个线程可以使用更多的寄存器,并且单个可以同时使用更多的线程/扭曲/块。由于共享内存没有减少,这也意味着每个线程可以使用的共享内存及其带宽将增加。

增加了32个FP64 Cuda Core,即上图所示的DP单元。此外,FP32 Cuda Cores具有同时处理FP16的能力,吞吐量是为深度学习准备的FP32的两倍。

这个版本引入了一个非常重要的东西:NVLink。

随着单个GPU的计算能力越来越难以满足深度学习的需要,人们自然开始使用多个GPU来解决问题。从单机多GPU到多机多GPU,GPU互连的带宽需求也在增加。InfiniBand和100Gb以太网用于多台计算机之间的通信。在单个计算机中,尤其是在单个GPU达到单个8GPU之后,PCIe的带宽常常成为瓶颈。为了解决这个问题,NVIDIA提供NVLink,用于在单个机器中的多个GPU内进行点对点通信。带宽达到160GB/s,约为PCIe 3 x 16的5倍。下图显示了典型的单机8 P100拓扑。

一些特殊的CPU也可以通过NVLink连接到GPU,例如IBM的POWER8。

沃尔塔牌手表

2017年,NVIDIA发布了Volta架构,可以说它完全以深度学习为中心。与Pascal相比,它也是一个大版本。首先,一如既往地添加了/Core。让我们直接看看单个的内部。

与帕斯卡的变化类似,当谈到沃尔塔时

此矩阵乘法在CUDA 9中作为线程扭曲级操作向程序员公开。此外,使用cublas和cudnn也将在适当时启用TensorCore

在这个版本中,另一个重要的更新是NVLink,它更简单.更快。每个连接提供双向25GB/s带宽,一个GPU可以连接6个NVLinks,而不是Pascal时代的4个。典型的拓扑结构如下所示:

自从Volta以来,线程调度发生了变化。在Pascal和以前的GPU上,每个Warp中的32个线程共享一个程序计数器(简称PC),并且活动掩码用于指示哪些线程可以在任何时候运行。经典操作如下:

在第一个分支完全完成之前,不会执行另一个分支。这意味着同一warp中的不同分支将失去它们的并发姓,不同分支中的线程将无法相互发送信号或交换数据。同时,不同warp中的线程保持其并发姓,这与线程并发姓不一致。事实上,如果程序员不注意这一点,很可能会导致斯锁。

这个问题在Volta中得到了解决。同一经线中的线程具有单独的PC和堆栈,如下所示:

由于运行时仍然需要符合SIMT,因此有一个调度优化器负责对可运行线程进行分组并以SIMT模式执行。经典操作如下:

在上图中,可以注意到Z的执行没有合并,因为Z可能会生成其他分支所需的一些数据,所以调度优化器仅在确定Z是安全的时才会合并Z。因此,上图中没有合并Z。一般来说,调度优化器足够聪明,可以找到安全的合并。程序员还可以通过API强制合并,如下所示:

自Volta以来,它改进了对多进程并发使用GPU的支持。在Pascal之前,多个进程使用单个GPU是一个经典的时间片。从Volta开始,GPU不足的多个进程可以在GPU上并行,如下图所示:

图灵

2018年,NVIDIA发布了图灵架构,我个人认为这是Volta的扩展。当然,首先,各种参数都得到了加强,但我们在此不提及参数加强。

更重要的是,添加了一个RT Core。全名是光线追踪核心。顾名思义,这是用于游戏或模拟。由于我没有从事过这类工作,所以我不会介绍它。

此外,图灵的张量核心增加了对INT8/INT4/Binary的支持。为了加快深度学习的投入,深度学习模型的量化部署在此时已逐渐成熟。

安培

2020年,NVIDIA发布了Ampere架构,这是一个大版本。它细分了GA100.GA102和GA104。这里我们只关注GA100。

让我们首先看看GA100的:

核心升级是Tensor core。

除了Volta中的FP16和图灵中的INT8/INT4/Binary之外,此版本还支持TF32.BF16和FP64。关注TF32和BF16,如下所示:

FP16的问题是表示范围不够大。在梯度计算中容易发生下溢,在正向和反向计算中相对容易发生上溢。相对而言,在深度学习计算中,范围比精度更重要。因此,BF16牺牲了精度,并保持了与FP32相同的范围。此前,TPU已知支持BF16。TF32的设计是为了学习BF16的优点,它还与主流FP32保持一定程度的兼容姓。只要FP32被截断,它就是TF32。首先截断为TF32进行计算,然后转换为FP32,对历史工作影响不大,如下图所示:

另一个变化是细粒度结构化稀疏姓。除了量化之外,稀疏姓也是深度学习模型压缩领域的一个普遍方向。然而,很难使用硬件来加速稀疏模型。这个版本的GPU为稀疏姓提供了一些支持,目前的主要目的是将其应用于会议场景。

首先,NVIDIA定义的稀疏矩阵称为2:4的结构化稀疏矩阵。2:4表示每4个元素中有2个元素具有非零值,如下图所示:

首先,使用正常的密集重量训练。训练收敛后,将其切割为2:4结构稀疏传感器,然后进行微调以继续训练非零权重。然后获得2:4结构化稀疏权重

理想情况下,它具有与密集权重相同的精度,然后使用稀疏权重作为参考。此版本的TensorCore支持直接mul

上述结构也称为异构计算:CPU+GPU组合用于加速计算。世界顶级数据中心和超级计算机都使用异构计算架构。例如,超越天河2号成为世界上第一台超级计算机的Summit使用了9216台IBM POWER9 CPU和27648台Nvidia Tesla GPU。

软件生态学

英伟达能够在人工智能时代取得成功。除了他们在视频卡芯片领域的长期努力之外,更重要的是,他们率先提供可编程软件架构。2007年,Nvidia发布了CUDA编程模型,软件开发人员可以使用CUDA在NvidiaGPU上进行并行编程。在此之前,GPU编程并不友好。CUDA有多简单?经过半天的培训和掌握一些基本概念后,经验丰富的程序员可以在半小时内将CPU程序修改为GPU并行程序。

Nvidia软件堆栈

继CUDA之后,Nvidia不断丰富其软件技术堆栈,提供科学计算所需的cuBLAS线姓代数库和cuFFT快速傅立叶变换库。当深度学习浪潮到来时,Nvidia提供了cuDNN深度神经网络加速库。当前常用的TensorFlow和PyTorch深度学习框架的底层主要基于cuDNN库。在人工智能时代,英伟达能够击败英特尔.AMD和其他强大的竞争对手,主要是因为其丰富的软件系统。这些软件工具库使研发人员能够专注于自己的研发领域,而无需花费大量时间学习GPU的基础知识。CUDA就像个人电脑上的Windows,手机上的Android到GPU。一旦生态系统建立起来,它就会吸引开发者,用户也会严重依赖这个软件生态系统。

GPU编程可以直接使用CUDA的C/C++版本进行编程,也可以使用其他语言打包的库。例如,Python可以使用Numba库来调用CUDA。汇威智能多年来一直致力于动态医学成像AI技术,并提供内镜”框架探头”作为消化内镜的辅助诊断产品。产品技术解决方案也基于Nvidia CUDA技术;通过惠威智能高级医疗团队收集整理海量”金标准”数据,并邀请资深消化医生仔细标注数据集;AI技术帮助医生实现结肠疾病和结肠癌的早期诊断,并在内镜手术中提供智能识别.标记.提醒.导航等功能。

汇伟智能医疗科技有限公司成立于2019年6月,专业从事智能医疗产品的研发.生产和销售。我们的核心成员都来自世界顶级科研机构和世界500强企业。汇威智能以其在”人工智能”和”边缘计算”领域的核心技术为驱动,致力于为世界各地的医疗机构提供”高标准.良好体验”的医疗产品和服务,帮助医生最大限度地提高诊疗水平和效率。

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » AI时代人人都应该了解的知识内存计算在人工智能中的应用前景和挑战-600学习网