這是 CUDA 總複習系列的第三篇文章,目的是為初階或中階開發人員複習 CUDA、工具和最佳化的主要概念。
程式設計簡易性和效能大幅提升是 CUDA 平台廣受採用的主要原因之一。而 CUDA 第二個成功的原因是因為 CUDA 具備廣泛且豐富的生態系統。
如同任何新平台,CUDA 的成功仰賴 CUDA 生態系統所涵蓋的工具、函式庫、應用程式及合作夥伴。任何新的運算平台都需要開發人員將應用程式移植到新平台,因此開發人員需要最先進的工具和開發環境。
應用程式開始擴充後,在資料中心層級需要更多工具。NVIDIA 致力於為開發人員和企業提供最先進的工具和生態系統服務。
NVIDIA 最近發表最新的 A100 架構及以此新架構為基礎的 DGX A100 系統。新的 A100 GPU 也具有豐富的生態系統。
圖 1 所示為發展超過 15 年的龐大生態系統元件。在本文中,我將深入探討各個生態系統元件的細節。
程式設計語言和 API
CUDA 1.0 最初僅支援 C 程式設計語言,但這已隨著多年過去而演變。CUDA 現在允許使用多種高階程式設計語言對 GPU 進行程式,包括 C、C++、Fortran、Python 等。
NVIDIA 推出 CUDA 工具套件提供使用 C/C++ 程式設計語言的開發環境。透過此工具套件,您可以在 GPU 上開發、最佳化和部署應用程式。NVIDIA 也提供 PGI 工具套件以使用 Fortran 語言進行程式設計。
還有許多第三方工具鏈:
- PyCUDA – 從 Python 介面使用 CUDA API 操作。
- Altimesh Hybridizer – 從 .NET 組件(MSIL)或 Java 壓縮檔(java 位元組碼)產生 CUDA C 原始碼。
- OpenACC – 在 CUDA GPU 上執行之前,使用指示詞對 GPU 和編譯器產成的 CUDA 程式碼進行程式。
- OpenCL – 使用低階 API 操作對 CUDA GPU 進行程式。
- Alea-GPU – 透過 .NET 框架對 CUDA GPU 進行程式。
函式庫
函式庫是在任何程式設計環境中為廣泛使用且不可或缺的,直接提供效能。它們針對目標運算架構而最佳化,並且具有高軟體品質。它們也可節省應用程式開發時間,以最簡單的方式啟用 GPU 加速。
NVIDIA 在 CUDA 平台上提供稱為 CUDA-X 的層,它是函式庫、工具與技術的集合。GPU 加速 CUDA 函式庫可跨多個領域實現直接加速,例如線性代數、影像處理、深度學習和圖表分析。若要開發自訂演算法,您可以使用與常用語言和數值套件的可用整合,以及成熟的開發 API 操作。
NVIDIA CUDA 工具套件隨附各種常用函式庫。許多合作夥伴也在 CUDA 平台上貢獻許多函式庫。以下列出一些廣受採用的函式庫:
- 數學函式庫:cuBLAS、cuRAND、cuFFT、cuSPARSE、cuTENSOR、cuSOLVER
- 平行演算法函式庫:nvGRAPH、Thrust
- 影像函式庫:nvJPEG、NPP、Optical Flow SDK
- 通訊函式庫:NVSHMEM、NCCL
- 深度學習函式庫:cuDNN、TensorRT、Riva、DALI
- 合作夥伴函式庫:OpenCV、FFmpeg、ArrayFire、MAGMA
剖析和除錯工具
以完善且高效率的工具對程式進行編寫、除錯和最佳化是任何程式設計架構的關鍵要素之一。CUDA 生態系統完善,NVIDIA 花費極大的努力確保您擁有以快速、輕鬆、有效率的方式編寫所需的所有工具。
以下是 CUDA 剖析和除錯工具的簡介:
- NVIDIA Nsight – 這是低負擔的剖析、追蹤和除錯工具。它提供以 GUI 為基礎的環境,可跨各種 NVIDIA 平台進行擴充,例如大型多 GPU x86 伺服器、Quadro 工作站等。
- CUDA GDB – 這是 Linux GDB 的擴充功能,提供以主控台為基礎的除錯介面,您可以從命令列加以使用。CUDA GDB 可在近端系統或任何遠端系統上使用。還提供以 GUI 為基礎的外掛程式,例如 DDD、EMACS 或 Nsight Eclipse Edition。
- CUDA-Memcheck – 必備工具,可檢查數千個同時運作的執行緒以洞悉記憶體存取問題。
還有許多第三方解決方案,包括:
資料中心工具和叢集管理
NVIDIA GPU 為應用程式提供了大幅加速,而這些應用程式可進一步擴充至大量 GPU。許多科學應用程式(例如分子動力學和量子化學)及 AI 應用程式需要 GPU 叢集,將應用程式效能橫向擴充至數千個透過高速網路連接的 GPU。現代資料中心是使用 NVIDIA GPU 和 Mellanox 高速互連來建構,可擴充應用程式以大幅擴充效能。
您需要成熟的生態系統以簡化資料中心部署。企業需要工具以便輕鬆管理和執行這些密集的資料中心。NVIDIA 與生態系統合作夥伴密切合作,為開發人員和 DevOps 提供 AI 和 HPC 軟體生命週期每一步所需的軟體工具。
以下是 NVIDIA 為加強此生態系統所做的一些努力:
- 容器登錄
- 調度和協調
- 叢集管理工具
- 監控工具
容器(Container)
容器是輕鬆部署應用程式的現代方式。NVIDIA 提供來自 NVIDIA NGC 的所有深度學習和 HPC 容器。這些容器經過 NVIDIA 測試、維護和最佳化。NGC 也可代管第三方容器。組織也可選擇擁有專用容器儲存庫。
調度和協調
調度和協調是資料中心管理與維運的另一個重要層面。Kubernetes 是現代且熱門的容器管理系統,將應用程式部署、擴充和管理自動化。NVIDIA GPU 上的 Kubernetes 透過 GPU 加速功能擴充業界標準容器協調平台。Kubernetes 為 NVIDIA GPU 資源調度提供最先進的支援。
叢集管理工具
主要的標準叢集管理工具都支援 NVIDIA GPU。例子包括 Bright Cluster、Ganglia、StackIQ 和 Altair PBS Works。
監控工具
NVIDIA 也提供稱為 DCGM 的工具套件,用於管理和監控叢集環境中的 GPU。NVIDIA 也公開以 API 為基礎的介面,透過 NVML API 監控 GPU。在這些工具的輔助下,資料中心維運團隊可持續執行主動式狀態監控、全面診斷、系統警報及包括電源和時脈管理在內的治理原則。這些工具可單獨或與任何業界標準工具套件整合使用。您也可以使用 NVML API 操作建構自己的工具。
CUDA 生態系統和 GPU 加速應用程式
2006 年 CUDA 推出之後,開發人員已在 CUDA 上移植許多應用程式。
開始移植應用程式的第一批開發人員是科學社群。此社群移植許多標準應用程式及自創程式碼。具有固有平行性的應用程式(例如影像處理)是最先移植到 CUDA 的使用案例之一。
深度學習是大規模平行有助於加快應用程式的另一個例子。現在,幾乎所有深度學習框架都使用 CUDA/GPU 運算以加快深度學習訓練和推論。
NVIDIA 維護目錄以列出所有 GPU 加速應用程式。此清單只是透過 GPU 運算加速的應用程式一小部分。許多應用程式存在於組織內部,未被列入此清單。
GPU 無所不在
若要廣泛採用 CUDA,則任何需要 GPU 的開發人員都必須開發 CUDA 程式碼並移植應用程式。多年前,NVIDIA 即決定讓 NVIDIA 設計的每個 GPU 都支援 CUDA 架構:
- 用於遊戲和筆記型電腦的 GeForce GPU
- 用於專業視覺化的 Quadro GPU
- 用於資料中心的Tesla GPU
- 用於嵌入式 SoC 的 Tegra
CUDA 平台是跨所有產品線的單一運算架構並具備回溯相容性,是開發人員的首選。您可以在筆記型電腦、電腦、工作站、伺服器和嵌入式裝置中存取 GPU,且隨時隨地執行相同的 CUDA 程式碼。世界上所有的雲端服務供應商都採用支援 CUDA 的 GPU。
總結
NVIDIA 致力於為 CUDA 開發人員提供廣泛且豐富的生態系統支援。龐大的工程師團隊持續努力以確保您可獲得所有正確的工具。以下是 CUDA 開發人員可利用的優勢:
- 透過豐富的程式設計語言支援和開發環境工具(例如除錯工具、剖析工具等)開發 CUDA 程式碼。
- 以經過調整、測試和維護的函式庫直接加快應用程式。
- 利用經過調整和測試的容器及其在 NVIDIA NGC 上的可用性輕鬆部署。
- 支援在叢集環境中橫向擴充應用程式的工具
使用 CUDA 加速的各種應用程式。