<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>PyTorch教程13.4之硬件

PyTorch教程13.4之硬件

2023-06-05 | pdf | 1.43 MB | 次下載 | 免費

資料介紹

構建具有出色性能的系統需要很好地理解算法和模型以捕獲問題的統計方面。同時,對底層硬件至少有一點了解也是必不可少的。當前部分不能替代有關硬件和系統設計的適當課程。相反,它可以作為理解為什么某些算法比其他算法更有效以及如何實現良好吞吐量的起點。一個好的設計可以很容易地產生一個數量級的差異,反過來,這可以在能夠訓練網絡(例如,在一周內)和根本不能(在 3 個月內,從而錯過最后期限)之間產生差異). 我們將從查看計算機開始。然后我們將放大以更仔細地查看 CPUGPU。

https://file.elecfans.com/web2/M00/A8/BE/poYBAGR3JWaAKduVAAOR3U0tpUA128.png

圖 13.4.1每個程序員都應該知道的延遲數。

不耐煩的讀者可以通過 圖 13.4.1來解決。它摘自 Colin Scott 的 互動帖子 ,該帖子很好地概述了過去十年的進展。原始數字來自 Jeff Dean 2010 年在斯坦福的演講。下面的討論解釋了這些數字的一些基本原理,以及它們如何指導我們設計算法。下面的討論是非常高層次和粗略的。它顯然不能替代適當的課程,而只是為統計建模人員提供足夠的信息以做出適當的設計決策。對于計算機體系結構的深入概述,我們建議讀者參閱 Hennessy 和 Patterson,2011 年或最近關于該主題的課程,例如Arste Asanovic的課程。

13.4.1。電腦

大多數深度學習研究人員和從業者都可以使用具有相當數量內存、計算能力、某種形式的加速器(如 GPU)或其倍數的計算機。計算機由以下關鍵部件組成:

  • 能夠執行我們給它的程序(除了運行操作系統和許多其他東西)的處理器(也稱為 CPU),通常由 8 個或更多內核組成。

  • 內存 (RAM),用于存儲和檢索計算結果,例如權重向量和激活以及訓練數據。

  • 速度范圍為 1 GB/s 到 100 GB/s 的以太網網絡連接(有時是多個)。在高端服務器上可以找到更高級的互連。

  • 用于將系統連接到一個或多個 GPU 的高速擴展總線 (PCIe)。服務器有多達 8 個加速器,通常以高級拓撲連接,而桌面系統有 1 個或 2 個,具體取決于用戶的預算和電源的大小。

  • 耐用存儲設備,例如磁性硬盤驅動器、固態驅動器,在許多情況下使用 PCIe 總線連接。它提供訓練數據到系統的高效傳輸,并根據需要存儲中間檢查點。

https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OrKAHOPCAADyP_xu1VQ407.svg

圖 13.4.2計算機組件的連接性。

如圖13.4.2所示,大多數組件(網絡、GPU 和存儲)都通過 PCIe 總線連接到 CPU。它由多個直接連接到 CPU 的通道組成。例如,AMD 的 Threadripper 3 有 64 個 PCIe 4.0 通道,每個通道都能夠在兩個方向上進行 16 Gbit/s 的數據傳輸。內存直連CPU,總帶寬高達100GB/s。

當我們在計算機上運行代碼時,我們需要將數據混洗到處理器(CPU 或 GPU)、執行計算,然后將結果從處理器移回 RAM 和持久存儲。因此,為了獲得良好的性能,我們需要確保它可以無縫運行,而不會有任何一個系統成為主要瓶頸。例如,如果我們不能足夠快地加載圖像,處理器將無事可做。同樣,如果我們不能足夠快地將矩陣移動到 CPU(或 GPU),它的處理元素就會餓死。最后,如果我們想通過網絡同步多臺計算機,后者不應該減慢計算速度。一種選擇是交錯通信和計算。讓我們更詳細地了解各種組件。

13.4.2。記憶

最基本的內存用于存儲需要隨時訪問的數據。目前 CPU RAM 通常是 DDR4類型,每個模塊提供 20–25 GB/s 的帶寬。每個模塊都有一個 64 位寬的總線。通常使用成對的內存模塊來允許多個通道。CPU 有 2 到 4 個內存通道,即它們有 4 0GB/s 到 100 GB/s 的峰值內存帶寬。每個通道通常有兩個庫。例如 AMD 的 Zen 3 Threadripper 有 8 個插槽。

盡管這些數字令人印象深刻,但它們確實只說明了部分情況。當我們想從內存中讀取一部分時,我們首先需要告訴內存模塊在哪里可以找到信息。也就是說,我們首先需要將地址發送到RAM。完成此操作后,我們可以選擇只讀取單個 64 位記錄或一長串記錄。后者稱為突發讀取. 簡而言之,向內存發送地址并設置傳輸大約需要 100 ns(具體取決于所使用的內存芯片的具體時序系數),隨后的每次傳輸僅需 0.2 ns。簡而言之,第一次閱讀的成本是后續閱讀的 500 倍!請注意,我們每秒最多可以執行 10,000,000 次隨機讀取。這表明我們盡可能避免隨機內存訪問,而是使用突發讀?。ê蛯懭耄?。

當我們考慮到我們有多家銀行時,事情就有點復雜了。每個銀行都可以在很大程度上獨立地讀取內存。這意味著兩件事。一方面,隨機讀取的有效數量高達 4 倍,前提是它們均勻分布在內存中。這也意味著執行隨機讀取仍然是一個壞主意,因為突發讀取也快了 4 倍。另一方面,由于內存對齊到 64 位邊界,最好將任何數據結構對齊到相同的邊界。 當設置了適當的標志時,編譯器幾乎會 自動執行此操作。我們鼓勵好奇的讀者復習一下關于 DRAM 的講座,例如Zeshan Chishti的講座。

GPU 內存需要滿足更高的帶寬要求,因為它們的處理元素比 CPU 多得多。總的來說,有兩種選擇可以解決這些問題。首先是使內存總線顯著變寬。例如,NVIDIA 的 RTX 2080 Ti 具有 352 位寬的總線。這允許同時傳輸更多信息。其次,GPU 使用特定的高性能內存。消費級設備,例如 NVIDIA 的 RTX 和 Titan 系列通常使用GDDR6 總帶寬超過 500 GB/s 的芯片。另一種方法是使用 HBM(高帶寬內存)模塊。它們使用非常不同的接口,并直接與專用硅晶圓上的 GPU 連接。這使得它們非常昂貴,而且它們的使用通常僅限于高端服務器芯片,例如 NVIDIA Volta V100 系列加速器。不出所料,GPU 內存通常比 CPU 內存小得多,因為前者的成本較高。就我們的目的而言,它們的性能特征大體上相似,只是速度快得多。出于本書的目的,我們可以安全地忽略細節。它們僅在調整 GPU 內核以實現高吞吐量時才重要。

13.4.3。貯存

我們看到 RAM 的一些關鍵特性是帶寬延遲。存儲設備也是如此,只是差異可能更加極端。

13.4.3.1。硬盤驅動器

硬盤驅動器(HDD) 已經使用了半個多世紀。簡而言之,它們包含許多帶有磁頭的旋轉盤片,可以定位以在任何給定軌道上讀取或寫入。高端磁盤在 9 個盤片上最多可容納 16 TB。HDD 的主要優點之一是它們相對便宜。它們的眾多缺點之一是它們通常的災難性故障模式和相對較高的讀取延遲。

要理解后者,請考慮 HDD 以大約 7,200 RPM(每分鐘轉數)旋轉的事實。如果它們快得多,它們就會因施加在盤片上的離心力而破碎。在訪問磁盤上的特定扇區時,這有一個主要的缺點:我們需要等到盤片旋轉到位(我們可以移動磁頭但不能加速實際磁盤)。因此,在請求的數據可用之前,它可能需要 8 毫秒以上的時間。一種常見的表達方式是 HDD 可以以大約 100 IOP(每秒輸入/輸出操作)的速度運行。這個數字在過去二十年中基本保持不變。更糟糕的是,增加帶寬同樣困難(大約為 100–200 MB/s)。畢竟,每個磁頭都讀取一條比特軌道,因此,比特率僅與信息密度的平方根成比例。因此,HDD 正迅速降級為非常大的數據集的歸檔存儲和低級存儲。

13.4.3.2。固態硬盤

固態硬盤 (SSD) 使用閃存來持久存儲信息。這允許更快地訪問存儲的記錄。現代 SSD 可以以 100,000 到 500,000 IOP 的速度運行,即比 HDD 快 3 個數量級。此外,它們的帶寬可以達到 1–3GB/s,即比 HDD 快一個數量級。這些改進聽起來好得令人難以置信。實際上,由于 SSD 的設計方式,它們具有以下警告。

  • SSD 以塊(256 KB 或更大)的形式存儲信息。它們只能作為一個整體來寫,這會花費大量時間。因此,SSD 上的按位隨機寫入性能非常差。同樣,寫入數據通常會花費大量時間,因為必須讀取、擦除塊,然后用新信息重寫。到目前為止,SSD 控制器和固件已經開發出算法來緩解這種情況。盡管如此,寫入速度可能會慢得多,尤其是對于 QLC(四級單元)SSD。提高性能的關鍵是維護一個 操作隊列,盡可能在大塊中優先讀取和寫入。

  • SSD 中的存儲單元磨損相對較快(通常在幾千次寫入后就已經磨損)。磨損級保護算法能夠將退化傳播到許多單元上。也就是說,不建議將 SSD 用于交換文件或日志文件的大量聚合。

  • 最后,帶寬的大幅增加迫使計算機設計人員將 SSD 直接連接到 PCIe 總線。能夠處理此問題的驅動器稱為 NVMe(增強型非易失性內存),最多可使用 4 個 PCIe 通道。在 PCIe 4.0 上這相當于高達 8GB/s。

13.4.3.3。云儲存

云存儲提供可配置的性能范圍。也就是說,存儲分配給虛擬機是動態的,無論是數量還是速度,都由用戶選擇。我們建議用戶在延遲太高時增加 IOP 的配置數量,例如,在使用許多小記錄進行訓練期間。

13.4.4。處理器

中央處理器 (CPU) 是任何計算機的核心部件。它們由許多關鍵組件組成:能夠執行機器代碼的處理器內核、連接它們的總線(特定拓撲在處理器型號、代數和供應商之間有很大差異),以及允許更高帶寬和更低延遲內存的緩存訪問比從主存儲器讀取可能的訪問。最后,幾乎所有現代 CPU 都包含矢量處理單元,以輔助高性能線性代數和卷積,因為它們在媒體處理和機器學習中很常見。

https://file.elecfans.com/web2/M00/AA/46/pYYBAGR9OrWASbCGAAUP5l63rlw559.svg

圖 13.4.3 Intel Skylake 消費者四核 CPU。

圖 13.4.3描繪了 Intel Skylake 消費級四核 CPU。它有一個集成的 GPU、緩存和連接四個內核的環形總線。以太網、WiFi、藍牙、SSD 控制器和 USB 等外圍設備要么是芯片組的一部分,要么直接連接 (PCIe) 到 CPU。

13.4.4.1。微架構

每個處理器內核都包含一組相當復雜的組件。雖然各代和供應商之間的細節有所不同,但基本功能幾乎是標準的。前端加載指令并嘗試預測將采用哪條路徑(例如,用于控制流)。然后將指令從匯編代碼解碼為微指令。匯編代碼通常不是處理器執行的最低級別代碼。相反,復雜的指令可以被解碼成一組更底層的操作。這些然后由實際執行核心處理。通常后者能夠同時執行許多操作。例如, 圖 13.4.4ARM Cortex A77 核心能夠同時執行多達 8 個操作。

https://file.elecfans.com/web2/M00/AA/46/pYYBAGR9OriAbuwOAAN_sGZV9l4040.svg

圖 13.4.4 ARM Cortex A77 微架構。

這意味著高效的程序可能能夠在每個時鐘周期執行多條指令,前提是它們可以獨立執行。并非所有單位生而平等。一些專注于整數指令,而另一些則針對浮點性能進行了優化。為了增加吞吐量,處理器還可以在分支指令中同時遵循多個代碼路徑,然后丟棄未采用的分支的結果。這就是為什么分支預測單元(在前端)很重要,以至于只追求最有希望的路徑。

13.4.4.2。矢量化

深度學習非常需要計算。因此,要使 CPU 適合機器學習,需要在一個時鐘周期內執行許多操作。這是通過矢量單元實現的。它們有不同的名稱:在 ARM 上它們被稱為 NEON,在 x86 上它們(最近一代)被稱為 AVX2 單元。一個共同點是它們能夠執行 SIMD(單指令多數據)操作。圖 13.4.5顯示了在 ARM 上如何在一個時鐘周期內添加 8 個短整數。

https://file.elecfans.com/web2/M00/AA/46/pYYBAGR9OrqAbeUuAAEB8P3on_M294.svg

圖 13.4.5 128 位 NEON 矢量化。

根據體系結構的選擇,此類寄存器的長度可達 512 位,最多可組合 64 對數字。例如,我們可能將兩個數字相乘并將它們與第三個數字相加,這也稱為融合乘加。英特爾OpenVino使用這些在服務器級 CPU 上實現深度學習的可觀吞吐量。但請注意,這個數字與 GPU 能夠實現的目標相比完全相形見絀。例如,NVIDIA 的 RTX 2080 Ti 擁有 4,352 個 CUDA 核心,每個核心都可以隨時處理這樣的操作。

13.4.4.3。緩存

考慮以下情況:如上圖 13.4.3所示,我們有一個普通的 4 核 CPU 核,運行頻率為 2 GHz。此外,假設我們的 IPC(每時鐘指令數)計數為 1,并且這些單元啟用了 256 位寬度的 AVX2。我們進一步假設至少有一個用于 AVX2 操作的寄存器需要從內存中檢索。這意味著 CPU 消耗 4×256?bit=128?bytes每個時鐘周期的數據。除非我們能夠轉移 2×109×128=256×109每秒向處理器發送的字節數,處理元素將餓死。不幸的是,這種芯片的內存接口僅支持 20–40 GB/s 的數據傳輸,即低一個數量級。解決方法是盡可能避免從內存加載新數據,而是將其緩存在 CPU 本地。這是緩存派上用場的地方。通常使用以下名稱或概念:

  • 寄存器嚴格來說不是緩存的一部分。他們幫助階段性指示。也就是說,CPU 寄存器是 CPU 可以以時鐘速度訪問而不會造成任何延遲損失的內存位置。CPU 有幾十個寄存器。有效地使用寄存器取決于編譯器(或程序員)。例如 C 編程語言有一個register關鍵字。

  • L1 緩存是抵御高內存帶寬需求的第一道防線。L1 緩存很?。ǖ湫痛笮】赡転?32–64 KB)并且通常分為數據和指令緩存。當在一級緩存中找到數據時,訪問速度非???。如果在那里找不到它們,搜索將沿著緩存層次結構向下進行。

  • 二級緩存是下一站。根據體系結構設計和處理器大小,它們可能是獨占的。它們可能只能由給定的核心訪問或在多個核心之間共享。L2 緩存比 L1 更大(通常每個內核 256–512 KB)并且更慢。此外,要訪問 L2 中的某些內容,我們首先需要檢查以了解數據不在 L1 中,這會增加少量的額外延遲。

  • L3 緩存在多個內核之間共享,并且可能非常大。AMD 的 Epyc 3 服務器 CPU 擁有分布在多個小芯片上的高達 256 MB 的緩存。更典型的數字在 4–8 MB 范圍內。

預測接下來需要哪些存儲元件是芯片設計中的關鍵優化參數之一。例如,建議以正向遍歷內存,因為大多數緩存算法將嘗試提前讀取而不是向后讀取。同樣,將內存訪問模式保持在本地是提高性能的好方法。

添加緩存是一把雙刃劍。一方面,它們確保處理器內核不會缺少數據。同時,它們增加了芯片尺寸,占用了本來可以用于提高處理能力的面積。此外,高速緩存未命中的代價可能很高。考慮最壞的情況,錯誤共享,如圖13.4.6所示。當處理器 1 上的線程請求數據時,內存位置緩存在處理器 0 上。為了獲得它,處理器 0 需要停止它正在做的事情,將信息寫回主內存,然后讓處理器 1 從內存中讀取它。在此操作期間,兩個處理器都在等待。這樣的代碼很可能運行 得更慢與高效的單處理器實現相比,在多個處理器上。這是緩存大小存在實際限制(除了它們的物理大?。┑牧硪粋€原因。

https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OryAdqZbAAHxhIg-NsU869.svg

圖 13.4.6虛假共享(圖片由英特爾提供)。

13.4.5。GPU 和其他加速器

可以毫不夸張地說,如果沒有 GPU,深度學習就不會成功。出于同樣的原因,GPU 制造商的財富因深度學習而大幅增加的說法也十分合理。硬件和算法的這種共同進化導致了這樣一種情況,即無論好壞,深度學習都是更可取的統計建模范例。因此,有必要了解 GPU 和相關加速器(如 TPU)的具體優勢 Jouppi等人,2017 年。

值得注意的是在實踐中經常出現的區別:加速器針對訓練或推理進行了優化。對于后者,我們只需要計算網絡中的前向傳播。反向傳播不需要存儲中間數據。此外,我們可能不需要非常精確的計算(FP16 或 INT8 通常就足夠了)。另一方面,在訓練期間,所有中間結果都需要存儲以計算梯度。此外,累積梯度需要更高的精度以避免數值下溢(或溢出)。這意味著 FP16(或與 FP32 的混合精度)是最低要求。所有這些都需要更快、更大的內存(HBM2 與 GDDR6)和更強的處理能力。例如,英偉達圖靈 T4 GPU 針對推理進行了優化,而 V100 GPU 更適合訓練。

回憶一下圖 13.4.5中所示的矢量化。將矢量單元添加到處理器內核使我們能夠顯著提高吞吐量。例如,在


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>