CUDA刷新:GPU计算生态系统
CUDA刷新:GPU计算生态系统
CUDA Refresher: The GPU Computing Ecosystem
这是CUDA Refresher系列的第三篇文章,其目标是刷新CUDA中的关键概念、工具和优化,以供初级或中级开发人员使用。
易于编程和性能的巨大飞跃是CUDA平台被广泛采用的关键原因之一。CUDA平台成功的第二大原因是拥有广泛而丰富的生态系统。
与任何新平台一样,CUDA的成功依赖于CUDA生态系统可用的工具、库、应用程序和合作伙伴。任何新的计算平台都需要开发人员将应用程序移植到新的平台。至这样做,开发人员需要最先进的工具和开发环境。
在应用程序开始扩展之后,在数据中心级别需要更多的工具。英伟达致力于为开发者和企业提供最先进的工具和生态系统服务。
Figure 1: CUDA Ecosystem: The building blocks to make the CUDA platform the best developer choice.
英伟达最近宣布了最新的A100架构和DGX A100系统的基础上,这一新的架构。新的A100 GPU还配备了丰富的生态系统。
图1显示了在15年多的时间里进化的更广泛的生态系统组成部分。在这篇文章中,将详细介绍每个生态系统组件。
Programming languages and APIs
NVIDIA发布了CUDA工具包,提供了使用C/C++编程语言的开发环境。使用此工具包,可以在gpu上开发、优化和部署应用程序。NVIDIA还提供了一个PGI工具包来使用Fortran语言编程。
还有许多第三方工具链可用:
· PyCUDA—Use CUDA API operations from a Python interface. 使用来自Python接口的CUDA API操作。
· Altimesh Hybridizer—Generate CUDA C source code from .NET assemblies (MSIL) or Java archives (java bytecode). 从.NET程序集(MSIL)或Java存档(Java字节码)生成CUDAC源代码。
· OpenACC—Use directives to program GPUs and compiler-generated CUDA code before executing on CUDA GPUs. 使用指令对gpu进行编程,并在对CUDA gpu执行之前编译生成的CUDA代码。
· OpenCL—Use low-level API operations to program CUDA GPUs. 使用低级API操作来编程CUDA gpu。
Alea-GPU—Program CUDA GPUs with the .NET framework. 使用.NET框架的Alea GPU程序CUDA GPU。
Libraries
库对于为任何编程环境中广泛使用的公共例程提供性能下降是必不可少的。针对目标计算架构进行了很好的优化,并且具有较高的软件质量。还节省了应用程序开发时间,并提供了开始使用GPU加速的最简单方法。
NVIDIA在CUDA平台上提供了一个称为CUDA-X的层,CUDA-X是一个库、工具和技术的集合。GPU加速CUDA库支持跨多个领域的加速下降,如线性代数、图像和视频处理、深度学习和图形分析。对于开发自定义算法,可以使用与常用语言和数字包以及已发布的开发API操作的可用集成。
NVIDIA CUDA工具包附带了大量常用库。许多合作伙伴还在CUDA平台上贡献了许多库。以下是一些广泛使用的库的列表:
· Mathematical libraries: cuBLAS, cuRAND, cuFFT, cuSPARSE, cuTENSOR, cuSOLVER
· Parallel algorithm libraries: nvGRAPH, Thrust
· Image and video libraries: nvJPEG, NPP, Optical Flow SDK
· Communication libraries: NVSHMEM, NCCL
· Deep learning libraries: cuDNN, TensorRT, Jarvis, DALI
· Partner libraries: OpenCV, FFmpeg, ArrayFire, MAGMA
Profiling and debugging tools分析和调试工具
任何编程体系结构的重要元素之一是编写、调试和优化程序的健壮而高效的工具。CUDA生态系统是健壮的,NVIDIA花费了大量的精力来确保拥有快速、轻松、高效地编写所需的所有工具。
以下是CUDA分析和调试工具的预览:
NVIDIA Nsight这是一个低开销的分析、跟踪和调试工具。提供了一个基于GUI的环境,可以跨NVIDIA平台(如大型多GPU x86服务器、Quadro工作站等)进行扩展。
CUDA GDB这是linuxgdb的一个扩展,提供了一个基于控制台的调试接口,可以从命令行使用。CUDA GDB可以在本地系统或任何远程系统上使用。基于GUI的插件也可用,例如DDD、EMACS或Nsight Eclipse Edition。
CUDA-Memcheck是一个必备的工具,通过检查并发运行的数千个线程来洞察内存访问问题。
还有许多第三方解决方案,包括:
Datacenter tools and cluster management数据中心工具和群集管理
NVIDIA gpu为应用程序提供了巨大的加速,这些应用程序进一步扩展到大量的gpu。许多科学应用,如分子动力学和量子化学,以及人工智能应用,都需要一个gpu集群来将应用性能扩展到通过高速网络连接的数千个gpu。现代数据中心使用NVIDIA GPUs和Mellanox高速互连来扩展应用程序以大规模扩展性能。
需要一个复杂的生态系统才能在数据中心轻松部署。企业需要工具来轻松管理和运行这些密集的数据中心。英伟达与生态系统合作伙伴密切合作,为开发人员和DevOps提供AI和HPC软件生命周期每一步的软件工具。
以下是英伟达为加强这一生态系统所做的一些努力:
· Container registry
· Scheduling and orchestration
· Cluster management tools
· Monitoring tools
Containers
容器是轻松部署应用程序的现代方式。NVIDIA提供NVIDIA NGC的所有深度学习和HPC容器。NVIDIA对这些容器进行了测试、维护和优化。NGC还提供了托管第三方容器的方法。组织也可以选择拥有私有容器存储库。
调度和编排
调度和编排是数据中心管理和操作的另一个重要方面。Kubernetes是现代流行的容器编排系统,用于自动化应用程序部署、扩展和管理。NVIDIA GPUs上的Kubernetes使用GPU加速功能扩展了行业标准的容器编排平台。Kubernetes为NVIDIA GPU资源调度提供了最先进的支持。
群集管理工具
主要的标准集群管理工具都支持NVIDIA gpu。一些例子包括Bright Cluster, Ganglia, StackIQ, and Altair PBS Works作品。
监视工具
NVIDIA还提供了一套称为DCGM的工具,用于管理和监视集群环境中的gpu。NVIDIA还公开了一个基于API的接口,通过nvmlapi监视gpu。在这些工具的帮助下,数据中心运营团队可以持续执行主动健康监测、全面诊断、系统警报和治理策略,包括电源和时钟管理。这些工具可以单独使用,也可以与任何行业标准工具套件集成使用。还可以使用NVML API操作构建自己的工具。
CUDA ecosystem and GPU-accelerated applications
在2006年CUDA发布之后,开发人员已经在CUDA上移植了许多应用程序。
第一批开始移植应用程序的开发人员是科学界。这个社区移植了许多标准应用程序,以及自行开发的代码。具有内在并行性的应用程序,如图像和视频处理,是移植到CUDA的第一个用例之一。
深度学习是另一个大规模并行性有助于加速应用程序的例子。目前几乎每个深度学习框架都使用CUDA/GPU计算来加速深度学习训练和推理。
NVIDIA维护一个目录,列出所有GPU加速应用程序。这个列表只是GPU计算加速的应用程序的一个子集。很多申请都是内部的,不在这份名单上。
GPUs everywhere
CUDA的广泛采用要求每个需要GPU来开发CUDA代码和端口应用程序的开发人员。多年前,NVIDIA决定在NVIDIA设计的每个GPU都将支持CUDA架构:
用于游戏和笔记本电脑的GeForce GPU
专业可视化的Quadro GPU
数据中心GPU
嵌入式soc的Tegra
跨所有产品线的单一计算体系结构和CUDA的向后兼容性使该平台成为开发人员的选择。可以访问笔记本电脑和PC、工作站、服务器和嵌入式设备中的GPU,并在任何地方运行相同的CUDA代码。地球上的每一个云服务提供商都为CUDA支持的gpu供电。
Summary
NVIDIA致力于为CUDA开发者提供广泛而丰富的生态系统支持。一个庞大的工程师团队一直在努力确保能得到所有正确的工具。以下是CUDA开发人员可以利用的优势:
使用丰富的编程语言支持和开发环境工具(如调试器、探查器等)开发CUDA代码。
通过优化、测试和维护库来降低应用程序的加速。
使用经过优化和测试的容器及其在NVIDIA NGC上的可用性,易于部署。
支持在集群环境中扩展应用程序的工具。
使用CUDA加速了更广泛的应用。