本篇撰寫於 2024/09/07,到目前為止各種所需的版本如下 :
ubuntu : 24.04
Python : 系統預設為 3.12.3
cuda : 最新可支援的版本 12.6
tensorflow : 最新版為 2.17.0
PyTorch : 最新版為 4.1
nVidia driver for Ubuntu 24.04
nVidia 已開放顯卡驅動程式原始碼,open source 的效能跟官網的驅動不相上下,建議安裝 open source driver,目前最新版本為 560.28.03。
安裝指令
sudo apt-get install -y nvidia-open
安裝完記得要手動重新開機,再執行 sudo lshw -C display 就可以看到 driver=nvidia latency=0
監控顯卡
nVidia 顯卡驅動如果安裝成功,可以使用如下指令每秒監控一次顯卡狀態
監控指令
watch -n 1 nvidia-smi
移除 cuda
還沒安裝 cuda 為何就要移除 cuda 呢,這是因為 cuda 一直在更新,所以需先移除舊版,再安裝新的版本。以下指令可移除徹底移除 cuda 套件。
sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"
sudo apt-get remove libcudnn9-cuda-12 libcudnn9-dev-cuda-12 libcudnn8-cuda-12 libcudnn8-dev-cuda-12
sudo apt autoremove
檢查是否移除
ls /usr/local 之後,cuda 的目錄就會被刪除,如果還有 cuda ,請手動刪除
安裝 Cuda for ubuntu 24.04
nVidia Cuda 已開始支援 ubuntu 24.04 ,請到 https://developer.nvidia.com/cuda-toolkit-archive 查看最新版本。本例以 Cuda 12.6.0 說明,安裝指令如下
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-ubuntu2404-12-6-local_12.6.0-560.28.03-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2404-12-6-local_12.6.0-560.28.03-1_amd64.deb sudo cp /var/cuda-repo-ubuntu2404-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda-toolkit-12-6
安裝 Cudnn for ubuntu 24.04
請到 https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/
下載 8.9 for cuda12 的最新版本。
請不要下載 9.0 的版本,因為到目前 2024/09/07 為止 9.0 的版本無法在 tensorflow 啟動GPU
wget https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz tar xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive/ sudo cp -r include/ /usr/local/cuda/include sudo cp -r lib/* /usr/local/cuda/lib64/
設定動態 library 搜尋路徑
Cuda 的動態 librery 在 /usr/local/cuda/lib64裏,請先輸入 sudo vim /etc/ld.so.conf.d/000_cuda.conf,在最後新增如下藍色部份。
/usr/local/cuda/targets/x86_64-linux/lib
/usr/local/cuda/lib64
接下來啟動上述的設定
sudo ldconfig
設定 PATH 變數
最後還需手動設定 PATH 變數,請先輸入 sudo vim /etc/profile,在最後新增如下設定
export PATH=/usr/local/cuda/bin:$PATH
#export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
#export CUDA_HOME=/usr/local/cuda
接下來啟動上述的設定
sudo source /etc/profile
查看 cuda 版本
使用如下指令查看 cuda 版本
nvcc --version
驗証 GPU 是否啟動
請先在 Python 專案下安裝套件
sudo apt-get install python3.12-venv mkdir pytest cd pytest python3 -m venv .venv source ./.venv/bin/activate pip install tensorflow
然後編寫測試程式,vim test.py
import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import tensorflow as tf gpus = tf.config.list_physical_devices(device_type='GPU') print(gpus)
最後執行,python test.py,得到如下的結果就表示硬体 GPU 啟動了
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
蒙地卡羅測試
執行如下的蒙地卡羅程式,可以看到 GPU 全速在執行。
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf batch=100_000_000 epochs=2000 incircle=0 #@tf.function def cal(): points=tf.random.uniform([2, batch], dtype=tf.float32) dist=tf.sqrt(tf.square(points[0])+tf.square(points[1])) count=tf.where(dist<=1).shape[0] return count # cpus = tf.config.list_physical_devices (device_type='CPU') # tf.config.set_visible_devices (devices=cpus[0]) #只使用 CPU, device_type預設是'CPU' for e in range(epochs): count=cal() incircle+=count area=incircle /((e+1)*batch) pi=area*4 print(f'epoch:{e+1}, pi={pi}')
上述程式開始跑時,開啟另一個視窗執行如下指令
watch -n 1 nvidia-smi
就可以看到顯卡的功耗到了 355瓦