環境安裝

      在〈環境安裝〉中尚無留言

Python版本

研究 AI 領域,最忌緯的就是追求新的版本。對於 AI 套件,牽扯到 Python、Cuda、cudnn、Tensorflow、PyTorch 等程式的版本對應,所以不可隨便升級。到 2024/02/10為止,Tensorflow 能支援 GPU 的最高版本為 2.10.1,而且只能使用 Python 2.10.10 及以下的版本。另外 CUDA 11.8 為最穩定沒啥問題的版本,12.0以上的 bug 一大堆。

名詞解說

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

CUDA 是 啟動 nVidia GPU 的函數庫,所以要先安裝 CUDA 才能啟動 GPU。但請注意,如果沒有 nVidia 顯卡,因為沒有安裝顯卡驅動程式,所以 CUDA 無法安裝,請沒有顯卡的人跳過此章節,改用 Google colab。

而 Tensorflow 是一台強大的計算機。Tensorflow 把複雜的計算式傳送給CUDA,然後再由 CUDA 與 GPU 硬体溝通

Python => TensorFlow => CUDA => GPU

上述的流程,我們用 Python 寫指令,將指令傳送給 TensorFlow 。TensowFlow 再判斷是否該使用 GPU,若是的話,就傳送指令給 CUDA,然後由 CUDA 對 GPU 進行控制。

安裝CUDA

CUDA 全名為 Compute Unified Device Architecture (演算設備統一架構),是nVidia主推的演算法,該架構可啟用GPU多核心計算。

底下的安裝,必需具備有nVidia顯卡,且想要啟動GPU時才需要安裝。若無nVidia顯卡,也是可以安裝成功,但沒啥用處就是了。

CUDA Toolkit

由CUDA 編譯器,工具,函數庫,Smaple,CUDA Driver等多項工具組成,是一個工具集的套件包。請由如下網址下載安裝 : https://developer.nvidia.com/cuda-toolkit-archive。 目前最新為 12.1.0 ,但有很多 bug, 所以請下載 11.8 的版本,共有3.0G,請耐心等後。到現在還有些問題,請由如下方式修改。安裝後請在dos模式下輸入 nvcc -V,若有看到版本,即表示安裝成功。

cudnn

專門為深度學習計算所設計的軟件庫。裏面包含了許多的計算函數,如卷積等函數。全名為
nVidia CUDA Deep Neural Network (深度神經網路), 請由如下網址下載
https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/
上述網站需先註冊帳號,登入後,選取 cudnn-windows-x86_64-8.9.7.29_cuda11-archive.zip。請注意,到 2024/02/09 的最新版本是 cudnn 9.0.0,但這個版本無法讓 tensorflow 啟動 GPU,所以一定要選擇 8.9.7.29 這個版本。

下載後,將檔案解開,然後把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)

Tensorflow

學習 TensorFlow 就像在學習 numpy 或 pandas 一樣,有自已的資料格式,也有自已的計算函數跟規則。TensorFlow 可以幫我們計算複雜的數學公式,比如矩陣相乘,微分,損失函數等等,可以將它視為一個科學計算套件。

TensorFlow 計算領域非常廣泛,所以學習之路非常漫長,不像 numpy 或 pandas 幾天就可以學會的。

另外TensorFlow 可指定由CPU執行,或是由GPU執行。通常會使用TensorFlow 來計算的演算法,都是很大量的數字,所以 GPU 的效能會比 CPU 高很多。

TensorFlow是Google維護的一個機器深度學習框架。因為它已被用來尋找新的行星,幫助醫生篩檢糖尿病導致視網膜病變,以預防失明。AlphoGo及Google Cloud Vision 更建立在TensorFlow 之上。TensorFlow完全開放原始碼。

TensorFlow也是目前神經網路使用率最高的框架。而其Keras(凱拉斯)則是支援TensorFlow的高階函數庫,可以用很簡潔的程式碼完成神經網路模型. 下圖為網路上統計各種框架的使用率。

TensorFlow現今已到了第2版本。第1版與第2版本的使用方式完全不同,太多數的網站都是第1版本的教學。此篇以 TensorFlow2為主。

安裝tensorflow套件

tensorflow 自2.1版本開始,pip install tensorflow 就會下載支援 GPU 及不支援 GPU 二個版本。所以不需刻意安裝tensorflow-gpu。當然若刻意安裝 tensorflow-gpu,檔案容量會比較小。

截至 2022/11/30,Tensowflow 最新版本為2.12.1,但 2.11.0 及 2.12.1 有問題,會抓不到 GPU,所以請降版安裝 2.10.1。

真的需要好一點的nVidia顯示卡

啟動GPU的硬体加速功能,可以讓tensorflow加速許多。以顯卡GeForce GTX1050 Ti,CPU為i9-9900K進行測試,GPU 效能會比 CPU 快上三倍以上。

未啟用GPU:
    CPU佔用16核100%的資源, GPU佔用 0%

啟用GPU :
    CPU佔用16核 20%的資源, GPU佔用40%

換個比較高等級的nVidia顯卡是比較好的選擇,只是高等一點的顯卡動輒 2萬多台幣,RTX3080Ti更是要到五萬台幣,比一台陽春配備的電腦還貴。

偵測硬体設備

底下可以印出機器的硬体設備。set_visible_devices()的參數 devices=gpus[0],是使用第0塊顯示卡。若要多塊顯示卡一起用,可以下達 devices=gpus[0:2](使用 0,1二塊顯卡,不包含2)。

底下代碼中 device_type=’GPU’ ,參數名 “device_type” 可以不用打,直接輸入 ‘GPU’即可。因為list_pyhsical_devices(device_type=None) 只有接收一個參數而以,預設值為None。

gpus = tf.config.list_physical_devices(device_type='GPU')
cpus = tf.config.list_physical_devices('CPU') #device_type可以不用打
print(gpus, cpus)
#限定使用GPU
tf.config.set_visible_devices(devices=gpus[0], device_type='GPU')
結果 :
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')] [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]

限定使用CPU或GPU

tf.config.set_visible_devices()可以限定只使用CPU,或使用GPU。若沒調用此方法,預設會啟動 GPU。

cpus = tf.config.list_physical_devices (device_type='CPU')
tf.config.set_visible_devices (gpus[0], device_type='GPU') #只使用GPU
tf.config.set_visible_devices (devices=cpus[0]) #只使用 CPU, device_type預設是'CPU'

zlibwapi.dll 錯誤

nVidia 有很多的bug,如果出現 Could not locate zlibwapi.dll. Please make sure it is in your library path!,這是新版的 bug,請先下載 http://www.winimage.com/zLibDll/zlib123dllx64.zip,解開後將 zlibwapi.dll複製到C:\Windows\System32位置下面。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *