名詞解說
CPU
CPU: Central Processing Unit,就是一般電腦的中央處理器。
GPU
Graphics Processing Unit,就是俗稱的顯示卡。
CPU 控制整台電腦的程式運作,當然也會進行數字的運算。CPU 的頻率決定其效能,效能是指在 1 單位時間內所能執行的指令數量。
比如說,A 這個 CPU 在1 秒鐘(1 個單位時間) 可以執行 10 億個指令(1G),而 B 這個 CPU 1 秒鐘可以執行1 億(0.1G) 個指令,那麼 A的效能就比B高出 10 倍效能。
CPU 是一個很強大的半導體晶片,每個指令花不到 1 奈秒。但 AI 的演算,動則多達好幾萬億個計算,再怎麼厲害的 CPU 都會被卡死拼命的計算。
為了解決上述的問題,使用 1000 顆 CPU 來幫忙計算,當然就可以輕易解決。不過 CPU 造價昂貴,這種方式並不切實際。
那麼如果用 “簡易型CPU”,也就是把複雜的 CPU 功能閹割掉,只剩下計算的功能,然後一次安裝 3000 多顆 “簡易型CPU”,是否能解決上述的問題呢。
答案是肯定的。也就是說,在電腦上安裝 3000 台簡易計算機。GPU 就是上千台簡易的計算機,也就是 nVidia 老黃所說的多核彈攻略。
把高階顯卡說成是上千台算易型計算機,確實有點過份,因為要在那麼小的晶片上安裝這麼多台計算機真的是高科技。但在學習路程上,上千台簡易型計算機是最佳的理解方式。
CUDA 、Tensorflow 、PyTorch
CUDA 全名為 Compute Unified Device Architecture (演算設備統一架構),是 nVidia 主推的演算法,該架構可啟用 GPU 多核心計算。CUDA tool kit是啟動 nVidia GPU 的函數庫。
cudnn 全名為 nVidia CUDA Deep Neural Network (深度神經網路),專門為深度學習計算所設計的軟件庫,裏面包含了許多的計算函數,如卷積等函數。
而 Tensorflow、PyTorch 可以想像成是一台強大的計算機。Tensorflow 由 Google 所開發,PyTorch 則是由 Facebook 開發,他們把複雜的計算式傳送給 CUDA,然後再由 CUDA 與 GPU 硬体溝通。
Python => TensorFlow => CUDA => GPU
上述的流程,我們用 Python 寫指令,將指令傳送給 TensorFlow 。TensowFlow 再判斷是否該使用 GPU,若是的話,就傳送指令給 CUDA,然後由 CUDA 對 GPU 進行控制。
各種版本說明
到 2024/09/06 為止,各個版本如下
ubuntu : 目前最新版本為 24.04,系統預設 python 3.12.3
cuda : 目前最新的版本為 cuda 12.6。而且僅cuda 12.5 以上才支援 ubuntu 24.04
tensorflow : 在 Windows 中,只有 tf 2.10.1 及稍早以前的版本支援 GPU,之後的版本都不支援 GPU,但 Linux 則是全面都支援 GPU。
Python : 目前最新為 Python 3.12.3,但只能安裝 tf 2.16.0 及 2.17.0。若要安裝 tf 2.10.1,則必需把 Python 降到 3.9 及以下。
Windows 總結
在 Windows 下要使用 tensorflow 啟動 GPU,根本就是死路一條,無解。
唯一的一條路就是 Python 3.9 => Cuda 11.8 => Tensorflow 2.10.1
Linux 總結
在 ubuntu 下要使用 tensorflow 啟動 GPU,比較沒問題
ubuntu 24.04 => Python 3.12.3 => Cuda 12.6 => Tensorflow 2.17.0
是否需要安裝CUDA
在 ubuntu 下,tensorflow 全面支援 GPU,所以在系統下安裝 Cuda/cudnn 還是有其需要性,請參照本人所撰寫的 ubuntu 安裝 Cuda
在 Windows 下,tensorflow 2.10.1 以後的版本已全面放棄支援 GPU 。而 PyTorch 安裝時會自行下載能啟動 GPU 的 cuda 版本。
綜合以上二點,在 Windows 下安裝 Cuda/Cudnn 好像沒啥意義。但是別忘了,這世界不是只有 Tensorflow 或 PyTorch,還有其它的框架,比如 dlib 人臉辨識就需要 Cuda ,所以 Cuda/cudnn 一定要安裝。請參考 Dlib 人臉辨識 說明。
Tensorflow 為何停止支援 Windows GPU
TensorFlow’s development community has focused on improving support for Linux environments, where the ecosystem for deep learning frameworks and GPU acceleration is more mature and robust. The majority of high-performance computing and research in machine learning is done on Linux, and many GPU drivers and libraries are better supported there.
上述的意思,本人稍作翻譯~~
機器學習的高效計算及研究大多數都以 Linux 為主,而大部份的 GPU 驅動程式及函數庫對 Linux 有更好的支援,所以 Linux 在深度學習及 GPU 加速運算的生態系統更加成熟及廣泛,這也是為什麼 Tensorflow 開發社群要花更多的精力改善對 Linux 環境的支援。
本人推測
這可能是 Google 要逼迫微軟 Windows 系統退出 AI 領域所採用的商業賤招。
但因 PyTorch 的橫空出世,再加上 nVidia 更不可能讓 Google 任意宰割,所以後續發展精彩可期。
就讓我們站在高崗上,欣賞這些梟雄們自相殘殺血流成河吧!!
ps1 : WSL 是 Windows Subsystem Linux,在 Windows 上啟動模擬器執行 Linux,其實就是 Linux
ps2 : 無第二台電腦進行實際安裝 Linux 的人,是可以玩看看 WSL,因為支援硬体顯卡。不過本人徹底研究過,發現它真的是爛爛的。
安裝CUDA
CUDA Toolkit
請由如下網址下載安裝 : https://developer.nvidia.com/cuda-toolkit-archive。 如果是 Python 3.8/3.9, 請下載 11.8 的版本,如果是 Python 3.10及以上,可以選最新的版本, 2024/09/01 最新的 cuda 版本為 12.6。共有3.0G,請耐心等後。安裝後請在dos模式下輸入 nvcc -V,若有看到版本,即表示安裝成功。
cudnn
專門為深度學習計算所設計的軟件庫。裏面包含了許多的計算函數,如卷積等函數。全名為
nVidia CUDA Deep Neural Network (深度神經網路), 請由如下網址下載
https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/
。
請注意,不論是在 Windows 還是 Linux,cudnn 8.9 的版本才可以正確執行 GPU,9.0 一直怪怪的。
下載後,將檔案解開,然後把cuda裏的目錄及檔案 copy 到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8 之下
copy到如下位置
測試
安裝好後,可以用如下代碼測試一下.
#pip install tensorflow==2.10.1 import tensorflow as tf gpus = tf.config.list_physical_devices(device_type='GPU') print(gpus)