我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材

在python裡面使用GPU 3 – 開發GPU程式

GPU運算與CPU運算的不同

下面是GPU 和CPU 之間的一些主要區別:

  • 運算單元:GPU 通常具有數百甚至數千個運算單元,而CPU 通常只有幾十個運算單元。
  • 並行運算能力:由於GPU 具有更多的運算單元,它能夠同時處理更多的數據,因此在並行運算方面具有優勢。
  • 計算能力:在單位時間內,GPU 的計算能力通常要高於CPU。
  • 功耗:由於GPU 具有更多的運算單元,它的功耗通常比CPU 高。
  • 用途:GPU 專門用於圖形處理,通常用於遊戲、視頻播放和圖形設計等任務。而CPU 則是計算機的中央處理器,負責處理各種計算任務。

指定使用的GPU

在程式中使用 GPU 時,需要在執行模型訓練或推理時將運算放在 GPU 上。您可以使用 TensorFlow 的 tf.device 函數指定運算的裝置。例如,您可以將運算放在第一個可用的 GPU 上:

with tf.device('/gpu:0'):
  # 在這裡放置您的運算
  pass

此外,可能需要注意 GPU 記憶體使用量。當您的模型變得越大,可能需要更多的 GPU 記憶體。可以使用 TensorFlow 的 tf.config.experimental.set_virtual_device_configuration 函數設定虛擬裝置配置以指定可用 GPU 的記憶體數量。

開發GPU程式

對開發人員而言,最大的不同就是,GPU運算會需要將資料在入GPU裡面,而當資料在GPU裡面時,我們並沒有辦法直接像當資料在CPU裡面時一樣,可以很方便的使用print來查看裡面的內容。
也因此,針對支援GPU的陣列運算庫,我們可以發現,通常在做陣列運算時,會呼叫相關的方法去做運算,如:

另外在載入資料時,也要注意使用既有可使用GPU載入資料的函數載入資料至正確的GPU上面(例如 tf.data),避免資料頻繁地在GPU和CPU之內轉換

避免資料頻繁地在GPU和CPU之內轉換

要避免資料頻繁地在 GPU 和 CPU 之間轉換,可以考慮以下幾點:

  • 將資料放在 GPU 上:使用 tf.device 函數指定資料所在的裝置。
  • 將運算和資料放在同一個 GPU 上:這樣可以避免資料在 GPU 和 CPU 之間頻繁轉換。
  • 使用高效的數據讀取方式:使用 TensorFlow 的數據讀取功能(例如 tf.data)可以更有效地讀取和轉換數據,並減少磁盤 I/O 的負擔。

更高效的使用GPU

  • 將運算放在 GPU 上:使用 tf.device 函數指定運算的裝置。
  • 設定虛擬裝置配置:使用 tf.config.experimental.set_virtual_device_configuration 函數指定可用 GPU 的記憶體數量。
  • 使用數據平行:將模型的數據分成多個 batch 並同時在多個 GPU 上訓練,可以提升訓練速度。您可以使用 TensorFlow 的 tf.distribute.Strategy API 來實現數據平行。
  • 調整 batch size:適當調整 batch size 可以平衡訓練速度和 GPU 記憶體使用量。

在tensorflow裡面自動最佳化使用GPU

TensorFlow 可以自動偵測可用的 GPU,並將運算自動分配到 GPU 上。要讓 TensorFlow 自動最佳化使用 GPU,您需要:

安裝 NVIDIA 驅動程式和 CUDA Toolkit。
安裝 GPU 版本的 TensorFlow。
在安裝 NVIDIA 驅動程式和 CUDA Toolkit 時,請確保安裝適用於您的 GPU 的版本。您可以在 NVIDIA 網站上查看可用驅動程式的列表。

安裝 GPU 版本的 TensorFlow 時,您需要使用 tensorflow-gpu 套件。您可以使用 pip 安裝:

pip install tensorflow-gpu

安裝完成後,TensorFlow 就會自動偵測可用的 GPU,並將運算自動分配到 GPU 上。您不需要在程式中手動指定運算的裝置。

注意:如果您的系統中沒有可用的 GPU,TensorFlow 會使用 CPU。


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!