2.3 大模型硬件基础:AI芯片(上篇) —— 《带你自学大语言模型》系列

news2024/11/14 20:12:35

本系列目录

《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言

第一部分 走进大语言模型(科普向)

  • 第一章 走进大语言模型
    • 1.1 从图灵机到GPT,人工智能经历了什么?——《带你自学大语言模型》系列

    • 1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列

    • 第三节 Transformer做对了什么?

    • 第四节 大语言模型,大在哪?

  • … …

第二部分 构建大语言模型(技术向)

  • 第二章 基础知识
    • 2.1 大语言模型的训练过程 —— 《带你自学大语言模型》系列

    • 第二节 大模型理论基础:Transformer

    • 第三节 大模型硬件基础:AI芯片 (本篇)

  • 第三章 预训练
    • … …

欢迎关注同名公众号【陌北有棵树】,关注AI最新技术与资讯。

前言:大模型Infra体系概览

虽然如今大模型很火,但从整个AI产业上下游来看,大模型只不过是其中的一环。另外,不是所有人都能去做大模型算法方面的研发,大部分人其实连入门资格都没有。所以我们在学习的时候,不能认为大模型只靠牛逼的算法就ok了,算法、算力、数据三者都必不可少。

或许你会问,那我去做应用行不行?应用侧的确有很大的市场,但目前只有两种情况是适合做应用了,一是你是一个创业者,能承担风险,你这时候不入局去搏一搏,机会就被别人抢走了,二是你之前本身就有业务,用AI来赋能你的业务场景,这两种人注定是要跟着AI的技术变革来承受起起伏伏的,因为欲戴王冠必承其重。但如果你只是想平平稳稳的做一个大模型时代的业务开发工程师,类似于互联网时代的Java开发,Go开发,PHP开发这种,恕我直言,繁荣的时候还没到。

现在大模型对厂商对模型的控制力还是太强了,导致上层应用能做的事情十分有限,也可以说太薄了,只能调一调现有模型的API,调一调Prompt,用一用RAG,这必然导致的结果是云厂商的话语权变得很大,最近一直在吵所谓的“端到端”、“AI Native”、“MaaS”,其实都是一个意思,想达到让开发者用大模型就像现在用操作系统一样,但显然,现在这个操作系统能让开发者控制的地方还太少,在我看来这不会是终态。

这也就是为什么大模型火了这么久,但是最赚钱的却是英伟达的原因了。尤其是当模型变大之后,以前模型参数和数据小,单机就能跑,但随着近年来大模型趋势成为共识,Scaling Law被奉为圭臬,算法工程师已经无法以一人之力完成大模型的训练部署,需要系统工程师的配合。

之前做系统开发的同学, 如果想搞大模型相关技术,我倒觉得大模型Infra层其实是更合适的方向。如果类比于传统软件时代和云时代的分层架构,当前所处的阶段是底层算力尚未满足需求,中间层AI Infra尚在建设中,未形成体系和标准。
在这里插入图片描述

根据中国信通院《AI框架发展白皮书》里面对AI体系的划分,将AI框架划分为基础层、组件层、生态层,大模型只是生态层的一种。
在这里插入图片描述

这里我根据大模型的技术栈,整理了一张大模型生态中从上到下的技术栈,从这张图你会看出,现在炙手可热的大模型及其上层应用,其实只是冰山漏出的一角,下面的基础建设,还远远没有定型和结束…
在这里插入图片描述

我们在学习的时候,既要从上到下,同时也要从下到上,大模型能够run起来,离不开底层的基础设施建设和开发框架的完善,这个完全可以用互联网时代做个类比,如果没有云计算的普及、Java开发生态的繁荣,把应用门槛打下来,怎么能支持那么多商业模式上的创新?

目前算法工程师或者上层应用开发者只需要使用 AI 框架定义好的 API 使用高级编程语言如 Python 等去编写核心的神经网络模型算法,而不需要关注底层的执行细节和对一个的代码。底层通过层层抽象,提升了开发效率,但是对系统研发却隐藏了众多细节,需要 AI 系统开发的工程师进一步探究。

所以本节的目的是从下到上,底层的GPU开始,讨论为什么GPU的结构与AI最适配?英伟达在GPU的基础硬件之上,做了哪些技术优化,确立了它的霸主地位?

这一节里会涉及大量的技术概念,所以这正可以验证我在 带你自学大语言模型系列 —— 前言 里提到的学习方法:对于所有的技术点,始终带着三个问题“这个技术是什么”“是为了解决什么问题”“是如何解决的”。

本节目录

(2.3上篇)

  • 2.3.1 AI芯片概述
    • 2.3.1.1 AI芯片分类
    • 2.3.1.2 AI芯片衡量指标
    • 2.3.2.3 设计一款AI芯片,需要关注什么?
  • 2.3.3 GPU
    • 2.3.3.1 从图形处理到AI加速
    • 2.3.3.3 GPU与CPU比较
    • 2.3.3.4 深度学习的计算模式
    • 2.3.3.4 为什么GPU适用于AI计算?
  • 2.3.4 英伟达的GPU架构
    • 2.3.4.1 概述
    • 2.3.4.2 CUDA
    • 2.3.4.3 Tensor Core
    • 2.3.4.3 NVLink

(2.3 下篇)

  • 2.3.5 NVDIA芯片发展历程 & 产品详解

  • 2.3.6 其他AI芯片(TPU、Groq…)

  • 2.3.7 国内芯片厂商(华为昇腾、寒武纪、壁仞…)

2.3.1 AI芯片概览

算力是AI发展的驱动力,大模型时代更要格外关注算力。1960年以来,计算机性能增长来于摩尔定律,简单来说就是计算机性能每隔18-24个月会增加一倍。半个世纪以来,摩尔定律一直推动芯片性能的重要动力。但近年来,摩尔定理已呈现放缓态势;与此同时,芯片的运算能力还远远无法满足算法的运算需求。芯片性能需要每年提高10倍,才能满足训练深度神经网络的需求。这个需求是巨大的,但目前看来还难以满足。目前的大模型是个重资产行业,底层竞争在于半导体产业,AI的发展离不开芯片,甚至可以说,整个信息时代的发展都离不开芯片。

2.3.2.1 AI芯片的分类

从广义上讲只要能够运行人工智能算法的芯片都叫作 AI 芯片。但是通常意义上的 AI 芯片指的是针对人工智能算法做了特殊加速设计的芯片,如GPU(图形处理器)、FPGA(现场可编程门阵列)和ASIC(专用集成电路)。

与AI 芯片相对应的是传统芯片,以CPU(Central Processing Unit,中央处理器)为代表,CPU是以任务顺序执行为目的设计的。而AI芯片的一个显著特点就是拥有强大的并行计算能力,专注于同时处理多个任务。

从不同的视角,AI芯片可以划分为不同的类别:

【1】按功能划分:

    • 训练芯片:主要负责数据处理和模型训练,一般部署在云端。训练需要极高的计算性能,需要较高的精度,需要能处理海量的数据,需要有一定的通用性,以便完成各种各样的学习任务。
    • 推理芯片:推理是指利用已训练好的模型进行实时推理与预测,部署在云端或终端设备均可。推理相对来说对性能的要求并不高,对精度要求也要更低,在特定的场景下,对通用性要求也低,能完成特定任务即可,不过推断芯片更注重综合指标, 单位能耗算力、时延、成本等都要考虑。

【2】按部署场景划分:

    • 云端 AI 芯片:性能强大,能够支持大量运算和多种 AI 应用,通常部署在数据中心中
    • 终端 AI 芯片:主要用于训练和推理环节,需要极大的数据量和大运算量,通常部署在嵌入式设备或移动终端上

【3】按技术架构划分:

    • GPU(图形处理器):适合大规模并行计算任务,如图像识别、自然语言处理等,但功耗较高
    • FPGA(现场可编程门阵列):具有可编程性、低延时和高吞吐的特点,适用于高速数据传输和逻辑运算,但开发复杂度高且功耗相对较低
    • ASIC(专用集成电路):针对特定算法定制,性能和能效优势明显,但前期研发时间长、投入成本高
    • 类脑芯片(NPU):模拟人脑神经网络结构,适用于神经网络和机器学习任务

2.3.2.1 AI芯片的衡量指标

对于如何衡量一款芯片,已经有了一套非常完善的指标体系。包括:算力、精度、功耗、内存和带宽、成本等。

在介绍指标之前,需要对芯片算力的相关计算单位做一个简单介绍

  • TOPS(Tera Operations Per Second):表示每秒进行的万亿次操作。例如,存算一体芯片可以达到1000TOPS以上的算力。
  • FLOPS(Floating Point Operations Per Second):计算机浮点运算次数的量化单位,用于描述计算机执行科学计算和AI任务的能力。常见的有GigaFLOPS(十亿次浮点运算/秒)、TeraFLOPS(万亿次浮点运算/秒)等。
  • INT8、INT4、BF16、FP16、FP32、FP64:这些是不同精度的浮点数计算能力,分别代表不同的数值范围和精度。例如,FP16(半精度浮点数)常用于需要较高计算效率的应用场景,而FP64(双精度浮点数)则提供更高的计算精度。

下面介绍几个本节涉及的芯片衡量指标:

算力

算力是评价AI芯片性能的核心要素。算力越高,芯片的处理能力越强,能够支持更复杂和大规模的AI模型训练和推理任务。算力通常以每秒浮点运算次数(FLOPS)或每秒操作次数(OPS) 为单位来表示。

精度

精度包括计算精度和模型结果精度。不同应用场景对计算精度的要求不同。例如,在大模型训练中通常需要较高的精度(如FP32以上),而在模型推理中则可以使用较低精度(如FP16或INT8)以节省资资源。

基于运算数据精度不同,算力可分为双精度算力(FP64)、单精度算力(FP32)、半精度算力(FP16) 及整型算力(INT8、INT4)。数字位数越高,代表运算精度越高,可支持的运算复杂程度越高,以此适配更广泛的AI应用场景。

显存容量

显存用于存放模型,数据显存越大,所能运行的模型也就越大。显存容量通常以GB为单位。例如,英伟达H200拥有141GB的显存,而A100则提供40GB和80GB两个版本的显存。

显存带宽

显存带宽是指显存在单位时间内可以传输的数据量,通常以GB/s或TB/s为单位。高带宽意味着更快的数据访问速度,这对于需要快速读写大量数据的AI应用尤为重要。例如,H200的显存带宽达到每秒4.8 TB,而A100的80GB版本显存带宽为2039 GB/s

2.3.2.1 设计一款AI芯片,需要关注什么?

一个模型在AI芯片的执行过程中,所做的事情无非就是搬运数据和计算数据。具体来说分为如下几步:

  1. 将数据从外部存储搬到计算单元
  2. 计算单元进行计算
  3. 把结果搬回外部存储

所以,相比于算力,其实我们更应该关注的是**「内存、带宽、时延」与算力的匹配度**。也就是说,哪怕算得再快,但是内存来不及搬运,增加的算力也发挥不了作用。

为了更直观描述这一情况,我们引入一个概念 【计算强度】

计算强度(Arithmetic Intensity)是指在执行计算任务时所需的算术运算量与数据传输量之比。它是衡量计算任务的计算密集程度的重要指标,可以帮助评估算法在不同硬件上的性能表现。通过计算强度,可以更好地理解计算任务的特性,有助于选择合适的优化策略和硬件配置,以提高计算任务的性能表现。计算强度的公式如下:

计算强度算术运算量数据传输量

以矩阵乘法为例,对于一个 矩阵乘法操作,可以计算其计算强度(Arithmetic Intensity)。

  1. 算术运算量:对于两个 的矩阵相乘,总共需要进行 次乘法和 次加法运算。因此,总的算术运算量为 。
  2. 数据传输量:在矩阵乘法中,需要从内存中读取两个输入矩阵和将结果矩阵写回内存。假设每个矩阵元素占据一个单位大小的内存空间,则数据传输量可以估计为 ,包括读取两个输入矩阵和写入结果矩阵。

因此,矩阵乘法的计算强度可以计算为:

因此矩阵乘法的计算强度用时间复杂度表示为 ,随着相乘的两个矩阵的维度增大,算力的需求将不断提高,需要搬运的数据量也将越大,算术强度也随之增大。下图展示了矩阵大小和计算强度之间的关系。横轴代表矩阵大小,纵轴代表计算强度。

从蓝色线可以看出,随着矩阵不断增大,需要计算的强度越大

橙色线代表GPU在FP32精度下的计算强度,两条线的交点就是GPU与矩阵最合适的区间,也就是在矩阵大小在50~60之间,能够充分发挥GPU在FP32精度下计算强度

在这里插入图片描述

随着矩阵继续增大,数据搬运越来越慢,内存数据的刷新变得越来越慢。后面提出的Tensor Core正是为了解决这一问题,提高计算强度,让数据搬运跟上运算的速度。图中红线展示的就是引入Tensor Core之后的计算强度,与矩阵大小的平衡点已经达到了320.

除了精度会影响计算强度,当Tensor Core在不同级别缓存下,其计算强度与矩阵大小的交叉点也有所不同,如下图所示,每种存储和矩阵的计算强度分别对应一个交叉点,由此可以看出数据在什么类型的存储中尤为重要。当数据搬运到L1缓存中时可以进行一些更小规模的矩阵运算,比如卷积运算;而对于Transformer结构,可以将数据搬运到L2缓存进行计算。

同时,数据运算和读取存在比例关系,如果数据都在搬运此时计算只能等待,导致二者不平衡,所以找到计算强度和矩阵大小的平衡点,对于AI芯片的设计也是尤为重要。

在这里插入图片描述

2.3.2 GPU

2.3.2.1 从图形处理到AI加速

GPU(Graphics Processing Unit,图形处理器)的最初应用场景并不是AI,而是图像处理,用于游戏和动画中的图形渲染任务。

1999年,NVIDIA发布了GeForce 256,这是第一款被正式称为“GPU”的产品。

2001年,NVIDIA引入了可编程顶点着色器,使得开发者可以执行更复杂的矩阵向量乘法、指数运算和平方根运算等操作。

2006年是个关键节点,NVIDIA推出了CUDA架构,这是一项革命性的技术,使得GPU不仅能够进行高效的图形计算,还能执行通用计算任务

但尽管如此,当时还没有人将GPU用于深度学习,2012年,Hinton和Alex Krizhevsky设计的AlexNet是一个重要的突破,他们利用两块英伟达GTX580GPU训练了两周,将计算机图像识别的正确率提升了一个数量级,并赢得了2012年ImageNet竞赛冠军。充分展示了GPU在加速神经网络模型训练中的巨大潜力。

随后,英伟达继续发力,推出了Tesla、Fermi、Kepler、Maxwell、Pascal、Volta、Turing和Ampere等GPU架构。

2.3.2.2 GPU与CPU比较

我们知道,在处理器领域一直是CPU占据主导地位,那么自然会提出一个疑问,为什么CPU不能直接用于AI计算?其实在早期,AI计算的确是在CPU上进行。那为什么后来又转移到GPU呢?

CPU自1971年诞生,50年间已经发展为大规模复杂电路,但核心主要是三个部分:算术逻辑单元(ALU)、存储单元、控制单元。三个部分执行工作流的步骤如下:
在这里插入图片描述

ALU用来完成数据计算,其他模块则是为了保证指令能一条接一条执行,这种通用的架构对于传统编程范式非常适合,但正是由于这个顺序执行的原则,计算能力受到限制,尽管并行处理架构通过不同的数据流和指令流组合,实现了计算性能的提升,但还是达不到AI计算的性能要求。

CPU和GPU最大的区别在于,它们的设计目标本质是不同的,所以架构设计、应用场景才会相应的不同。

CPU的设计目标是希望加快指令的运算,一个线程里完成一个指令运算所有的工作,于是将重点投入到减少延迟上面,所以一般采用的方式是优化线程效率,

GPU的设计目标是最大化吞吐量,相比比单任务执行快慢,GPU更关心并行度(同时可以执行多少任务),所以GPU的设计重点是增加更多的线程,GPU可用线程的数量是CPU的100多倍。

从应用场景上,CPU处理的是操作系统和应用程序需要的各种计算任务,需要通用性来处理不同类型的数据,同时这类程序还存在大量的分支和跳转处理,这些都导致CPU结构非常复杂。

GPU解决的问题主要集中在需要大量浮点运算和数据并行处理的领域,如科学计算、机器学习、图像处理和视频编码等。这些问题通常在传统的CPU架构下难以高效解决,因为它们要么需要大量的浮点运算,要么需要同时处理大量数据。

目标和场景决定了架构设计,下面这张图会十分明显的展示出GPU和CPU的区别:CPU通常有4/8/16个强力ALU,适合复杂通用的串行任务,GPU则是有成百甚至上千个简单ALU,单个ALU的能力会弱于CPU的ALU,但适合多个ALU并行运算。

在这里插入图片描述

2.3.2.3 深度学习的计算模式

了解深度学习的计算模式,才能找到GPU与AI时代的契合点到底在哪,同时对于硬件的设计和优化,也有着十分重要的作用。

神经网络中的最主要计算范式是【权重求和】,无论是全连接、卷积网络、循环神经网络、注意力机制,都没有绕开这个计算范式。权重求和占了神经网络90%的计算量。

权重求和的本质就是大规模矩阵乘法。

所以说,矩阵乘法运算是AI模型中最重要的运算过程(更准确的说,是矩阵点的乘加运算),这个过程的特点在于较高的内存搬运和计算密度;并且,每个计算任务都独立于其他计算,任何计算都不依赖于其他计算结果,可以采用高度并行的方式进行计算。

2.3.2.4 为什么GPU适用于AI计算?

概括来说,GPU通过以下两点支持了大规模的并行计算:(1)通过超配的线程来掩盖时延;(2)通过多级的缓存平衡计算和带宽之间的差距

超配的线程数量

我们通过三款芯片的详细数据,来看需要多少线程,才能解决内存的延时问题?

在这里插入图片描述

从这张表可以看到几个下面几个关键数据:

GPU的时延会比CPU高出4倍左右,同时,GPU的线程数量是CPU的20~30倍,GPU的可用线程数量是CPU的100多倍。简单来说,GPU拥有非常多的线程,为大量大规模任务并行而设计的,GPU将更多的资源都投入到如何增加线程数量,而不是像CPU一样去优化线程执行效率、减少指令执行的延迟。

多级缓存

在GPU运算的过程中,我们希望更多的减少内存时延、内存搬运等一系列操作,所以缓存至关重要。

多级缓存的设计是为了减少对主内存的依赖,从而降低延迟并提高数据传输速度。每一级缓存都有不同的访问速度和容量,通常离用户越近的层级,访问速度越快但容量越小;而离用户越远的层级,访问速度越慢但容量越大。

在GPU中,多级缓存被设计为几个主要部分:

  • L1 Cache:位于每个流处理器(SM)内部,具有较高的访问速度和较低的容量。
  • L2 Cache:共享给多个SM,提供更大的容量和稍低的访问速度。
  • 寄存器文件:每个SM拥有自己的寄存器文件,用于存储临时计算结果,访问速度最快

缓存层的设计使得GPU能够更有效地管理数据流,减少数据传输时间,并提高处理效率。例如,在执行计算任务时,多级缓存可以显著减少内存访问时间,从而加快整个计算过程。

2.3.3 英伟达GPU架构

2.3.3.1 概述

对于芯片的架构,各家芯片厂商都采用了不同的设计,本节以NVIDIA的GPU架构为核心,介绍GPU架构的关键技术

英伟达的GPU架构自2010年起,从Fermi到Hopper, 逐渐引入CUDA Core、Tensor Code、NVLink、NVSwitch等先进技术。

下图是一张英伟达A100的架构图,我们先有一个直观的感受。

在这里插入图片描述

首先把GPU里面一些关键的概念列出来

  • GPC:图形处理簇(Graphics Processing Clusters)
  • TPC:纹理处理簇(Texture Processing Clusters)
  • SM:流多处理器(Stream Multiprocessors)
  • HBM:高带宽存储器(High Bandwidth Memory)

A100中包含8个GPC,每个GPC中包含8个TPC,每个TPC 包含两个 SM 单元,SM 是 A100 芯片中的基本计算单元,负责并行执行大量线程的指令。包括了CUDA Core、共享内存、寄存器等核心组件,SM里面可以并发执行数百个线程。下图是单个SM的结构图:

在这里插入图片描述

SM中具体包括下面这些组件(这里暂时列出,不做详细说明,后面介绍技术细节时,涉及到哪个组件会再细说):

  • CUDA Core:向量运行单元(FP32-FPU、FP64-DPU、INT32-ALU)
  • Tensor Core:张量运算单元(FP16、BF16、INT8、INT4)
  • Special Function Units:特殊函数单元SFU,用来支持各种数学函数,例如正余弦等
  • Warp Scheduler:线程束调度器,负责把线程下发到计算单元里面
  • Dispatch Unit:指令分发单元
  • Multi level Cache:多级缓存(LO/LI Instruction Cache、LI Data Cache & Shared Memory)
  • Register File:寄存器堆;
  • Load/Store:访问存储单元LD/ST(负责数据处理);

2.3.3.2 CUDA

说起NVDIA,不得不提的一项技术就是CUDA(Compute Unified Device Architecture)。CUDA是英伟达在2006年11月发布的Tesla架构推出的一种并行计算平台和编程模型。 核心在于利用GPU的并行处理能力,将GPU用作通用并行计算设备,以加速各种计算任务。

可以从硬件和软件两个层面来理解CUDA:在硬件层面,通过改进GPU架构和提供灵活的内存管理机制,显著提升了计算性能;在软件层面则通过提供易用的编程模型、高级数学库和丰富的开发资源,极大地简化了并行程序的开发和维护工作。具体如下:

硬件层面,CUDA提供一个高度并行的计算环境:

  1. 统一渲染架构:CUDA将传统的像素着色器和顶点着色器合并为一个统一的渲染架构,从而提高了对大规模数据计算应用的支持能力。
  2. 灵活的内存管理:CUDA提供了高效的内存管理机制,包括共享内存、全局内存等,使得开发者可以更高效地利用GPU的高速带宽和大容量内存。
  3. 多线程SIMD处理器:CUDA通过多线程SIMD(单指令多数据流)处理器,允许数千个线程同时执行,极大地提升了计算效率。
  4. 支持多种GPU型号:CUDA从G80系列开始全面支持通用编程,并且兼容所有NVIDIA的GeForce、Quadro和Tesla系列GPU,这使得CUDA能够适用于各种不同需求的用户。

软件层面

  1. CUDA的编程模型允许允许开发者使用C/C++等编程语言在GPU上编写高效、可扩展的并行程序,让开发人员更方便的控制GPU里面各种组件。CUDA提供了一套完整的工具链和开发环境,包括编译器、链接器、调试器和各种库函数,使开发者能够轻松地编写和优化并行程序。
  2. 高级数学库:CUDA内置了如CUFFT(CUDA Fast Fourier Transform)和CUBLAS(CUDA Basic Linear Algebra Subroutines)等高级数学库,这些库为复杂的科学计算和数据分析提供了强大的支持。
  3. 异构计算支持:CUDA不仅支持GPU,还支持CPU、DPU和网络计算,提供了一种灵活的系统软件组件,帮助用户高效地部署、管理和优化大型异构系统。
  4. 丰富的开发资源:NVIDIA提供了大量的文档、教程和示例代码,帮助开发者快速上手并解决实际问题。

其实对于NVDIA来说更重要的是,通过CUDA实现了硬件和软件解耦,从而让英伟达更方便的进行硬件的发展。

在了解CUDA工作原理之前,需要对一些重要概念进行说明:

线程是CUDA最重要的执行单位,具体方式是将程序的执行划分为独立的线程块,每个线程块并行执行。

为了数据的管理和通信问题,CUDA引入Host(主机)Device(设备) 两个概念,host代码部分在CPU上执行,是普通的C代码;当遇到数据并行处理的部分,CUDA会将程序编译成GPU能执行的程序,并传送到device,device代码在GPU上执行。

传送到GPU的程序被称作Kernel函数,Kernel(核)是CUDA里面重要的一个概念。kernel 用 __global__ 符号声明,在调用时需要用 <<<grid, block>>> 来指定 kernel 要执行及结构。

下图很好的展示了CUDA的线程结构
在这里插入图片描述

首先,host遇到需要并行执行的代码,将其编译Kernel函数,传送到device。

那么device中是如何实现具体的并行计算的呢?CUDA线程有明确的三层结构:

第一层:Kernel在Device执行时,会启动多个线程,一个Kernel执行启动的所有线程统称为一个Grid(网格)。

第二层:一个Grid分为多个Block(块),每个块内有很多线程,各个块之间的线程独立执行,也不会互相通信。Block通过Warp进行调度。

第三层:每个Block内部的多个线程可以同步,并且可以通过共享内存通信。

2.3.3.3 Tensor Core

Tensor Core是在2017年的Volta架构中首次被提出,自此之后,英伟达的每次架构升级都不断对Tensor Core进行更新迭代。

在Tensor Core 发布之前,CUDA Core是加速深度学习的关键硬件。CUDA Core在执行计算操作时,需要将数据在寄存器、算术逻辑单元(ALU)和寄存器之间进行多次搬运,这种过程既耗时又低效。此外,每个CUDACore单个时钟周期只能执行一次运算,而且CUDA Core的数量和时钟速度都有其物理限制,这些因素共同限制了深度学习计算性能的提升。为了克服这一限制,NVIDIA 开发了 Tensor Core。

Tensor Core主要解决了哪些问题呢?主要有下面几个方面:

【1】提高训练和推理速度:Tensor Core 可以显著提升 AI 模型的训练和推理速度。例如,Hopper架构中采用第四代Tensor Core,已经将GPU的峰值性能相较未引入Tensor Core时提高了 60 倍,在此基础上,Blackwell 中采用第五代Tensor Core,又可将万亿级参数生成式 AI 模型的训练速度提高 4 倍,并将推理性能提升 30 倍。

具体来说,相比于 FP32 Core 一次只能对两个数字进行计算,一个Tensor Core可以在一个时钟周期内,完整一个4×4矩阵的乘法和加法运算,矩阵乘法的两个矩阵是FP16,求和的矩阵可以是FP16或FP32。

通过硬件上的特殊设计,Tensor Core 理论上可以实现 8 倍于 FP32 Core 的计算吞吐量(这里指Volta 和 Turing 架构),并且没有明显的占用面积和功耗增加。

在这里插入图片描述

在这里插入图片描述

【2】混合精度计算:除了对矩阵乘加运算操作的原子化支持,Tensor Core还从硬件底层支持了混合精度训练,即在保持一定精度的同时,动态调整算力以提高吞吐量。这种技术允许在较低精度(如 FP16)下进行计算,同时输出仍为较高精度(如 FP32),从而在不损失太多准确性的前提下大幅提高计算效率。另外,H100 GPU 配备了第四代 Tensor Core 和 Transformer 引擎,支持 FP8 精度,进一步提升了 AI 训练和推理的速度。

【3】Tensor Core 将传统的单一维度数字运算扩展到二维度的矩阵运算,这使得其在处理大规模数据时更加高效。例如,在 Tesla V100 上,Tensor Core 能够实现最高 9 倍的峰值 TFLOPS 性能提升

【4】稀疏矩阵处理:Tensor Core 还能够高效处理稀疏矩阵乘法(SpMM),这是许多深度学习算法中的一个常见挑战。通过灵活的稀疏块模式和动态可扩展的映射流,Tensor Core 提供了更高的算法灵活性和硬件效率

2.3.3.4 NVLink

随着模型参数的不断增大,分布式训练已经成为必然趋势,这对底层的硬件和网络都带来了新的挑战。具体来说,当训练采用大规模集群,集群内的节点必须保证数据快速交换,否则,即使是再强大的GPU,也会因为网络瓶颈的卡点而受限,最终影响整个集群的性能。

关于分布式集群和通信的相关内容,后面会有单独的章节介绍,但不难看出,底层网络通信效率成为重中之重。

早期的PCIe 由英特尔公司提出,主要用于连接CPU与各类高速外围设备。2003年PCIe 1.0发布,单通道250MB/s,总带宽最高4GB/s,到2022年 PCIe 6.0 发布,单通道8GB/s,总带宽最高128 GB/s。

根据上述数据可见,传统的PCIe的带宽速率迭代跟不上AI系统的发展。
在这里插入图片描述

NVLink 正是为了解决这一问题,NVLink是NVIDIA开发的一种专有高速互连技术,主要用于连接多个GPU或GPU与CPU之间的通信。下图是NVLink各个版本的带宽数据。从图中可见,2014年第一代NVLink的带宽就已经达到 160GB/s,到2024年第五代NVLink,每块GPU提供1.8TB/s的双向吞吐量,总带宽超过1 PB/s。

在这里插入图片描述

NVLink采用点对点(P2P)结构和串行传输方式,这意味着每个GPU通过独立的通道直接与其他GPU进行通信,从而避免了中间节点的瓶颈问题。

在这里插入图片描述

从第一代到第五代,NVLink经历了多次改进和升级。最初采用的是cube直连拓扑,随后发展为Switch交换拓扑,第三代增加了单卡的NVLink通道数以提升带宽,第四代完善了多种协议内容,而第五代则大幅提升了带宽并支持576个GPU之间的高速通信。

在这里插入图片描述

参考文献:

[1] NVIDIA. NVIDIA A100 Tensor Core GPU Architecture[EB/OL]. [2020]. https://www.techpowerup.com/gpu-specs/docs/nvidia-ampere-architecture.pdf.

[2]NVIDIA. NVIDIA Tensor Core[EB/OL]. https://www.nvidia.cn/data-center/tensor-cores/.

[3]NVIDIA. What Is NVLink?[EB/OL]. https://blogs.nvidia.com/blog/what-is-nvidia-nvlink/.

[4]NVIDIA. CUDA C++ Programming Guide[EB/OL]. https://docs.nvidia.cn/cuda/pdf/CUDA_C_Programming_Guide.pdf.

[5] NVIDIA. NVIDIA Optimized Deep Learning Framework, powered by Apache MXNet[EB/OL]. https://docs.nvidia.com/deeplearning/frameworks/pdf/MXNet-Release-Notes.pdf.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 学习笔记17 -- 基于el-menu封装菜单

vue3 学习笔记17 – 基于el-menu封装菜单 前提条件&#xff1a;组件创建完成 配置路由 // src/router/index.ts import { createRouter, createWebHashHistory } from vue-router import type { RouteRecordRaw } from vue-router export const Layout () > import(/lay…

FlutterFlame游戏实践#16 | 生命游戏 - 编辑与交互

theme: cyanosis 本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

ios 15-16手机绕过ssl验证(抓取app上的https包)

绕过ssl验证的基本流程 前提概要&#xff1a;为什么你的charles抓不了https包 ios 越狱ios rootful安装ios 越狱商店sileo安装substitute越狱商店安装SSL Kill Switch3 全流程坑点巨多&#xff0c;博主亲身踩坑&#xff0c;务必按着步骤来 准备工作 type b to c 的数据线苹果…

读论文《Hi-Net: Hybrid-fusion Network for Multi-modalMR Image Synthesis》

论文题目&#xff1a;Hi-Net:用于多模态磁共振图像合成的混合融合网络 论文地址&#xff1a;arxiv 项目地址&#xff1a;github 原项目可能在训练的时候汇报version的错&#xff0c;这是因为生成器和辨别器的优化有些逻辑错误&#xff0c;会改的话多加一个生成操作可以解决&…

数字信号处理基础知识(二)

在介绍完“离散时间序列”基本概念和性质后&#xff0c;实际上就已经踏入了“数字信号处理”这门学科的学习征程&#xff0c;这篇文章里主要去说明“线性时不变系统”的定义概念和探讨“周期采样”的注意细节&#xff0c;相信更加理解这些概念定义和底层逻辑&#xff0c;对于大…

python+vue3+onlyoffice在线文档系统实战20240723笔记,项目界面设计和初步开发

经过之前的学习,已经能够正常打开文档了。 目前为止,我们的代码能够实现: 打开文档编辑文档手动保存自动保存虽然功能依然比较少,但是我们已经基本实现了文档管理最核心的功能,而且我们有个非常大的优势,就是支持多人同时在线协同编辑。 现在我们要开发项目,我们得做基…

Golang | Leetcode Golang题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; // 判断是否为完全平方数 func isPerfectSquare(x int) bool {y : int(math.Sqrt(float64(x)))return y*y x }// 判断是否能表示为 4^k*(8m7) func checkAnswer4(x int) bool {for x%4 0 {x / 4}return x%8 7 }func numSquares(n int) i…

Python的注释怎么写

今天我们讲一下Python的注释怎么写&#xff0c;Python的注释的写法主要就是用""" &#xff08;注释&#xff09;"""和 #&#xff08;注释&#xff08;多半就是一行&#xff09;&#xff09; 来写 第一种&#xff1a; 使用""" &…

【linux】Shell脚本三剑客之sed命令的详细用法攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

从零开始:神经网络(1)——什么是人工神经网络

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 人工神经网络&#xff08;Artificial Neural Network&#xff0c;简称ANN&#xff09;是一种模仿生物神经网络结构和功…

【vue教程】三. 组件复用和通信(7 种方式)

目录 本章涵盖知识点回顾 组件开发与复用组件的创建和注册全局定义局部定义单文件组件&#xff08;.vue 文件&#xff09;组件的注册方式在实例中注册在 Vue 中注册 组件的 props定义 props传递 props 组件事件自定义事件的创建和触发父组件监听子组件事件父组件处理事件 Vue 实…

网格布局 HTML CSS grid layout demo

文章目录 页面效果代码 (HTML CSS)参考 页面效果 代码 (HTML CSS) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Golang | Leetcode Golang题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; func hIndex(citations []int) int {n : len(citations)return n - sort.Search(n, func(x int) bool { return citations[x] > n-x }) }

你了解GD32 MCU上下电要求吗

你了解GD32 MCU的上下电要求吗&#xff1f;MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例&#xff0c;上电/掉电复位波形如如下图所示。 上电过程中&#xff0c;VDD/VDDA电压上电爬坡&#xff0c;当电压高于VPOR&#xff08;上电复位电压&#xff09;MCU开始启动&a…

设计测试用例的具体方法

一.等价类 等价类分为: 1.有效等价类 [6~15] 2.无效等价类 :小于6位,大于15位(不在数据范围内) 组合规则: 有效等价类组合的时候,尽可能一条测试用例尽可能多的覆盖有效等价类 无效等价类组合的时候,一条测试点,之恶能覆盖一个无效等价类 二.边界值 1.上点,离点,内点 上…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

git clone超时的解决方法

问题描述&#xff1a;在克隆一个仓库的时候&#xff0c;报错如下 git clone https://github.com/TeamWiseFlow/wiseflow.git Cloning into wiseflow... fatal: unable to access https://github.com/TeamWiseFlow/wiseflow.git/: Failed to connect to github.com port 443 aft…

【PyTorch】图像二分类项目

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 图像分类是计算机视觉中的一项重要任务。在此任务中&#xff0c;我们假设每张图像只包含一个主对象。在这里&#xff0c;我们的目标是对主要对象进行分类。…

C#开源、简单易用的Dapper扩展类库 - Dommel

项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dommel 能够根据你的 POCO 实体自动生成相应的 SQL 查询语句。这大大减少了手动编写 SQL 代码的工作量&#xff0c;并提高了代码的可读性和可维护性。 Dommel 支持 LINQ 表达式&#xff…

论文阅读——Integrated Diffusive Antenna Array of Low Backscattering

文章目录 摘要一、背景介绍二、天线结构A. 缝隙天线B. 低频扩散单元C. 高频扩散单元D. 集成设计 三、验证总结 论文来源&#xff1a;https://ieeexplore.ieee.org/document/10309141 摘要 文章提出了一种低雷达散射截面&#xff08;RCS&#xff09;的扩散天线阵列。 作为示例…