国产精品亚洲а∨无码播放不卡_亚洲日韩av乱码一区二区三区_羞羞视频在线观看色_花儿直播免费视频观看在线视频在线_国产成人综合亚洲欧美_欧美乱妇日本无乱码_自拍影视乱伦精品_免费网站看gv片在线_扒下老师的黑色丝袜把她啪啪_免费久久精品一区二区三区

歡迎光臨~漢軒微電子制造(江蘇)有限公司
語言選擇: 中文版 ∷  英文版

行業(yè)新聞

打破CUDA的壟斷

隨著人工智能不斷滲透到生活的各個領(lǐng)域,這些工具將運行在哪種軟件上仍然是一個問題。軟件堆棧(或協(xié)同工作以在計算系統(tǒng)上實現(xiàn)特定功能的軟件組件集合)的選擇在以 GPU 為中心的人工智能任務(wù)計算需求中變得越來越重要。隨著 AI 和 HPC 應(yīng)用不斷突破計算能力的極限,軟件堆棧的選擇會顯著影響性能、效率和開發(fā)人員的生產(chǎn)力。

目前,軟件堆棧競爭中有三個主要參與者:Nvidia 的計算統(tǒng)一設(shè)備架構(gòu) (CUDA)、英特爾的 oneAPI 和 AMD 的 Radeon Open Compute (ROCm)。雖然它們各有優(yōu)缺點,但 Nvidia 的 CUDA 繼續(xù)占據(jù)主導(dǎo)地位,主要是因為其硬件在 HPC 和現(xiàn)在的 AI 領(lǐng)域處于領(lǐng)先地位。在這里,我們將深入研究每個軟件堆棧的復(fù)雜性——探索它們的功能、硬件支持以及與流行的 AI 框架 PyTorch 的集成。此外,我們將最后快速了解兩種高級 HPC 語言:Chapel 和 Julia。

Nvidia 的 CUDA

Nvidia 的 CUDA 是該公司專有的并行計算平臺和軟件堆棧,用于在其 GPU 上進行通用計算。CUDA 提供了一個應(yīng)用程序編程接口 (API),使軟件能夠利用 Nvidia GPU 的并行處理能力來加速計算。

首先必須提到 CUDA,因為它在 AI 和 GPU 密集型 HPC 任務(wù)的軟件堆棧領(lǐng)域占據(jù)主導(dǎo)地位,這是有充分理由的。CUDA 自 2006 年就已存在,這使其擁有悠久的第三方支持歷史和成熟的生態(tài)系統(tǒng)。許多庫、框架和其他工具都專門針對 CUDA 和 Nvidia GPU 進行了優(yōu)化。對 CUDA 堆棧的長期支持是其相對于其他堆棧的主要優(yōu)勢之一。

Nvidia 提供了一套全面的工具集作為 CUDA 平臺的一部分,包括 CUDA 編譯器,如Nvidia CUDA Compiler (NVCC)。還有許多用于調(diào)試和優(yōu)化 CUDA 應(yīng)用程序的調(diào)試器和分析器以及用于分發(fā) CUDA 應(yīng)用程序的開發(fā)工具。此外,CUDA 的悠久歷史催生了大量的文檔、教程和社區(qū)資源。

在討論 AI 任務(wù)時,CUDA 對 PyTorch 框架的支持也至關(guān)重要。該軟件包是一個基于 Torch 庫的開源機器學(xué)習(xí)庫,主要用于計算機視覺和自然語言處理中的應(yīng)用。PyTorch 對 CUDA 提供了廣泛且完善的支持。PyTorch 中的 CUDA 集成經(jīng)過高度優(yōu)化,可在 Nvidia GPU 上進行高效的訓(xùn)練和推理。同樣,CUDA 的成熟意味著可以訪問 PyTorch 可以使用的眾多庫和工具。

除了大量加速庫之外,Nvidia 還為 AI 研究人員和軟件開發(fā)人員提供了完整的深度學(xué)習(xí)軟件堆棧。該堆棧包括流行的 CUDA 深度神經(jīng)網(wǎng)絡(luò)庫 (cuDNN),這是一個 GPU 加速的 度神經(jīng)網(wǎng)絡(luò)基元庫。CuDNN 可加速廣泛使用的深度學(xué)習(xí)框架,包括 Caffe2 、Chainer 、Keras 、MATLAB 、MxNet 、PaddlePaddle 、PyTorch和TensorFlow。

更重要的是,CUDA 旨在與所有 Nvidia GPU 配合使用,從消費級 GeForce 顯卡到高端數(shù)據(jù)中心 GPU,為用戶提供可使用硬件的廣泛多功能性。

盡管如此,CUDA 仍有改進空間,而 Nvidia 的軟件堆棧也存在一些用戶必須考慮的缺點。首先,盡管 CUDA 可以免費使用,但它是 Nvidia 擁有的專有技術(shù),因此不是開源的。這種情況將開發(fā)人員鎖定在 Nvidia 的生態(tài)系統(tǒng)和硬件中,因為在 CUDA 上開發(fā)的應(yīng)用程序無法在非 Nvidia GPU 上運行,除非進行重大代碼更改或使用兼容層。同樣,CUDA 的專有性質(zhì)意味著軟件堆棧的開發(fā)路線圖完全由 Nvidia 控制。開發(fā)人員對 CUDA 代碼庫的貢獻或修改能力有限。

開發(fā)人員還必須考慮 CUDA 的許可成本。CUDA 本身對于非商業(yè)用途是免費的,但商業(yè)應(yīng)用可能需要購買昂貴的 Nvidia 硬件和軟件許可證。

AMD 的 ROCm

AMD 的 ROCm 是許多開發(fā)人員選擇的另一種軟件堆棧。雖然 CUDA 可能占據(jù)主導(dǎo)地位,但 ROCm 卻與眾不同,因為它是用于 GPU 計算的開源軟件堆棧。此功能允許開發(fā)人員自定義和貢獻代碼庫,促進社區(qū)內(nèi)的協(xié)作和創(chuàng)新。ROCm 的一個關(guān)鍵優(yōu)勢是它支持 AMD 和 Nvidia GPU,從而實現(xiàn)跨平臺開發(fā)。

這一獨特功能由異構(gòu)計算可移植接口 (HIP)實現(xiàn),它使開發(fā)人員能夠創(chuàng)建可在不同 GPU 平臺上運行的可移植應(yīng)用程序。雖然 ROCm 支持消費級和專業(yè)級 AMD GPU,但其主要重點是 AMD 專為專業(yè)工作負載設(shè)計的高端 Radeon Instinct 和 Radeon Pro GPU。

與 CUDA 一樣,ROCm 提供了一系列用于 GPU 編程的工具。這些工具包括 C/C++ 編譯器(如 ROCm 編譯器集合、AOMP 和 AMD 優(yōu)化 C/C++ 編譯器)以及 Fortran 編譯器(如 Flang)。此外,還有適用于各種領(lǐng)域的庫,例如線性代數(shù)、FFT 和深度學(xué)習(xí)。

盡管如此,與 CUDA 相比,ROCm 的生態(tài)系統(tǒng)相對較新,需要在第三方支持、庫和工具方面迎頭趕上。與 CUDA 提供的大量文檔、教程和支持相比,進入市場的遲到也意味著文檔和社區(qū)資源更加有限。對于 PyTorch 來說,情況尤其如此,它支持 ROCm 平臺,但由于其歷史和成熟度較短,需要在性能、優(yōu)化和第三方支持方面趕上 CUDA。ROCm 上 PyTorch 的文檔和社區(qū)資源比 CUDA 的更有限。不過,AMD在這方面正在取得進展。

與 Nvidia 一樣,AMD 也提供了大量的ROCm 庫。AMD 為深度學(xué)習(xí)提供了一個與 cuDNN 相當(dāng)?shù)膸?,名?MIOpen,用于 PyTorch 的 ROCm 版本(以及其他流行工具)。

此外,雖然 ROCm 同時支持 AMD 和 Nvidia GPU,但由于驅(qū)動程序開銷和優(yōu)化挑戰(zhàn),其在 Nvidia 硬件上運行時的性能可能無法與 CUDA 相匹配。

英特爾的 oneAPI

英特爾的 oneAPI 是一種統(tǒng)一的跨平臺編程模型,支持針對各種硬件架構(gòu)和加速器進行開發(fā)。它支持多種架構(gòu),包括來自不同供應(yīng)商的 CPU、GPU、FPGA 和 AI 加速器。它旨在為異構(gòu)計算提供與供應(yīng)商無關(guān)的解決方案,并利用 SYCL 等行業(yè)標(biāo)準(zhǔn)。此功能意味著它可以在 AMD 和 Nvidia 等外部供應(yīng)商的架構(gòu)以及英特爾的硬件上運行。

與 ROCm 一樣,oneAPI 是一個開源平臺。因此,與 CUDA 相比,oneAPI 有更多的社區(qū)參與和對代碼庫的貢獻。oneAPI 支持開源開發(fā),支持多種編程語言和框架,包括帶有 SYCL 的 C/C++、Fortran、Python 和 TensorFlow。此外,oneAPI 為異構(gòu)計算提供了統(tǒng)一的編程模型,簡化了跨不同硬件的開發(fā)。

同樣,與 ROCm 一樣,oneAPI 也存在一些與堆棧成熟度相關(guān)的缺點。作為一個較年輕的平臺,oneAPI 需要在第三方軟件支持和針對特定硬件架構(gòu)的優(yōu)化方面趕上 CUDA。

從 PyTorch 中的具體用例來看,與成熟的 CUDA 集成相比,oneAPI 仍處于早期階段。PyTorch 可以利用 oneAPI 的數(shù)據(jù)并行 Python (DPPy) 庫在 Intel CPU 和 GPU 上進行分布式訓(xùn)練,但對 oneAPI GPU 的原生 PyTorch 支持仍處于開發(fā)階段,尚未準(zhǔn)備好投入生產(chǎn)。

話雖如此,值得注意的是,oneAPI 的優(yōu)勢在于其基于開放標(biāo)準(zhǔn)的方法和跨平臺可移植性的潛力。如果擔(dān)心供應(yīng)商鎖定并且在不同硬件架構(gòu)上運行 PyTorch 模型的能力是優(yōu)先事項,那么 oneAPI 可能是一個可行的選擇。

目前,如果 Nvidia GPU 上的最大性能是 PyTorch 工作負載開發(fā)人員的主要目標(biāo),那么 CUDA 仍然是首選,因為它擁有完善的生態(tài)系統(tǒng)。也就是說,尋求與供應(yīng)商無關(guān)的解決方案的開發(fā)人員或主要使用 AMD 或英特爾硬件的開發(fā)人員可能希望分別依賴 ROCm 或 oneAPI。

雖然 CUDA 在生態(tài)系統(tǒng)開發(fā)方面處于領(lǐng)先地位,但其專有性質(zhì)和硬件特異性可能會使 ROCm 和 oneAPI 成為某些開發(fā)人員更有利的解決方案。此外,隨著時間的推移,這些堆棧的社區(qū)支持和文檔將繼續(xù)增長。CUDA 現(xiàn)在可能占據(jù)主導(dǎo)地位,但這種情況在未來幾年可能會發(fā)生變化。

抽象出堆棧

總體而言,許多開發(fā)人員更喜歡創(chuàng)建獨立于硬件的應(yīng)用程序。在 HPC 中,出于性能原因,硬件優(yōu)化是合理的,但許多現(xiàn)代程序員更喜歡專注于他們的應(yīng)用程序,而不是底層硬件的細微差別。

PyTorch 就是這一趨勢的一個很好的例子。Python 并不是一種特別快的語言,但 Hugging Face 上 92% 的模型都是PyTorch 獨有的。只要硬件供應(yīng)商在其庫上構(gòu)建了 PyTorch 版本,用戶就可以專注于模型,而不必擔(dān)心底層硬件的差異。雖然這種可移植性很好,但它并不能保證性能,而這正是底層硬件架構(gòu)可能發(fā)揮作用的地方。

當(dāng)然,Pytorch 基于 Python,這是許多程序員最喜愛的第一語言。這種語言通常以易用性換取性能(尤其是并行編程等高性能功能)。當(dāng)使用 Python 啟動 HPC 項目時,它們傾向于遷移到基于分布式 C/C++ 和 MPI 或使用 OpenMP 的線程應(yīng)用程序的可擴展高性能代碼。這些選擇通常會導(dǎo)致“兩種語言”問題,開發(fā)人員必須管理其代碼的兩個版本。

目前,兩種“較新”的語言 Chapel 和 Julia 提供了一種易于使用的語言解決方案,可提供高性能編碼環(huán)境。除其他外,這些語言試圖“抽象”編寫并行 HPC 集群、多核處理器和 GPU/加速器環(huán)境應(yīng)用程序所需的許多細節(jié)。在它們的基礎(chǔ)上,它們?nèi)匀灰蕾囉谏厦嫣岬降墓?yīng)商 GPU 庫,但通??梢暂p松構(gòu)建能夠在運行時識別和適應(yīng)底層硬件環(huán)境的應(yīng)用程序。

1.Chapel

Chapel(Cascade 高生產(chǎn)力語言)最初由 Cray 開發(fā),是一種并行編程語言,旨在實現(xiàn)比當(dāng)前編程語言(即“Fortran/C/C++ 加 MPI”)更高級別的表達。收購 Cray 的惠普企業(yè)目前支持該語言的開發(fā),將其作為 Apache 許可證第 2 版下的開源項目。當(dāng)前版本為2.0 版,Chapel 網(wǎng)站發(fā)布了一些令人印象深刻的并行性能數(shù)據(jù)。

Chapel 默認編譯為二進制可執(zhí)行文件,但也可以編譯為 C 代碼,用戶可以選擇編譯器。Chapel 代碼可以編譯為可從 C、Fortran 或 Python(及其他語言)調(diào)用的庫。Chapel 通過為 Nvidia 和 AMD 圖形處理單元生成代碼來支持 GPU 編程。

Chapel可用的庫越來越多。最近有一個名為 Chainn 的神經(jīng)網(wǎng)絡(luò)庫可用于 Chapel,它專門用于使用并行編程構(gòu)建深度學(xué)習(xí)模型。Chainn 在 Chapel 中的實現(xiàn)使用戶能夠利用該語言的并行編程功能,并在從筆記本電腦到超級計算機的大規(guī)模上訓(xùn)練深度學(xué)習(xí)模型。

2.Julia

Julia 由麻省理工學(xué)院開發(fā),旨在成為上述雙語言問題的快速、靈活且可擴展的解決方案。 Julia 的開發(fā)工作始于 2009 年,當(dāng)時 Jeff Bezanson、Stefan Karpinski、Viral B. Shah 和 Alan Edelman 著手創(chuàng)建一種既高級又快速的開放式技術(shù)計算語言。

與 Python 一樣,Julia使用快速的即時編譯器提供響應(yīng)式解釋編程環(huán)境(REPL 或 read–eval–print loop ) 。該語言語法類似于 Matlab,并提供許多高級功能,包括:

1、多重分派:一個函數(shù)可以根據(jù)輸入類型有多種實現(xiàn)(方法)(易于創(chuàng)建可移植和自適應(yīng)代碼)

2、動態(tài)類型系統(tǒng):用于文檔、優(yōu)化和調(diào)度的類型

3、性能接近 C 等靜態(tài)類型語言。

4、內(nèi)置包管理器

5、專為并行和分布式計算而設(shè)計

6、可以編譯為二進制可執(zhí)行文件

Julia 還擁有適用于 CUDA、ROCm、OneAPI 和 Apple 的GPU 庫,可與機器學(xué)習(xí)庫 Flux.jl(以及其他庫)一起使用。Flux 是用 Julia 編寫的,為 Julia 的原生 GPU 支持提供了輕量級的抽象。

Chapel 和 Julia 都提供了一種高級且可移植的 GPU 編程方法。與許多隱藏底層硬件細節(jié)的語言一樣,它們可能會有一些性能損失。不過,開發(fā)人員通常愿意犧牲幾個百分點的性能來換取易移植性。

文章來源:半導(dǎo)體行業(yè)觀察


導(dǎo)航欄目

聯(lián)系我們

聯(lián)系人:袁經(jīng)理

手機:051683539599

電話:051683539599

郵箱:[email protected]

地址: 徐高新康寧路1號高科金匯大廈A座14樓

用手機掃描二維碼關(guān)閉
二維碼