CUDA刷新:GPU计算生态系统
CUDA刷新:GPU計(jì)算生態(tài)系統(tǒng)
CUDA Refresher: The GPU Computing Ecosystem
這是CUDA Refresher系列的第三篇文章,其目標(biāo)是刷新CUDA中的關(guān)鍵概念、工具和優(yōu)化,以供初級(jí)或中級(jí)開(kāi)發(fā)人員使用。
易于編程和性能的巨大飛躍是CUDA平臺(tái)被廣泛采用的關(guān)鍵原因之一。CUDA平臺(tái)成功的第二大原因是擁有廣泛而豐富的生態(tài)系統(tǒng)。
與任何新平臺(tái)一樣,CUDA的成功依賴(lài)于CUDA生態(tài)系統(tǒng)可用的工具、庫(kù)、應(yīng)用程序和合作伙伴。任何新的計(jì)算平臺(tái)都需要開(kāi)發(fā)人員將應(yīng)用程序移植到新的平臺(tái)。至這樣做,開(kāi)發(fā)人員需要最先進(jìn)的工具和開(kāi)發(fā)環(huán)境。
在應(yīng)用程序開(kāi)始擴(kuò)展之后,在數(shù)據(jù)中心級(jí)別需要更多的工具。英偉達(dá)致力于為開(kāi)發(fā)者和企業(yè)提供最先進(jìn)的工具和生態(tài)系統(tǒng)服務(wù)。
Figure1: CUDA Ecosystem: The building blocks to make the CUDA platform the best developer choice.
英偉達(dá)最近宣布了最新的A100架構(gòu)和DGX A100系統(tǒng)的基礎(chǔ)上,這一新的架構(gòu)。新的A100 GPU還配備了豐富的生態(tài)系統(tǒng)。
圖1顯示了在15年多的時(shí)間里進(jìn)化的更廣泛的生態(tài)系統(tǒng)組成部分。在這篇文章中,將詳細(xì)介紹每個(gè)生態(tài)系統(tǒng)組件。
Programming languages and APIs
NVIDIA發(fā)布了CUDA工具包,提供了使用C/C++編程語(yǔ)言的開(kāi)發(fā)環(huán)境。使用此工具包,可以在gpu上開(kāi)發(fā)、優(yōu)化和部署應(yīng)用程序。NVIDIA還提供了一個(gè)PGI工具包來(lái)使用Fortran語(yǔ)言編程。
還有許多第三方工具鏈可用:
· PyCUDA—Use CUDA API operations from a Python interface. 使用來(lái)自Python接口的CUDA API操作。
· Altimesh Hybridizer—Generate CUDA C source code from .NET assemblies (MSIL) or Java archives (java bytecode). 從.NET程序集(MSIL)或Java存檔(Java字節(jié)碼)生成CUDAC源代碼。
· OpenACC—Use directives to program GPUs and compiler-generated CUDA code before executing on CUDA GPUs. 使用指令對(duì)gpu進(jìn)行編程,并在對(duì)CUDA gpu執(zhí)行之前編譯生成的CUDA代碼。
· OpenCL—Use low-level API operations to program CUDA GPUs. 使用低級(jí)API操作來(lái)編程CUDA gpu。
Alea-GPU—Program CUDA GPUs with the .NET framework. 使用.NET框架的Alea GPU程序CUDA GPU。
Libraries
庫(kù)對(duì)于為任何編程環(huán)境中廣泛使用的公共例程提供性能下降是必不可少的。針對(duì)目標(biāo)計(jì)算架構(gòu)進(jìn)行了很好的優(yōu)化,并且具有較高的軟件質(zhì)量。還節(jié)省了應(yīng)用程序開(kāi)發(fā)時(shí)間,并提供了開(kāi)始使用GPU加速的最簡(jiǎn)單方法。
NVIDIA在CUDA平臺(tái)上提供了一個(gè)稱(chēng)為CUDA-X的層,CUDA-X是一個(gè)庫(kù)、工具和技術(shù)的集合。GPU加速CUDA庫(kù)支持跨多個(gè)領(lǐng)域的加速下降,如線(xiàn)性代數(shù)、圖像和視頻處理、深度學(xué)習(xí)和圖形分析。對(duì)于開(kāi)發(fā)自定義算法,可以使用與常用語(yǔ)言和數(shù)字包以及已發(fā)布的開(kāi)發(fā)API操作的可用集成。
NVIDIA CUDA工具包附帶了大量常用庫(kù)。許多合作伙伴還在CUDA平臺(tái)上貢獻(xiàn)了許多庫(kù)。以下是一些廣泛使用的庫(kù)的列表:
· 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分析和調(diào)試工具
任何編程體系結(jié)構(gòu)的重要元素之一是編寫(xiě)、調(diào)試和優(yōu)化程序的健壯而高效的工具。CUDA生態(tài)系統(tǒng)是健壯的,NVIDIA花費(fèi)了大量的精力來(lái)確保擁有快速、輕松、高效地編寫(xiě)所需的所有工具。
以下是CUDA分析和調(diào)試工具的預(yù)覽:
NVIDIA Nsight這是一個(gè)低開(kāi)銷(xiāo)的分析、跟蹤和調(diào)試工具。提供了一個(gè)基于GUI的環(huán)境,可以跨NVIDIA平臺(tái)(如大型多GPU x86服務(wù)器、Quadro工作站等)進(jìn)行擴(kuò)展。
CUDA GDB這是linuxgdb的一個(gè)擴(kuò)展,提供了一個(gè)基于控制臺(tái)的調(diào)試接口,可以從命令行使用。CUDA GDB可以在本地系統(tǒng)或任何遠(yuǎn)程系統(tǒng)上使用。基于GUI的插件也可用,例如DDD、EMACS或Nsight Eclipse Edition。
CUDA-Memcheck是一個(gè)必備的工具,通過(guò)檢查并發(fā)運(yùn)行的數(shù)千個(gè)線(xiàn)程來(lái)洞察內(nèi)存訪(fǎng)問(wèn)問(wèn)題。
還有許多第三方解決方案,包括:
· ARM Forge
· TotalView Debugger
· PAPI CUDA Component
· TAU Performance System
· VampirTrace
Datacenter tools and cluster management數(shù)據(jù)中心工具和群集管理
NVIDIA gpu為應(yīng)用程序提供了巨大的加速,這些應(yīng)用程序進(jìn)一步擴(kuò)展到大量的gpu。許多科學(xué)應(yīng)用,如分子動(dòng)力學(xué)和量子化學(xué),以及人工智能應(yīng)用,都需要一個(gè)gpu集群來(lái)將應(yīng)用性能擴(kuò)展到通過(guò)高速網(wǎng)絡(luò)連接的數(shù)千個(gè)gpu。現(xiàn)代數(shù)據(jù)中心使用NVIDIA GPUs和Mellanox高速互連來(lái)擴(kuò)展應(yīng)用程序以大規(guī)模擴(kuò)展性能。
需要一個(gè)復(fù)雜的生態(tài)系統(tǒng)才能在數(shù)據(jù)中心輕松部署。企業(yè)需要工具來(lái)輕松管理和運(yùn)行這些密集的數(shù)據(jù)中心。英偉達(dá)與生態(tài)系統(tǒng)合作伙伴密切合作,為開(kāi)發(fā)人員和DevOps提供AI和HPC軟件生命周期每一步的軟件工具。
以下是英偉達(dá)為加強(qiáng)這一生態(tài)系統(tǒng)所做的一些努力:
· Container registry
· Scheduling and orchestration
· Cluster management tools
· Monitoring tools
Containers
容器是輕松部署應(yīng)用程序的現(xiàn)代方式。NVIDIA提供NVIDIA NGC的所有深度學(xué)習(xí)和HPC容器。NVIDIA對(duì)這些容器進(jìn)行了測(cè)試、維護(hù)和優(yōu)化。NGC還提供了托管第三方容器的方法。組織也可以選擇擁有私有容器存儲(chǔ)庫(kù)。
調(diào)度和編排
調(diào)度和編排是數(shù)據(jù)中心管理和操作的另一個(gè)重要方面。Kubernetes是現(xiàn)代流行的容器編排系統(tǒng),用于自動(dòng)化應(yīng)用程序部署、擴(kuò)展和管理。NVIDIA GPUs上的Kubernetes使用GPU加速功能擴(kuò)展了行業(yè)標(biāo)準(zhǔn)的容器編排平臺(tái)。Kubernetes為NVIDIA GPU資源調(diào)度提供了最先進(jìn)的支持。
群集管理工具
主要的標(biāo)準(zhǔn)集群管理工具都支持NVIDIA gpu。一些例子包括Bright Cluster, Ganglia, StackIQ, and Altair PBS Works作品。
監(jiān)視工具
NVIDIA還提供了一套稱(chēng)為DCGM的工具,用于管理和監(jiān)視集群環(huán)境中的gpu。NVIDIA還公開(kāi)了一個(gè)基于A(yíng)PI的接口,通過(guò)nvmlapi監(jiān)視gpu。在這些工具的幫助下,數(shù)據(jù)中心運(yùn)營(yíng)團(tuán)隊(duì)可以持續(xù)執(zhí)行主動(dòng)健康監(jiān)測(cè)、全面診斷、系統(tǒng)警報(bào)和治理策略,包括電源和時(shí)鐘管理。這些工具可以單獨(dú)使用,也可以與任何行業(yè)標(biāo)準(zhǔn)工具套件集成使用。還可以使用NVML API操作構(gòu)建自己的工具。
CUDA ecosystem and GPU-accelerated applications
在2006年CUDA發(fā)布之后,開(kāi)發(fā)人員已經(jīng)在CUDA上移植了許多應(yīng)用程序。
第一批開(kāi)始移植應(yīng)用程序的開(kāi)發(fā)人員是科學(xué)界。這個(gè)社區(qū)移植了許多標(biāo)準(zhǔn)應(yīng)用程序,以及自行開(kāi)發(fā)的代碼。具有內(nèi)在并行性的應(yīng)用程序,如圖像和視頻處理,是移植到CUDA的第一個(gè)用例之一。
深度學(xué)習(xí)是另一個(gè)大規(guī)模并行性有助于加速應(yīng)用程序的例子。目前幾乎每個(gè)深度學(xué)習(xí)框架都使用CUDA/GPU計(jì)算來(lái)加速深度學(xué)習(xí)訓(xùn)練和推理。
NVIDIA維護(hù)一個(gè)目錄,列出所有GPU加速應(yīng)用程序。這個(gè)列表只是GPU計(jì)算加速的應(yīng)用程序的一個(gè)子集。很多申請(qǐng)都是內(nèi)部的,不在這份名單上。
GPUs everywhere
CUDA的廣泛采用要求每個(gè)需要GPU來(lái)開(kāi)發(fā)CUDA代碼和端口應(yīng)用程序的開(kāi)發(fā)人員。多年前,NVIDIA決定在NVIDIA設(shè)計(jì)的每個(gè)GPU都將支持CUDA架構(gòu):
用于游戲和筆記本電腦的GeForce GPU
專(zhuān)業(yè)可視化的Quadro GPU
數(shù)據(jù)中心GPU
嵌入式soc的Tegra
跨所有產(chǎn)品線(xiàn)的單一計(jì)算體系結(jié)構(gòu)和CUDA的向后兼容性使該平臺(tái)成為開(kāi)發(fā)人員的選擇。可以訪(fǎng)問(wèn)筆記本電腦和PC、工作站、服務(wù)器和嵌入式設(shè)備中的GPU,并在任何地方運(yùn)行相同的CUDA代碼。地球上的每一個(gè)云服務(wù)提供商都為CUDA支持的gpu供電。
Summary
NVIDIA致力于為CUDA開(kāi)發(fā)者提供廣泛而豐富的生態(tài)系統(tǒng)支持。一個(gè)龐大的工程師團(tuán)隊(duì)一直在努力確保能得到所有正確的工具。以下是CUDA開(kāi)發(fā)人員可以利用的優(yōu)勢(shì):
使用豐富的編程語(yǔ)言支持和開(kāi)發(fā)環(huán)境工具(如調(diào)試器、探查器等)開(kāi)發(fā)CUDA代碼。
通過(guò)優(yōu)化、測(cè)試和維護(hù)庫(kù)來(lái)降低應(yīng)用程序的加速。
使用經(jīng)過(guò)優(yōu)化和測(cè)試的容器及其在NVIDIA NGC上的可用性,易于部署。
支持在集群環(huán)境中擴(kuò)展應(yīng)用程序的工具。
使用CUDA加速了更廣泛的應(yīng)用。
總結(jié)
以上是生活随笔為你收集整理的CUDA刷新:GPU计算生态系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用Microsoft DirectX光线
- 下一篇: NVIDIA Jarvis:一个GPU加