[分享NVIDIA GTC2023干货] CUDA的新特性和提升
CUDA的新特性和提升)
CUDA
首先这个分享来自与一位拥有十多年从业经验的CUDA架构师,Stephen Jones。他将着眼GPU硬件的进步,其向CUDA生态系统的映射以及影响。
分享全文贯穿思想:计算性能不是一个芯片问题,而是一个软件和芯片共同的问题
摩尔定律
分享中,Jones提到了前些年提到的摩尔定律。说的师每隔一段时间,芯片上的集成电路密集程度会增加一倍,处理器性能会提升一倍,价格会下降一倍。大概就是说硬件更新会很快这么一回事。
Dennard定律
Dennard提出,晶体管的尺寸在每一代技术中都缩小了30% (0.7倍),因此它们的面积A减少了50%。这意味着电路减少了30% (0.7倍)的延迟,因此增加了约40% (1.4倍)的工作频率。在每一代技术中,晶体管密度增加一倍,电路速度提高40%,功耗保持不变。
更多的晶体管、更高的时钟频率将让芯片拥有更多的功能和性能。更高频率能提高性能,但同时更高的频率需要更高的功率。当频率增大到一定程度后,我们不能继续增大时钟,转而增加芯片的核心数来提高性能
。
异构硬件与异构软件
Heterogeneous
:多样、不同的、异构的。
芯片雕刻的需求需要更高频率的激光,限制了芯片和磨具。为了解决芯片雕刻的难题,NVIDIA很早使用具有特殊功能的硬件。ADA
多进程架构图形处理芯片处理不同的特殊的功能。
编程语言方面,有时我们利用一种语言编写一个功能,然后用另一个语言去调用它。通过的编程语言同样可以帮助芯片的高速运行。例如Numpy
的实现是C++
,python
调用时同样会高效。
异构计算
同一个程序我们把它们再不同的设备上运行计算,叫做异构计算。
NVIDIA Grace Hopper Superchip 架构是第一个真正的异构加速平台,适用于高性能计算(HPC) 和AI工作负载。它利用 GPU 和 CPU 的优势加速应用程序,具有强大的异构计算能力。
SuperChip
下图是高级芯片的组成构件。
这是一个异构硬件和异构软件结合的异构系统。NVLink-C2C将两个设备进行连接,并负责两者数据传输。
当硬件和软件已经具备此时,就需要一个和是代码程序来将他们紧密联系。
NVLink
通过NVLink 可以实现多个设备连接,直接读取之间的存储单元。
- 统一内存
NVLink-C2C 实现了一种地址转换服务(ATS)协议, 通过NVLink C2C 从其他进程获取数据到物理内存。当需要访问存在与CPU内存中的变量x
时,GPU可以通过NVLink-C2C直接访问,没有数据转移,不会有数据访问失败的情况。并且这种数据提取很容易再GPU的全带宽下提取,换言之提取大数据非常快,此后减少了CPU和GPU之间的数据迁移所带来的overhead,将大幅度提高计算速度。同时从图上可以看出NVLink-C2C 可以连接256个这些设备,可以将多个GPU运算节点进行打包,磨具堆叠将继续时芯片更快地迭代,可堆叠多少的物理限制将有软件来缓解。
这个系统真正强大的地方在于ATS,当我们的数据x
从CPU移动到GPU,系统不会丢失数据移动轨迹,CPU NVLInk-C2C自动读取和进入GPU ,并建立数据副本,在最快捷的方式获取数据。
CUDA
多种语言标准支持
- OpenACC
- OpenMP
- Standard C++
- CUDA FORTRAN
- CUDA C++
- OpenGL
GPU计算平台
可以通过多种计算机编程语言通过CUDA对GPU进行操作。
抽象层平台
我们可以使用不同的语言和工具完成CUDA抽象的层来加速自己的项目计算。关于How to Write A CUDA Program Josn给我们分享了另外一个talk可以学习。
规模化
不同的需求有不同的设计。cuNumeric
可以实现cuda多节点扩展。
-
隐式并行
同样的代码必须是可移植到任何加速器模式和任何的性能机器。意味着代码能够在更多的机器上运行。- Legate: 一个隐式并行的框架。Legate可以可以跨越许多GPU而无需更改源代码,有利于在不同规格的设备上使用系列API。Legate中的任务通过一个或者多个存储交换数据,我们称
Legate存储
,是一个多维数组,可以映射到不同地址,映射与任务依赖关系结合保证数据同步。 - cuNumeric:一个实现了
Numpy
的Legate库。代码运行时,自动将API中的操作分解为Legate格式并传入Legate
。所以我们只需要正常编写Numpy
代码。
- Legate: 一个隐式并行的框架。Legate可以可以跨越许多GPU而无需更改源代码,有利于在不同规格的设备上使用系列API。Legate中的任务通过一个或者多个存储交换数据,我们称
-
管理并行
应用程序要么提供源代码标记,要么调用可变化的库,并在运行时灵活变化。- cuSOLVERMp:分布式系统的特征值求解器。
- cuFFTMp:
cuFFT
的多节点、多进程扩展。有了cuFFTMp
, NVIDIA 现在不仅支持单个系统中的多个 GPU ,还支持跨多个节点的多个 GPU 。cuFFTMp
使用NVSHMEM
,这是一个基于OpenSHMEM
标准的新通信库,通过提供内核启动的通信,为 NVIDIA GPU 设计。NVSHMEM
创建一个全局地址空间,其中包含集群中所有 GPU 的内存。从 CUDA 内核内部执行通信可以实现细粒度远程数据访问,从而降低同步成本,并利用 GPU 中的大规模并行性来隐藏通信开销。
-
显示并行
程序通过API或者手动直接管理数据变化和分布管理。- CUTLASS 3
C++
线性代数编程模型,帮助我们更快的调用张量。提供了操作定义形状和图块的新方法。
矩阵乘法是若干科学应用——尤其是深度学习——中的重要部分。有了CUTLASS
,我们可以给所有人一种像搭积木一样的技术和结构,通过用CUDA C++
编写含有高性能GEMM的新算法。稠密线性代数的灵活高效运用对于深度学习乃至更广阔GPU计算生态系统起至关重要的作用。
- CUTLASS 3
GPU计算工具
- Nsight:从任务中获取信息并将其记录到磁盘以供分析。
数据安全
使用中的数据、AI 模型和应用很容易遭到外部攻击和内部威胁。借助 NVIDIA 机密计算 (CCX),您可以在各个阶段(收集、存储和使用阶段)保护数据的安全。NVIDIA Hopper 架构中这一突破性的安全保护功能可以减轻这些威胁,同时可让用户大幅提升 NVIDIA H100 Tensor Core GPU 的速度,从而更快地处理 AI 工作负载。
- 机密计算
- GPU With COnfidential Computing
- PCIe需要通过加密来完成 机密计算。
- cuda程序在机密计算过程中不受更改
- GPU分配内存->CPU分配系统引脚和内存 (机密计算介入管理内存)–>复制内存到GPU(PCIe自动加密)–>启动内核(加密)–>结果拷贝回CPU(加密)
总结
利用Joson的PPT中的话来说就是。计算性能是软件和硬件(芯片)共同决定的
.。NIVIDA强大的异构计算架构和CUDA加速工具为深度学习部署以及其他高算力需求提供了选择。目前NVIDIA在市场上的认可度较高,性能可靠的同时各种任务需求适配做的也不错。强大的CUDA加速为深度模型模型部署助理不少。
以上内容来自与NVIDIA GTC分享和自己的一些学习笔记。同时也把分享中的PPT所提到链接加入文中。