iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
AI & Data

PyTorch 生態鏈實戰運用系列 第 13

[Day13] 資料預處理機制與優化 - 硬體篇

  • 分享至 

  • xImage
  •  

前言

本日的文章打算來講一些資料讀取的機制以及優化的方式。

資料流與硬體

先上一個目前所採用的Training/Validation,在每一次進行時的資料流簡易流程圖。

主要的流程,大概可以分為以下幾個步驟:

  1. 影像檔從HDD(硬碟)讀進RAM (通常還會包含image decode)
  2. 在CPU與RAM之間進行資料前處理
  3. 把處理後的資料送到GPU Memory
  4. 利用已經送到GPU Memory內的資料,使用GPU Cores進行模型的運算

不同的硬體在其中扮演的角色可以得到不同的優化:

  • Storage的效能影響1. (e.g. SSD > HDD)
  • CPU與RAM的效能影響2. (e.g. DDR4 > DDR3)
  • GPU接口的支援規格影響3. (e.g. NV-LINK > PCIE 4.0 > PCIE 3.0)
  • GPU的效能影響4. (e.g. RTX 3090 > GTX 1080)

因此,硬體的選用($$$$$$$)與實驗的效率,有很直接的關聯!但卻也不是唯一。

各硬體間的速度

接下來讓我們一項一項的介紹以及給一些例子:

  • Storage: 所謂的硬碟,種類的差異跟速度差很大 參考
    • HDD (Hard Disk Drive) : 或指傳統的機械硬碟,讀取大約落在50M - 150M/s,各家有一些不同的機制會有各自的優化方式。
    • SATA SSD (Solid State Drive):以SATA為傳輸界面的SSD,速度一般落在 500M/s左右。
    • NVMe SSD:以PCIE作為傳輸界面的SSD,速度可達2000M/s
  • CPU(Central Processing Unit):就是中央處理器,一般前處理包含image的decode跟各種padding轉換等,大部分都在這裡做(也有部份處理可以在GPU內直接做),CPU的水非常深,不適合做過多著墨。跟做機械學習有關,需要注意的是的點如下:
    • 架構:最常見的主要分x64跟arm,而x64又分intel跟AMD。主要差距在底層指令集的支援以及一些基礎的開發函式庫的選擇上。
      • 例如,APPLE的M1就是屬於ARM,所以有一些套件在換了新版的MACBOOK以後發現安裝不是很順遂就是屬於這種架構上的差異。
    • 時脈:跑單一程式時的時脈,正常情況是數值越高越快。
      • 例如,Intel Core i9-12900 2.4 GHz > Intel Core i7-12700 2.1 GHz
    • 核心數/執行緒數:一般而言是時脈跟執行緒數越多越好,表示可以同時跑類似功能的程式。
      • 例如,Intel Core i9-12900 6 Cores, 24 Threads > Intel Core i7-12700 12 Cores, 20 Threads
  • RAM(Random Access Memory):所謂電腦當中的主記憶體,又分:
    • 空間:主記憶體的大小,資料從硬碟decode到進入gpu前一般就都是放在這裡,通常是越大越好。
    • 速度:單位時間處理資料的速度。
      • 例如:DDR4 5100M/S > DDR3 1600M/s
  • GPU:就是顯示卡,模型運算就靠這個,以最廣泛被使用的NVIDIA來說:
    • Cuda Cores : NVIDIA GPU的計算核心,這其實就是gpu適合做Deep Learning的關鍵,由於計算單元很多,比起cpu更適合做大量平行運算的DNN模型,通常越多越好越快,新的架構一般也會比舊的架構快。
    • GPU Memory : GPU自己的記憶體,基本上都要放在這裡才能讓GPU進行計算。通常越大表示模型參數可以越多,Batch Size也可越大。
    • GPU interface : GPU與電腦之前的界面規格,通常不同的規格決定與RAM之間交換資料的速度上限。
      • 例如: NVIDIA自家的NVLink Gen 2 300 GB/s > PCIE 4.0 x4 8GB/s > PCIE 3.0 x4 4GB/s

所以咧?

講這麼多,嘴巴都是泡。其實不外乎就是就是希望做Deep Learning Engineering的人,也可以對所使用的硬體們有更多的認識,進而知道可能會遇到的問題並進一步去解決。

綜合上面所說,舉一些實際可能發生的狀況:

  • 選用了50MB/s的HDD,資料很多,訓練的時候大部分的時間,GPU都在等待I/O結束送東西過來。
  • CPU很慢,資料前處理花太多時間,GPU在等前處理。
  • 模型框架選用太大,GPU記憶體根本塞不下或是Cuda Cores無法在合理的時間內訓練出成果。

以上都是很常見的情形,有了一些硬體的先備知識以後,可以幫助我們解決一些軟體無法解決的問題!

本日小節

  • 寫一寫突然覺得該介紹一下硬體就寫了
  • 個人很rough的介紹,有錯請指正
  • 看不懂只想跑code的可以看下一篇

上一篇
[Day12] Training Log and History
下一篇
[Day14] 資料預處理機制與優化 - 軟體篇 - 優化預處理
系列文
PyTorch 生態鏈實戰運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言