【分享NVIDIA GTC干货】CUDA 新特性和发展

【分享NVIDIA GTC干货】CUDA 新特性和发展

讲座地址URL:CUDA: New Features and Beyond [S51225]



引言

CUDA平台是GPU计算生态系统的基础。每一个使用GPU的应用程序和框架都是通过CUDA的库、编译器、运行时和语言实现的,这意味着CUDA的增长速度与生态系统的发展速度一样快。讲座将介绍CUDA和GPU计算作为一个整体的所有新功能以及如何高效协同工作。


一、摩尔定律

计算,不是芯片问题,而是软件和芯片问题

摩尔定律:集成电路上可容纳的晶体管数量每隔18至24个月便会翻一倍,同时成本将会下降。
然而,在现在计算机中,随着集成电路芯片尺寸的不断缩小,已经接近甚至到达了物理极限,无法再继续缩小。晶体管的量子隧穿效应、漏电等问题也逐渐凸显,这些问题会导致芯片的性能和可靠性下降。

在提升计算性能的过程中,共分为三个阶段:

第一阶段通过减少晶体管尺寸、增加晶体管数量提升处理器频率,在2006年已经到达瓶颈期。

在第二阶段增加核心(Core)数量,NVIDIA同时推出了异构硬件(如GPU各种专用的计算单元)与异构软件(使用不同语言编写的异构组件,如:NumPy库)来提升性能,

第三阶段使用多模尺寸缩放(multi-die scaling)或者模具堆叠(die stacking)。
GPU芯片通常由许多小型的处理单元组成,这些处理单元可以被划分为不同的区域,每个区域包含多个处理单元。通过调整不同区域的大小和形状,可以实现多模缩放来提高GPU芯片的性能和功耗效率。例如,可以将不同大小的处理单元组合在一起,以适应不同的计算负载,从而提高计算性能和能源效率。
模具堆叠技术通过堆叠多个芯片在一起,可以在单个GPU卡上实现更多的处理单元和存储器,从而提高GPU的计算和存储能力。模具堆叠技术通常需要更复杂的硬件设计和软件支持,但可以提供更高的性能和更大的存储容量。为了突破这种局限性,需要连接不同的异构单元协同工作,

二、Grace/Hopper Superchip

Grace/Hopper Superchip,它由多个异构计算单元组成,包括通用处理器、AI加速器、图形处理器和内存。这些计算单元可以同时工作,以提供更高的计算性能和更低的能源消耗。

在这里插入图片描述
通过NVLink-C2C连接,GPU能够读取CPU内存数据,相比于PCle快很多倍,获得最大程度的数据访问速度。突破性的地方在于,不必再维护一个table来对应GPU Memory和GPU Memory,或者隐式的传输数据:

在这里插入图片描述
单个节点的资源有限,当单个节点的功率达到限制时,将多个节点联系到一起形成多节点系统来处理指数级增长的数据量成为一种必然的趋势。

三、CUDA是什么

1.CUDA不止是CUDA C++

CUDA使用一种类似于C++语言的高级语言来编写程序,这种语言被称为CUDA C++。开发人员可以使用CUDA C++编写代码,然后编译器将其编译成适合GPU执行的代码。CUDA C++语言包括一些特定的语法和库,可以让程序员充分利用GPU的计算能力,实现高效的并行计算。CUDA不仅包括许多支持GPU计算的标准语言,还包含许多其他语言(图右)

2.CUDA的多层次抽象维度

CUDA的抽象层维度包括在多个层次,允许开发者使用不同维度的语言进行开发,它是一个有选择范围的生态系统,开发者能够根据自己的应用需求选择语言来使用CUDA生态。

3.规模维度

多节点编程模型的并行性可以被划分为三个阶段:隐式并行、管理并行、显式并行

  • 隐式并行,相同的代码必须在性能上可移植到任何加速器类型和任何机器大小。
     Legate,一个使用隐式并行的框架,通过将任务之间的依赖关系抽象出来,使得程序员不需要显式地指定任务的调度顺序和并行度,从而实现了隐式并行。Legate在运行时为许多设备进行工作分配,能够跨越多个GPU而无需更改源代码,其中的任务通过一个或多个存储交换数据,映射与任务分配相结合,保证数据出现在需要的地方。

     另一个例子,cuNumeric - NumPy api的隐式并行实现,所有的并行化都在运行时完成,在库内部,cuNumeric将每个NumPy API中的操作分解为任务Legate样式,Legate可以使用多节点进行分发。一段示例代码如下,本质上是将Python的cuda核函数在底层编译成C然后执行:
def run_stencil(N, I, warmup,timing):
	grid = initialize(N)

    print("Runing Jacobi stencil")
	center = grid[1:-1, 1:-1]
	north = grid[0:-2, 1:-1]
	east = grid[1:-1, 2:]
	west = grid[1:-1, 0:-2]
	south = grid[2:, 1:-1]
    
    timer.start()
	for i in range(I):
    	average = center + north + east + west + south
    	average = 0.2 * average
    	center[:] = average
    total=timer.stop()
    
    if timing:
        print(f"Elapsed Time: {total} ms")
    return total
  • 管理并行,应用程序要么提供源代码标记,要么调用可扩展库,在运行时处理扩展库
    NVIDIA有许多Multi-GPU Multi-Node (MGMN)加速库:cuSOLVERMp、cuFFTMp 等,可以利用GPU的并行计算能力,加速计算速度。cuFFTMp与JAX的结合,主要是为了加速JAX中FFT计算的执行速度。JAX内置了一些FFT算法和函数,但由于其在CPU上执行,可能无法满足大规模FFT计算的需求。通过将JAX中的FFT计算与cuFFTMp相结合,可以利用GPU的并行计算能力,加速FFT计算的执行速度。
  • 显式并行,应用程序通过手工或通信api直接管理数据交换和分发

四、异型硬件架构

如果说CUDA是并行软件的核心组成,CUDA之上的生态包含很多并行软件,各种加速库,例如上面所提到的cuFFTMp,从软件层面并行化程序计算,同时继续提升生态的加速效果,还需要硬件架构支持,软硬件协同工作。

1.Tensor Core

Tensor Core是GPU组成中很知名的异型架构,是一种基于硬件加速的矩阵运算引擎,核心是一组高性能的矩阵乘法单元(Matrix Multiply Unit,MMU),这些单元可以在硬件层面上执行矩阵运算,包括矩阵乘法、矩阵加法和矩阵转置等操作。这些单元在硬件上实现了大量的并行计算,可以同时执行多个矩阵乘法运算,从而显著提高计算性能。下图为三代GPU中的Tensor Core性能情况,可以看到,从Volta架构到H100,Tensor Core的性能有显著的提升。

2.FP8

a.FP8硬件支持

通常使用FP32进行数据信息表示,在上图Tensor Core计算中,通常使用FP16表示数据进行计算,现代部分GPU同样支持FP32矩阵运算。除了这两种数据表示,还可以使用量化技术用更少的位来表示数据,FP8,这通常需要更进一步缩放矩阵。这种量化计算有利于节约存储,加速计算性能。

b.FP8软件支持

在实现FP8数据表示计算的过程中,有了硬件方面的支持,要形成一个完整测生态,自然免不了软件设计的共同进步,正如前面所说:

计算,不是芯片问题,而是软件和芯片问题

以A100 BF16作为基准,cuBLAS FP8在H100中的训练与推理过程的性能提升是有目共睹的:

3.CUDA中Tensor Core编程模型

CUTLASS 3.0。CUTLASS 是一种基于CUDA的通用矩阵库,在GPU上实现了一系列矩阵运算的基础算法,包括矩阵乘法、卷积、池化等。 新的主要版本的CUTLASS用CuTe重写。支持H100中第四代张量核的优化计算。

CUTLASS 利用CuTe灵活的布局,为了提升开发者和用户体验,CUTLASS 3引入了一个简化而强大的API,用于声明gemm,能够轻松选定特定的功能,CUTLASS 3.1引入Python接口。Python 接口可以让开发人员更加方便地使用深度学习算法框架,从而加速模型的训练和推理。


五、NVIDIA GPU Computing Tools

当使用CUDA C++编程,或是想了解数据中心的更多内容,这就需要一种检测系统工作负载运行情况的工具,Nsight能够满足这一需求。Nsight 系列工具:NVIDIA 提供了多个 Nsight 系列的工具,用于 GPU 应用程序的调试、性能分析、可视化等方面。其中,Nsight Systems 可以用于分析 GPU 应用程序的性能瓶颈,Nsight Compute 可以用于分析 CUDA Kernel 的性能和效率。Nsight能够从多个来源/节点收集报告,用户可以根据自己的需求设置输出结果到数据库中。Nsight本身也提供了可视化工具来查询输出,例如使用分析器和调试器共同显示当前GPU中的数千个线程的活动。

在这里插入图片描述

下面是一个显示GPU内核和SM活动状态热力图的例子:


六、数据安全

大数据时代,数据就是信息,在数据的传输过程中也引发了数据安全问题,一些敏感数据不可以在零信任(完全不被加密使用)情况下被处理。为了保护数据安全,出现了机密计算(Confidential Computing),它能够在使用数据时保护数据,消除了剩余的数据安全漏洞。

数据中心,应用程序由系统虚拟机管理程序控制的虚拟机中运行,虚拟机管理程序类似于操作系统,它可以访问到下面的一切资源,包括GPU内存。如果有人破坏虚拟机管理程序,则下面的一切资源将会变得开放。为了避免这个问题,创建可信执行环境很有必要,NVIDIA驱动程序、库、api运行在VM中,基于VM的TEE保护整个工作负载。每个GPU只能直通到一个VM。VM之间相互保护,CPU和GPU中的存储数据都将被加密。
下面是一个CUDA应用程序在机密计算下不加修改地运行示例,可以分为五个步骤:

  1. 在GPU上分配显存

  2. 在CPU上系统内存并初始化

  3. 复制数据到GPU

  4. 启动内核以处理数据

  5. 复制数据回CPU


总结

  • 本次讲座介绍了CUDA整个软硬件生态的新特性与发展,包括一些软件库与硬件架构的介绍,一切的设计都为加速计算服务。
  • 介绍一些硬件异型架构,如:Tensor Core 、FP 8硬件支持,加速流行的深度学习模型训练与推理过程。
  • 另外,在CPU、GPU数据传输与存储过程中,数据安全也需要得到重视,引入机密计算,如果您的数据移动与计算工作不是异步的(即,如果您不在后台移动数据),则可能会增加延迟。 在这种情况下,对于较小的数据块,会遇到更多的延迟; 对于较大的数据,与传输时间相比,它是不可见的。机密计算不会影响在 GPU 上运行的任何东西的性能。 唯一的影响可能是在 CPU 和 GPU 之间的数据传输期间,但鉴于此类数据传输通常发生在后台,因此通常是不可见的。 这确实取决于应用程序。 GPU本身的绝对性能不变。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值