為什么深度學習和神經網絡要使用 GPU?

為什么深度學習和神經網絡要使用 GPU?

本篇文章的目標是幫助初學者了解 CUDA 是什么,以及它如何與 PyTorch 配合使用,更重要的是,我們為何在神經網絡編程中使用 GPU。

圖形處理單元 (GPU)

要了解 CUDA,我們需要對圖形處理單元 (GPU) 有一定的了解。GPU 是一種擅長處理 專門化 計算的處理器。

這與中央處理單元 (CPU) 形成對比,CPU 是一種擅長處理 通用 計算的處理器。CPU 是為我們的電子設備上大多數典型計算提供動力的處理器。

GPU 可以比 CPU 快得多,但并非總是如此。GPU 相對于 CPU 的速度取決于正在執行的計算類型。最適合 GPU 的計算類型是能夠 并行 進行的計算。

并行計算

并行計算是一種將特定計算分解為可以同時進行的獨立較小計算的計算類型。然后將得到的計算結果重新組合或同步,以形成原始較大計算的結果。

?img?

一個較大任務可以分解為的任務數量取決于特定硬件上包含的內核數量。內核是實際在給定處理器內進行計算的單元,CPU 通常有四、八或十六個內核,而 GPU 可能有數千個內核。

還有其他一些技術規格也很重要,但本描述旨在傳達一般概念。

有了這些基礎知識,我們可以得出結論,使用 GPU 進行并行計算,并且最適合使用 GPU 解決的任務是能夠并行完成的任務。如果計算可以并行完成,我們就可以通過并行編程方法和 GPU 加速我們的計算。

神經網絡是令人尷尬的并行

現在讓我們關注神經網絡,看看為何深度學習如此大量地使用 GPU。我們剛剛了解到 GPU 適合進行并行計算,而這一事實正是深度學習使用它們的原因。神經網絡是 令人尷尬的并行

在并行計算中,一個 令人尷尬的并行 任務是指幾乎不需要將整體任務分解為一組可以并行計算的較小任務。

令人尷尬的并行任務是那些很容易看出一組較小任務彼此獨立的任務。

?img?

神經網絡之所以令人尷尬的并行,原因就在于此。我們使用神經網絡進行的許多計算可以很容易地分解為較小的計算,使得一組較小的計算彼此不依賴。一個這樣的例子是卷積。

卷積示例

讓我們來看一個示例,卷積操作:

?img?

這個動畫展示了沒有數字的卷積過程。我們在底部有一個藍色的輸入通道。一個在底部陰影的卷積濾波器在輸入通道上滑動,以及一個綠色的輸出通道:

  • 藍色(底部) - 輸入通道
  • 陰影(在藍色上方) - 3 x 3? 卷積濾波器
  • 綠色(頂部) - 輸出通道

對于藍色輸入通道上的每個位置,3 x 3? 濾波器都會進行一次計算,將藍色輸入通道的陰影部分映射到綠色輸出通道的相應陰影部分。

在動畫中,這些計算是依次一個接一個地進行的。然而,每次計算都與其他計算獨立,這意味著沒有計算依賴于其他任何計算的結果。

因此,所有這些獨立的計算都可以在 GPU 上并行進行,并產生整體的輸出通道。

這使我們能夠看到,通過使用并行編程方法和 GPU,可以加速卷積操作。

Nvidia 硬件 (GPU) 和軟件 (CUDA)

這就是 CUDA 發揮作用的地方。Nvidia 是一家設計 GPU 的技術公司,他們創建了 CUDA 作為一個軟件平臺,與他們的 GPU 硬件配合使用,使開發人員更容易構建利用 Nvidia GPU 并行處理能力加速計算的軟件。

?img?

Nvidia GPU 是實現并行計算的硬件,而 CUDA 是為開發人員提供 API 的軟件層。

因此,你可能已經猜到,要使用 CUDA,需要一個 Nvidia GPU,CUDA 可以從 Nvidia 的網站免費下載和安裝。

開發人員通過下載 CUDA 工具包來使用 CUDA。工具包中包含專門的庫,如 cuDNN,CUDA 深度神經網絡庫。

?img?

PyTorch 內置 CUDA

使用 PyTorch 或任何其他神經網絡 API 的一個好處是并行性已經內置在 API 中。這意味著作為神經網絡程序員,我們可以更多地專注于構建神經網絡,而不是性能問題。

對于 PyTorch 來說,CUDA 從一開始就內置其中。不需要額外下載。我們只需要有一個支持的 Nvidia GPU,就可以使用 PyTorch 利用 CUDA。我們不需要直接了解如何使用 CUDA API。

當然,如果我們想在 PyTorch 核心開發團隊工作或編寫 PyTorch 擴展,那么直接了解如何使用 CUDA 可能會很有用。

畢竟,PyTorch 是用所有這些編寫的:

  • Python
  • C++
  • CUDA

在 PyTorch 中使用 CUDA

在 PyTorch 中利用 CUDA 非常容易。如果我們希望某個特定的計算在 GPU 上執行,我們可以通過在數據結構 (張量) 上調用 cuda()? 來指示 PyTorch 這樣做。

假設我們有以下代碼:

> t = torch.tensor([1,2,3])
> t
tensor([1, 2, 3])

以這種方式創建的張量對象默認在 CPU 上。因此,使用這個張量對象進行的任何操作都將在 CPU 上執行。

現在,要將張量移動到 GPU 上,我們只需編寫:

> t = t.cuda()
> t
tensor([1, 2, 3], device='cuda:0')

這種能力使 PyTorch 非常靈活,因為計算可以選擇性地在 CPU 或 GPU 上執行。

GPU 可能比 CPU 慢

我們說我們可以選擇性地在 GPU 或 CPU 上運行我們的計算,但為何不將 每個 計算都運行在 GPU 上呢?

GPU 不是比 CPU 快嗎?

答案是 GPU 只對特定 (專門化) 任務更快。我們可能會遇到的一個問題是瓶頸,這會降低我們的性能。例如,將數據從 CPU 移動到 GPU 是代價高昂的,所以在這種情況下,如果計算任務很簡單,整體性能可能會更慢。

將相對較小的計算任務移動到 GPU 上不會讓我們加速很多,實際上可能會讓我們變慢。記住,GPU 適合將任務分解為許多較小任務,如果計算任務已經很小,我們將不會通過將任務移動到 GPU 上獲得太多好處。

因此,通常在剛開始時只使用 CPU 是可以接受的,隨著我們解決更大更復雜的問題,開始更頻繁地使用 GPU。

GPGPU 計算

起初,使用 GPU 加速的主要任務是計算機圖形,因此得名圖形處理單元,但在近年來,出現了許多其他種類的并行任務。我們已經看到的一個這樣的任務是深度學習。

深度學習以及許多其他使用并行編程技術的科學計算任務,正在導致一種新的編程模型的出現,稱為 GPGPU 或通用 GPU 計算。

GPGPU 計算現在更常見地僅稱為 GPU 計算或加速計算,因為現在在 GPU 上執行各種任務變得越來越普遍。

Nvidia 在這個領域一直是先驅。Nvidia 的 CEO 黃仁勛很早就設想了 GPU 計算,這就是 CUDA 在大約十年前被創建的原因。

盡管 CUDA 已經存在很長時間了,但它現在才真正開始騰飛,Nvidia 直到目前為止在 CUDA 上的工作是 Nvidia 在深度學習 GPU 計算方面處于領先地位的原因。

當我們聽到黃仁勛談論 GPU 計算棧時,他指的是 GPU 作為底部的硬件,CUDA 作為 GPU 頂部的軟件架構,最后是像 cuDNN 這樣的庫位于 CUDA 頂部。

這個 GPU 計算棧支持在芯片上進行通用計算能力,而芯片本身是非常專門化的。我們經常在計算機科學中看到像這樣的棧,因為技術是分層構建的,就像神經網絡一樣。

位于 CUDA 和 cuDNN 頂部的是 PyTorch,這是我們將會工作的框架,最終支持頂部的應用程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64035.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每天五分鐘機器學習:核函數

本文重點 在學習支持向量機算法之前,我們要繼續學習一些數學基礎,本文我們將學習核函數的概念。當數據線性不可分的時候,此時就需要核函數出場了,它可以將低維不可分的數據映射到高維可分數據,此時就可以完成數據分類了。 核函數的定義 核函數K(x, y)定義為兩個數據點x…

MaaS(Model as a Service)

1.MasS是什么? Model as a Service(MaaS)是一種云計算服務模式,它允許用戶通過互聯網訪問和使用機器學習模型,而不需要自行構建和維護這些模型。MaaS提供了模型的托管、管理和監控,使用戶能夠專注于應用程…

圖像處理-Ch7-快速小波變換和小波包

個人博客!無廣告觀看,因為這節內容太多了,有點放不下,分了三節 文章目錄 快速小波變換(The Fast Wavelet Transform)與兩頻段子帶編譯碼系統的關系例:計算一維小波變換 一維快速小波反變換例:計算一維小波…

KAFKA 權威指南筆記(一)究竟應該配置多少個BROKER?

一個KAFKA集群需要多少個BROKER? 一個單獨的Kafka服務器被叫做BROKER,BROKER可以處理數千個分區以及每秒百萬級別的消息量。由BROKER組成了“集群”(其中由集群控制器角色的BROKER是從成員中選舉出來的,負責控制管理工作&#xf…

【ES6復習筆記】函數參數的默認值(6)

在ES6中,函數參數默認值是一個非常有用的特性,它允許你在定義函數時為參數指定一個默認值。如果在調用函數時沒有提供相應的參數值,那么函數將使用默認值。 1. 形參初始值 具有默認值的參數,一般位置要靠后。這是一個潛規則&…

WebRtc webrtc-streamer部署

文章目錄 本文檔只是為了留檔方便以后工作運維,或者給同事分享文檔內容比較簡陋命令也不是特別全,不適合小白觀看,如有不懂可以私信,上班期間都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…

Spring Boot中冪等性的應用

在 Spring Boot 中,冪等性是實現分布式系統設計和接口調用的一個重要概念,尤其在高并發、分布式環境下,確保接口重復調用不會引發系統數據異常至關重要。 冪等性概念 冪等性(Idempotence)是指一次請求和重復多次請求…

leetcode 7. 整數反轉

class Solution { public: int reverse(int x) { long long n0; if(x0) return 0; while(x%100) { xx/10; } while(x!0) { nn*10x%10; xx/10; } if(n<-2147483648||n>2147483647) return 0; return n; } };

[項目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 測試及總結

目錄 編寫http_server模塊 1. 引入cpp-httplib到項目中 2. cpp-httplib的使用介紹 3. 正式編寫http_server 九、添加日志到項目中 十、編寫前端模塊 十一. 詳解傳 gitee 十二、項目總結 項目的擴展 寫在前面 [項目詳解][boost搜索引擎#1] 概述 | 去標簽 | 數據清洗 |…

xxl-job 簡單的入門到實戰

本文是參考官方文檔自己實踐一次&#xff0c;純享版&#xff0c;大致也是作者邊寫博客邊去跟著官方文檔實現 一、前期準備 1、官網地址 GitHub地址&#xff1a; GitHub - xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任務調度平臺XXL-JOB&…

Centos7, 使用yum工具,出現 Could not resolve host: mirrorlist.centos.org

在 CentOS 7 中使用 yum 工具時&#xff0c;如果出現 "Could not resolve host: mirrorlist.centos.org" 的錯誤&#xff0c;通常是因為默認的鏡像源無法訪問。以下是一些常用的解決方法&#xff1a; 檢查網絡連接&#xff1a;首先使用 ping 命令測試網絡連接是否正常…

【教程】通過Docker運行AnythingLLM

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 官方教程&#xff1a;Local Docker Installation ~ AnythingLLM 1、先創建一個目錄用于保存anythingllm的持久化文件&#xff1a; sudo mkdir /app su…

若依(RuoYi-Vue)+Flowable工作流前后端整合教程

此教程適合若依前后端分離項目&#xff0c;其他項目可以在擴展列表中進行查找。 近期公司里需要對很久以前的RuoYi-Vue前后端分離項目擴展出flowable的功能&#xff0c;當然這個重任也是落在了我的身上&#xff08;不然也不會有這篇文章&#xff09;&#xff0c;然后我在官網看…

ubuntu 網絡管理--NetworkManager

ubuntu 網絡管理--NetworkManager 1 介紹2 NetworkManager 命令2 nmcli 命令顯示可用的wifi AP連接wifi檢查網絡連接 ?? 如何刪除刪除網絡連接查看設備狀態添加一個新的以太網連接設置靜態 IP 地址啟用并測試連接添加新的wifi連接 3 其他命令參考 1 介紹 NetworkManager 是標…

計算機網絡習題(第5章 網絡層 第6章 傳輸層)

第5章 網絡層 一、單選題 1、下列關于 IPv4 地址的說法中&#xff0c;錯誤的是( )。 A、 IP 地址是邏輯地址 B、 IP 地址一般用點分十進制表示 C、 205.106.286.36 是一個合法的 IP 地址 D、 同一個網絡中不能有兩臺計算機的 IP 地址相同 正確答案&#xff1a; C 2、…

水庫大壩三維模型的開發和使用3Dmax篇

成果圖 開發過程 工具插件three.js先加載模型做水體銜接水位測量標尺水位標記斷面標記大壩監測點打點 上代碼&#xff0c;技術交流V: bloxed <template><div class"box w100 h100"><el-row :gutter"20" v-loading"loading"e…

【藍橋杯每日一題】分糖果——DFS

分糖果 藍橋杯每日一題 2024-12-24 分糖果 DFS 題目描述 兩種糖果分別有 9 個和 16 個&#xff0c;要全部分給 7 個小朋友&#xff0c;每個小朋友得到的糖果總數最少為 2 個最多為 5 個&#xff0c;問有多少種不同的分法。糖果必須全部分完。 只要有其中一個小朋友在兩種方案中…

計算機畢設-基于springboot的校園招聘網站的設計與實現(附源碼+lw+ppt+開題報告)

博主介紹&#xff1a;?多個項目實戰經驗、多個大型網購商城開發經驗、在某機構指導學員上千名、專注于本行業領域? 技術范圍&#xff1a;Java實戰項目、Python實戰項目、微信小程序/安卓實戰項目、爬蟲大數據實戰項目、Nodejs實戰項目、PHP實戰項目、.NET實戰項目、Golang實戰…

重生之我在異世界學編程之C語言:深入動態內存管理收尾 + 柔性數組篇

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文常見的動態內存管理錯誤&#xf…

無人直播源碼

DY無人直播系統架構設計介紹 在DY等短視頻平臺的直播中&#xff0c;無人直播系統能夠提供自動化、智能化的互動體驗&#xff0c;既減輕了主播的工作量&#xff0c;又提升了觀眾的參與感。以下是一個典型的無人直播系統架構設計&#xff0c;包含全局配置、點對點互動、產品話術、…