GPU計(jì)算也稱圖形處理單元上的通用計(jì)算,它是支持許多現(xiàn)代的機(jī)器學(xué)習(xí)算法,這些算法以前由于運(yùn)行時(shí)間慢而無法實(shí)現(xiàn)。通過利用GPU的并行計(jì)算功能,相對(duì)于傳統(tǒng)的CPU計(jì)算,可以顯著減少計(jì)算時(shí)間。CUDA由NVIDIA免費(fèi)開發(fā)和提供,它是并行計(jì)算運(yùn)行時(shí)和軟件API,供開發(fā)人員使用,以支持大多數(shù)領(lǐng)先的機(jī)器學(xué)習(xí)框架。相信通過上述介紹,對(duì)于GPU計(jì)算是什么大家已經(jīng)清楚,但是還有很多人想了解,用于機(jī)器學(xué)習(xí)的GPU計(jì)算的工作原理是什么樣呢?在回答這個(gè)問題之前,先讓我們了解一下CUDA平臺(tái)和API。
通過使用CUDA平臺(tái)和API,最初為計(jì)算機(jī)圖形渲染開發(fā)的并行計(jì)算管道現(xiàn)在可以被軟件開發(fā)人員用于在NVIDIA GPU上進(jìn)行通用計(jì)算。與傳統(tǒng)的CPU相比,GPU硬件具有并行體系結(jié)構(gòu)和海量?jī)?nèi)存帶寬,能夠更快地完成計(jì)算密集型任務(wù)的數(shù)量級(jí)。例如,由于GPU計(jì)算的優(yōu)勢(shì),現(xiàn)在可以在數(shù)小時(shí)或數(shù)天內(nèi)完成在CPU上花費(fèi)數(shù)年的深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練。
但是為什么要使用GPU?因?yàn)镚PU具有數(shù)千個(gè)計(jì)算核心,而CPU僅具有多達(dá)2、4、8、16、32個(gè)左右的核心。代碼的并行化級(jí)別限于一個(gè)人的計(jì)算機(jī)上的內(nèi)核數(shù)。此外,許多GPU包括專門用于機(jī)器學(xué)習(xí)的各種數(shù)學(xué)計(jì)算的內(nèi)核,例如用于執(zhí)行矩陣乘法累加的NVIDIA張量?jī)?nèi)核。
為了在NVIDIA GPU上執(zhí)行代碼,可以使用CUDA C / C ++,F(xiàn)ORTAN或其他接口將傳統(tǒng)的串行代碼重寫為并行代碼,然后對(duì)其進(jìn)行編譯以利用可用的GPU硬件的特定計(jì)算功能。數(shù)據(jù)集分布在不同的工作程序處理器上,然后為每個(gè)工作程序分配任務(wù),并在計(jì)算管道的末尾收集結(jié)果。Tensorflow,Pytorch,MXNet和Chainer等許多流行的深度學(xué)習(xí)框架都包括CUDA支持,并允許用戶利用GPU計(jì)算的優(yōu)勢(shì)而無需編寫任何CUDA代碼。
但是,并非所有任務(wù)都可以由GPU加速。任務(wù)必須能夠并行化才能在GPU上工作。這些問題被稱為固有的串行問題。幸運(yùn)的是,機(jī)器學(xué)習(xí)算法中的許多重要計(jì)算。例如人工神經(jīng)網(wǎng)絡(luò)都可以并行化。例如,在卷積神經(jīng)網(wǎng)絡(luò)中,較慢的計(jì)算步驟之一是滑動(dòng)窗口必須“滑動(dòng)”穿過圖像并將卷積核應(yīng)用于圖像的每個(gè)部分的過程。在這種情況下,每個(gè)計(jì)算步驟都獨(dú)立于其先前的步驟。這使我們能夠輕松地并行化代碼,以便每個(gè)處理器都可以執(zhí)行計(jì)算而不會(huì)中斷其他處理器。
帶有Modzy的GPU和CUDA計(jì)算
該Modzy平臺(tái)提供了對(duì)NVIDIA GPU的支持CUDA能夠運(yùn)行。我們所有的模型都可以在GPU上運(yùn)行,也可以在多個(gè)GPU上運(yùn)行,與CPU相比,運(yùn)行時(shí)性能更高。
這對(duì)您意味著什么
如果您正在使用Modzy庫(kù)中基于GPU的模型,那么您已經(jīng)可以利用運(yùn)行時(shí)改進(jìn)。如果要?jiǎng)?chuàng)建要部署到Modzy平臺(tái)中的新模型,則可以利用隨附的CUDA和GPU支持來增強(qiáng)其性能。
上述就是關(guān)于用于機(jī)器學(xué)習(xí)的GPU計(jì)算是怎樣工作的全部?jī)?nèi)容,想了解更多關(guān)于機(jī)器學(xué)習(xí)的相關(guān)信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。