日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

隨著傳統(tǒng)的順序算法到日益流行的并行算法,GPU 將成為加速?gòu)?fù)雜計(jì)算不可或缺的工具。在 AI 和機(jī)器學(xué)習(xí)任務(wù)等具有海量數(shù)據(jù)集和復(fù)雜的神經(jīng)網(wǎng)絡(luò)的架構(gòu)中,GPU 的并行處理能力具有很大的優(yōu)勢(shì)。本文將深入探討學(xué)習(xí)。

原文鏈接:https://journal.hexmos.com/gpu-survival-toolkit/

作者 | Rijul Rajesh譯者| 彎月

責(zé)編 | 夏萌

出品 | CSDN(ID:CSDNnews)

為什么僅有 CPU 的知識(shí)還不夠

在如今的 AI 時(shí)代,大多數(shù)開(kāi)發(fā)人員接受過(guò) CPU 相關(guān)知識(shí)的培訓(xùn)。這些知識(shí)已成為教學(xué)內(nèi)容的一部分,因此一般我們都會(huì)以面向 CPU 的方式思考和解決問(wèn)題。

然而,CPU 的問(wèn)題在于它們依賴于順序架構(gòu)。在當(dāng)今世界,我們依賴于大量并行任務(wù),而 CPU 并不適合這些情況。

開(kāi)發(fā)人員面臨的問(wèn)題包括:

執(zhí)行并行任務(wù)

傳統(tǒng)的 CPU 是線性運(yùn)行的,一次執(zhí)行一條指令。有這種限制是因?yàn)?CPU 通常擁有若干針對(duì)單線程性能進(jìn)行過(guò)優(yōu)化的強(qiáng)大核心。

在面對(duì)多個(gè)任務(wù)時(shí),CPU 會(huì)分配資源來(lái)依次處理每個(gè)任務(wù),即順序執(zhí)行指令。在需要同時(shí)關(guān)注大量任務(wù)的情況下,這種方法會(huì)變得效率低下。

雖然我們可以通過(guò)多線程等技術(shù)來(lái)提高 CPU 的性能,但其基本設(shè)計(jì)理念優(yōu)先考慮的是順序執(zhí)行。

高效運(yùn)行 AI 模型

AI模型采用 Transformer 等先進(jìn)架構(gòu),利用并行處理來(lái)提高性能。與順序運(yùn)行的舊式循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN)不同,GPT 等現(xiàn)代Transformer 可以同時(shí)處理多個(gè)單詞,從而提高訓(xùn)練的效率和能力。因?yàn)楫?dāng)我們并行訓(xùn)練時(shí),就可以得到更大的模型,而更大的模型會(huì)生成更好的輸出。

并行性的概念超越了自然語(yǔ)言處理,擴(kuò)展到了圖像識(shí)別等其他領(lǐng)域。例如,圖像識(shí)別架構(gòu) Ale.NET 可以同時(shí)處理圖像的不同部分,展現(xiàn)出了并行處理的強(qiáng)大功能,從而實(shí)現(xiàn)了準(zhǔn)確的模式識(shí)別。

然而,以單線程性能為重心設(shè)計(jì)的 CPU 很難充分發(fā)揮并行處理的潛力。它們無(wú)法有效地分配和執(zhí)行復(fù)雜的 AI 模型所需的大量并行計(jì)算。

因此,GPU 的開(kāi)發(fā)變得越來(lái)越普遍,為的是滿足 AI 應(yīng)用程序中并行處理的特定需求,從而實(shí)現(xiàn)更高的效率和更快的計(jì)算。

如何利用 GPU 驅(qū)動(dòng)開(kāi)發(fā)解決這些問(wèn)題

GPU 核心的大規(guī)模并行性

與 CPU 的核心相比,工程師們?cè)O(shè)計(jì)的 GPU 具有更小、高度專業(yè)化的核心。這種架構(gòu)允許 GPU 同時(shí)執(zhí)行多個(gè)并行任務(wù)。

GPU中的大量核心非常適合依賴于并行性的工作負(fù)載,例如圖形渲染和復(fù)雜的數(shù)學(xué)計(jì)算。

在本文中,我們將演示如何利用 GPU 的并行性來(lái)縮短完成復(fù)雜的任務(wù)所需的時(shí)間。

AI 模型中使用的并行性

AI模型,特別是基于 TensorFlow 等深度學(xué)習(xí)框架構(gòu)建的模型,展現(xiàn)出了高度的并行性。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練涉及大量矩陣運(yùn)算,而 GPU 憑借其龐大的核心數(shù)量,能夠并行化這些運(yùn)算。TensorFlow 以及其他流行的深度學(xué)習(xí)框架都進(jìn)行了優(yōu)化,能夠利用 GPU 的能力來(lái)加速模型的訓(xùn)練和推理。

在本文中,我們將展示如何利用 GPU 的強(qiáng)大功能來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

CPU與 GPU 有何不同?CPU

順序架構(gòu)

中央處理單元(CPU)的設(shè)計(jì)重心是順序處理。它們擅長(zhǎng)線性執(zhí)行一組指令。

CPU針對(duì)需要高單線程性能的任務(wù)進(jìn)行了優(yōu)化,例如

  • 通用計(jì)算
  • 系統(tǒng)操作
  • 處理涉及條件分支的復(fù)雜算法

處理并行任務(wù)的核心數(shù)量有限

CPU的核心數(shù)量較少,消費(fèi)級(jí)的處理器通常有 2~16個(gè)核心。每個(gè)核心都能夠獨(dú)立處理自己的指令集。

GPU

并行架構(gòu)

圖形處理單元(GPU)采用并行架構(gòu)設(shè)計(jì),能夠高效地執(zhí)行并行處理任務(wù)。

適合于:

  • 渲染圖形
  • 執(zhí)行復(fù)雜的數(shù)學(xué)計(jì)算
  • 運(yùn)行可并行的算法

GPU通過(guò)將多個(gè)任務(wù)分解為更小的并行子任務(wù)來(lái)同時(shí)處理多個(gè)任務(wù)。

數(shù)千個(gè)用于并行任務(wù)的核心

與 CPU 不同,GPU 擁有大量核心,通常高達(dá)數(shù)千個(gè)。這些核心組織成了流式多處理器(SM)或類似的結(jié)構(gòu)。

豐富的核心使 GPU 能夠同時(shí)處理大量數(shù)據(jù),非常適合并行任務(wù),例如圖像和視頻處理、深度學(xué)習(xí)和科學(xué)模擬等。

AWS GPU 實(shí)例:初學(xué)者指南

Amazon Web Services(AWS)提供各種用于機(jī)器學(xué)習(xí)等任務(wù)的 GPU 實(shí)例。

以下是不同類型的 AWS GPU 實(shí)例及其用例:

通用 GPU 實(shí)例

  • P3 和 P4 實(shí)例作為多功能通用 GPU 實(shí)例,非常適合各種工作負(fù)載。
  • 其中包括機(jī)器學(xué)習(xí)訓(xùn)練和推理、圖像處理和視頻編碼。它們的各方面能力都很平衡,因此成為了各種計(jì)算任務(wù)的可靠選擇。
  • 價(jià)格:p3.2xlarge實(shí)例的費(fèi)用為每小時(shí) 3.06 美元。
  • 提供 1 個(gè) 16 GB GPU 內(nèi)存的 NVIDIA Tesla V100 GPU。

推理優(yōu)化 GPU 實(shí)例

  • 推理指的是通過(guò)訓(xùn)練好的 AI 模型運(yùn)行實(shí)時(shí)數(shù)據(jù)以進(jìn)行預(yù)測(cè)或解決任務(wù)的過(guò)程。
  • P5 和 Inf1 實(shí)例專門(mén)針對(duì)機(jī)器學(xué)習(xí)推理,在十分注重低延遲和成本的場(chǎng)合中有著出色表現(xiàn)。
  • 價(jià)格:p5.48xlarge實(shí)例的費(fèi)用為每小時(shí) 98.32 美元。
  • 提供 8 個(gè) NVIDIA H100 GPU,每個(gè) GPU 80 GB 內(nèi)存,共計(jì) 640 GB 顯存。

圖形優(yōu)化 GPU 實(shí)例

  • G4 實(shí)例主要用于處理圖形密集型任務(wù)。
  • 視頻游戲開(kāi)發(fā)人員可以使用 G4 實(shí)例來(lái)渲染視頻游戲的 3D 圖形。
  • 價(jià)格:g4dn.xlarge的費(fèi)用為每小時(shí) 0.526 美元。
  • 提供 1 個(gè) 16 GB 內(nèi)存的 NVIDIA T4 GPU。

托管 GPU 實(shí)例

  • Amazon SageMaker是一項(xiàng)機(jī)器學(xué)習(xí)托管服務(wù)。提供支持各種 GPU 實(shí)例的訪問(wèn),包括 P3、P4 和 P5 實(shí)例。
  • 對(duì)于希望接觸機(jī)器學(xué)習(xí),同時(shí)不想操心底層基礎(chǔ)設(shè)施管理的組織來(lái)說(shuō),SageMaker 是一個(gè)不錯(cuò)的選擇。
  • 價(jià)格:https://aws.amazon.com/sagemaker/pricing/?ref=journal.hexmos.com

使用 Nvidia 的 CUDA 進(jìn)行GPU 驅(qū)動(dòng)開(kāi)發(fā)CUDA是什么?

CUDA是一款 NVIDIA 開(kāi)發(fā)的并行計(jì)算平臺(tái)和編程模型,可幫助開(kāi)發(fā)人員利用 GPU 加速器的強(qiáng)大功能來(lái)提高應(yīng)用程序的速度。

下面,我們將使用 CUDA 來(lái)展示一個(gè)示例。

設(shè)置 CUDA

你可以按照以下步驟操作,在計(jì)算機(jī)上設(shè)置 CUDA。

  • 下載CUDA(https://developer.nvidia.com/cuda-downloads?ref=journal.hexmos.com)
  • 通過(guò)上面的鏈接,下載基本的安裝程序以及驅(qū)動(dòng)程序安裝程序。
  • 打開(kāi)主文件夾中的.bashrc,將以下內(nèi)容添加到文件中: export PATH="/usr/local/cuda-12.3/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH"
  • 執(zhí)行以下命令 sudo apt-get install cuda-toolkit sudo apt-get install nvidia-gds
  • 重啟系統(tǒng)。
基本命令

在安裝好 CUDA 后,你可以嘗試以下命令。

LSPCI | grep VGA

此命令可識(shí)別并列出系統(tǒng)中的 GPU。

nvidia-smi

此命令為 NVIDIA System Management Interface(NVIDIA 系統(tǒng)管理界面)的縮寫(xiě),可提供系統(tǒng)中有關(guān) NVIDIA GPU 的詳細(xì)信息,包括利用率、溫度、內(nèi)存使用情況等。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

sudo lshw -C display

此命令可提供系統(tǒng)中有關(guān)顯示控制器(包括顯卡)的詳細(xì)信息。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

inxi -G

此命令可提供有關(guān)圖形子系統(tǒng)的信息,包括有關(guān) GPU 和顯示器的詳細(xì)信息。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

sudo hwinfo --gfxcard

此命令可提供系統(tǒng)中有關(guān)顯卡的詳細(xì)信息。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

使用 CUDA 框架

下面,我們來(lái)展示 CUDA 的一些具體功能。

數(shù)組加法問(wèn)題

數(shù)組加法問(wèn)題很適合演示 GPU 并行化。

考慮以下數(shù)組:

  • 數(shù)組 A = [1,2,3,4,5,6]
  • 數(shù)組 B = [7,8,9,10,11,12]
  • 我們需要計(jì)算每個(gè)元素之和,并存儲(chǔ)在數(shù)組C中。
  • 即 C = [1+7,2+8,3+9,4+10,5+11,6+12] = [8,10,12,14,16,18]

如果由 CPU 來(lái)執(zhí)行整個(gè)操作,則代碼如下:

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

前一個(gè)循環(huán)遍歷數(shù)組的每個(gè)元素,并依次執(zhí)行加法。當(dāng)需要處理大量數(shù)字時(shí),這種方法就會(huì)由于其順序執(zhí)行的性質(zhì)而變得緩慢。

為了克服這個(gè)限制,GPU 提供了一種解決方案:并行化加法運(yùn)算。不同于依次執(zhí)行運(yùn)算的 CPU,GPU 可以同時(shí)執(zhí)行多項(xiàng)加法。

例如,運(yùn)算 1+7、2+8、3+9、4+10、5+11 和 6+12 可以借助 GPU 并行化同時(shí)執(zhí)行。

利用 CUDA,實(shí)現(xiàn)并行加法的代碼如下:

我們將使用內(nèi)核文件(.cu)進(jìn)行演示。

我們來(lái)逐行講解代碼。

  • __global__ 表明該函數(shù)是一個(gè)內(nèi)核函數(shù),將在 GPU 上調(diào)用。
  • vectorAdd 接受三個(gè)整數(shù)指針(a、b 和 c)作為參數(shù),代表相加的向量。
  • threadIdx.x 獲取當(dāng)前線程的索引(在一維網(wǎng)格中)。
  • 向量 a 和 b 的相應(yīng)元素之和存儲(chǔ)在向量 c 中。

下面,我們來(lái)看看 main 函數(shù)。

創(chuàng)建指針 cudaA、cudaB 和 cudaC,指向 GPU 上的內(nèi)存。

我們使用 cudaMalloc,為向量 cudaA、cudaB 和 cudaC 分配 GPU上的內(nèi)存。

使用 cudaMemcpy 將向量 a 和b 的內(nèi)容從主機(jī)復(fù)制到 GPU。

使用一個(gè)塊和多個(gè)(數(shù)量等于向量大小)線程調(diào)用內(nèi)核函數(shù) vectorAdd。

將結(jié)果向量 cudaC 從 GPU 復(fù)制回主機(jī)。

然后就可以正常輸出結(jié)果了:

我們使用 nvcc 命令執(zhí)行這段代碼。

輸出如下:

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

完整的代碼,請(qǐng)參見(jiàn)這里(https://Github.com/RijulTP/GPUToolkit/tree/main/array-addition?ref=journal.hexmos.com)。

使用 GPU 優(yōu)化 Python/ target=_blank class=infotextkey>Python 中的圖像生成

下面,我們來(lái)探討如何使用 GPU 處理來(lái)優(yōu)化性能密集型任務(wù),例如圖像生成。

曼德博集合是一種數(shù)學(xué)結(jié)構(gòu),可根據(jù)指定方程中特定數(shù)字的行為形成復(fù)雜的視覺(jué)模式。生成這種集合是一項(xiàng)資源密集型操作。

通過(guò)下面的代碼片段,你可以了解到使用 CPU 處理生成曼德博集合的傳統(tǒng)方法,該方法的速度很慢。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

上面的代碼生成結(jié)果需要耗費(fèi) 4.07 秒。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

為了提高速度,我們可以通過(guò) Numba 庫(kù)利用 GPU 的并行化。具體方法如下。

首先,我們導(dǎo)入 Numba 庫(kù)的即時(shí)編譯、用于 GPU 加速的 CUDA 以及其他實(shí)用程序。

@jit指示 Numba 執(zhí)行即時(shí)編譯,將 Python 代碼轉(zhuǎn)換為機(jī)器代碼,以提高執(zhí)行速度。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

  • mandel_gpu 是使用cuda.jit 創(chuàng)建的 mandel 函數(shù)的 GPU 兼容版本。它可以將 mandel 的邏輯卸載到 GPU。
  • 為此,我們需要使用@cuda.jit,并指定函數(shù)參數(shù)的數(shù)據(jù)類型(f8 表示浮點(diǎn)數(shù),uint32 表示無(wú)符號(hào)整數(shù))。
  • device=True 參數(shù)表示該函數(shù)將在GPU 上運(yùn)行。

根據(jù)定義,mandel_kernel 將在 CUDA GPU 上執(zhí)行。負(fù)責(zé)跨 GPU 線程并行生成曼德博集合。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

接下來(lái),我們可以在 create_fractal_gpu 函數(shù)中使用 GPU 加速的曼德博集合生成。create_fractal_gpu 函數(shù)需要分配 GPU 內(nèi)存,啟動(dòng) GPU 內(nèi)核 (mandel_kernel),并將結(jié)果復(fù)制回 CPU。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

上述代碼只需 0.0046 秒內(nèi)就能執(zhí)行完成。比之前的 CPU 的代碼要快許多。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

完整的代碼,請(qǐng)參見(jiàn)這里(https://github.com/RijulTP/GPUToolkit/tree/main/mandelbrot?ref=journal.hexmos.com)。

使用 GPU 訓(xùn)練區(qū)分貓狗的神經(jīng)網(wǎng)絡(luò)

GPU在 AI 領(lǐng)域的應(yīng)用是如今的熱門(mén)話題之一,出于演示的目的,下面我們來(lái)創(chuàng)建一個(gè)用于區(qū)分貓和狗神經(jīng)網(wǎng)絡(luò)。

準(zhǔn)備工作

  • CUDA
  • 安裝Tensorflow:pip install tensorflow[and-cuda]
  • 我們將使用kaggle 的貓狗數(shù)據(jù)集。
  • 下載完成后,解壓,將訓(xùn)練文件夾中的貓狗圖片整理到不同的子文件夾,如下所示:

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

導(dǎo)入庫(kù):

  • pandas 和 numpy:用于操作數(shù)據(jù)。
  • Sequential:用于創(chuàng)建神經(jīng)網(wǎng)絡(luò)中疊放的線性層。
  • Convolution2D、MaxPooling2D、Dense 和 Flatten:構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)(CNN)的各層。
  • ImageDataGenerator:用于在訓(xùn)練期間進(jìn)行實(shí)時(shí)數(shù)據(jù)增強(qiáng)。

初始化卷積神經(jīng)網(wǎng)絡(luò)(CNN)

加載訓(xùn)練數(shù)據(jù)

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

構(gòu)建 CNN 架構(gòu)

編譯模型

訓(xùn)練模型

訓(xùn)練完成后,使用 classifier.save 將模型存儲(chǔ)在 .h5 文件中。

在下面的代碼中,我們將使用 trained_model.h5 來(lái)識(shí)別貓和狗。

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

輸出如下:

AI 時(shí)代的 GPU 生存工具包:每個(gè)開(kāi)發(fā)人員必須了解的基本知識(shí)

完整的代碼,請(qǐng)參見(jiàn)這里(https://github.com/RijulTP/GPUToolkit/tree/main/neural-network?ref=journal.hexmos.com)。

總結(jié)

在即將到來(lái)的 AI 時(shí)代,GPU 是不容忽視的存在,我們應(yīng)該深入了解它的能力。

隨著我們從傳統(tǒng)的順序算法過(guò)渡到日益流行的并行算法,GPU 將成為加速?gòu)?fù)雜計(jì)算不可或缺的工具。在 AI 和機(jī)器學(xué)習(xí)任務(wù)等具有海量數(shù)據(jù)集和復(fù)雜的神經(jīng)網(wǎng)絡(luò)的架構(gòu)中,GPU 的并行處理能力具有很大的優(yōu)勢(shì)。

此外,GPU 已超出傳統(tǒng)的機(jī)器學(xué)習(xí)領(lǐng)域,在科學(xué)研究、模擬和數(shù)據(jù)密集型任務(wù)中也有找到了應(yīng)用。事實(shí)證明,GPU 的并行處理能力有助于解決藥物發(fā)現(xiàn)、氣候建模以及金融模擬等各個(gè)領(lǐng)域的難題。

分享到:
標(biāo)簽:GPU
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定