電路板上的 GPU 與運算晶片特寫

← INSIGHTS & PERSPECTIVES | 機器學習

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

開發 Python GPU 程式的完整指南:比較 GPU 與 CPU 運算差異,用 TensorFlow tf.device 指定裝置、管理 GPU 記憶體、避免資料在 CPU 與 GPU 間頻繁轉換,並用 tf.distribute.Strategy 實現多 GPU 訓練加速。

這篇文章整理我在開發 Python GPU 程式時的關鍵觀念:GPU 與 CPU 運算的本質差異、如何在 TensorFlow 中用 `tf.device` 指定運算裝置、為什麼要避免資料頻繁地在 CPU 與 GPU 之間轉換,以及讓 GPU 發揮最大效益的實務做法。

GPU 運算與 CPU 運算有什麼不同?

以下是 GPU 和 CPU 之間的幾個主要區別:

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

對深度學習來說,模型訓練大部分是大量的矩陣運算,正好是 GPU 並行架構最擅長的工作,這也是為什麼 GPU 訓練速度可以比 CPU 快上好幾倍。

如何在 TensorFlow 中指定使用 GPU?

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

```py

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 載入資料的函數載入資料至正確的 GPU 上(例如 `tf.data`),避免資料頻繁地在 GPU 和 CPU 之間轉換。

如何避免資料頻繁地在 GPU 和 CPU 之間轉換?

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

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

資料在裝置之間搬移是 GPU 程式最常見的效能殺手之一——每一次轉換都有固定的傳輸成本,資料量越大、轉換越頻繁,訓練速度就被拖得越慢。

如何更高效地使用 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,你需要:

  1. 安裝 NVIDIA 驅動程式和 CUDA Toolkit。
  2. 安裝 GPU 版本的 TensorFlow。

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

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

```py

pip install tensorflow-gpu

```

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

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

延伸閱讀

常見問題

Q為什麼 GPU 訓練模型比 CPU 快?

GPU 擁有數百甚至數千個運算單元,能夠同時處理大量數據;深度學習的矩陣運算正好是高度並行的工作,因此在單位時間內 GPU 的計算能力通常遠高於 CPU。

Q如何指定 TensorFlow 使用哪一張 GPU?

使用 `tf.device('/gpu:0')` 可以把運算指定到第一張 GPU。也可以搭配 `tf.config.experimental.set_virtual_device_configuration` 限制每張 GPU 可用的記憶體數量。

Q資料為什麼不能一直印出來看?

當資料被載入 GPU 後,就無法像 CPU 上的資料一樣直接用 `print` 查看內容。除錯時需要把資料搬回 CPU,或使用框架提供的除錯工具,這是開發 GPU 程式最主要的習慣差異。

Q沒有安裝 GPU 時 TensorFlow 會怎樣?

如果系統中沒有可用的 GPU,TensorFlow 會自動退回使用 CPU 執行運算,程式不會出錯,只是訓練速度會明顯變慢。

最後更新

2026-08-28(原文發布於 2023-01-03,本文保留原始筆記內容並補上 GEO 結構。)

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2023-01-03