# Ubuntu 24.04 PyTorch 環境架設
紀錄自己在 Ubuntu 24.04 LTS 安裝 GPU版本 PyTorch 的過程。
## 硬體規格、作業系統
Acer 筆電
* CPU: Intel i3-8130U
* RAM: 12GB
* GPU: Nvidia MX130 2GB VRAM
* 作業系統: Ubuntu 24.04 LTS
## 步驟
### 更新、確認軟體版本
* 先將 Ubuntu 軟體升級,並使用 Nvidia 的驅動程式
* 安裝 pip3、virtualenv
* `sudo apt install python3-pip`
* `sudo apt install python3-virtualenv`
* 終端機輸入 `$ nvidia-smi` 確認顯示卡支援 CUDA 的版本,像是我的顯示卡只支援到 12.4
* 上 [https://pytorch.org/](https://pytorch.org/get-started/locally/) 確認顯示卡 CUDA 版本能支援的 PyTorch,以我的狀況來說可以安裝支援 CUDA 12.4 版本的 PyTorch
### 安裝 CUDA
* 到 [NVIDIA CUDA官網](https://developer.nvidia.com/cuda-12-4-1-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local) 選擇顯示卡支援的CUDA並按照網頁提示的指令下載 `.run` 安裝檔:
* `wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
`
* 用網頁提示的以下指令執行安裝檔時,會先跳出安裝程式偵測到系統有其他驅動程式,根據 [askubuntu.com](https://askubuntu.com/a/1288405),一樣選擇 `[continue]`
* `sudo sh cuda_12.4.1_550.54.15_linux.run
`
* 同意EULA條款後,會出現選單標示將要安裝的套件,同樣根據 [askubuntu.com](https://askubuntu.com/a/1288405),選單中的第一項,安裝程式內附的顯示卡驅動程式我們選擇不裝。
* 安裝結束後會顯示以下訊息:
```
~$ sudo sh cuda_12.4.1_550.54.15_linux.run
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-12.4/
Please make sure that
- PATH includes /usr/local/cuda-12.4/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-12.4/lib64, or, add /usr/local/cuda-12.4/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.4/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 550.00 is required for CUDA 12.4 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
Logfile is /var/log/cuda-installer.log
```
* 上面顯示沒有找到 CUDA 驅動程式,同樣根據 [askubuntu.com](https://askubuntu.com/a/1288405),我們不管它。
* 將 CUDA 路徑加入 `~/.bashrc` 最後面:
* 終端機輸入 `$ nano ~/.bashrc` 打開檔案
* 在檔案最後加上:
```
# set path for Nvidia CUDA 12.4 installation
if [ -d "/usr/local/cuda-12.4/bin/" ]; then
export PATH=/usr/local/cuda-12.4/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
fi
```
### 安裝 cuDNN
cuDNN 似乎只有區分 CUDA 11 與 CUDA 12
* 到 [Nvidia cuDNN 官網](https://developer.nvidia.com/cudnn-downloads) 尋找符合自己作業系統、CPU架構、Linux版本、作業系統版本號、安裝包類型,像是我的[選項](https://developer.nvidia.com/cudnn-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_local)就會產生以下安裝指令:
```
$ wget https://developer.download.nvidia.com/compute/cudnn/9.5.1/local_installers/cudnn-local-repo-ubuntu2404-9.5.1_1.0-1_amd64.deb
$ sudo dpkg -i cudnn-local-repo-ubuntu2404-9.5.1_1.0-1_amd64.deb
$ sudo cp /var/cudnn-local-repo-ubuntu2404-9.5.1/cudnn-*-keyring.gpg /usr/share/keyrings/
$ sudo apt-get update
# 最後一行我選擇符合自己CUDA版本的安裝方式
$ sudo apt-get -y install cudnn-cuda-12
```
* 接著重開機
* 終端機輸入 `$ nvidia-smi` 確認驅動程式有裝
```
~$ nvidia-smi
Wed Oct 30 23:18:41 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.120 Driver Version: 550.120 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce MX130 Off | 00000000:01:00.0 Off | N/A |
| N/A 40C P8 N/A / 200W | 5MiB / 2048MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1973 G /usr/lib/xorg/Xorg 2MiB |
+-----------------------------------------------------------------------------------------+
```
* 終端機輸入 `$ nvcc -V` 確認 CUDA 有裝
```
~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:18:24_PDT_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0
```
* 輸入 `$ /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn` 看 `libcudnn` 有裝好
```
~$ /sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn
libcudnn_cnn.so.9 -> libcudnn_cnn.so.9.5.1
libcudnn_graph.so.9 -> libcudnn_graph.so.9.5.1
libcudnn_engines_precompiled.so.9 -> libcudnn_engines_precompiled.so.9.5.1
libcudnn_ops.so.9 -> libcudnn_ops.so.9.5.1
libcudnn.so.9 -> libcudnn.so.9.5.1
libcudnn_adv.so.9 -> libcudnn_adv.so.9.5.1
libcudnn_engines_runtime_compiled.so.9 -> libcudnn_engines_runtime_compiled.so.9.5.1
libcudnn_heuristic.so.9 -> libcudnn_heuristic.so.9.5.1
```
### 產生 PyTorch 安裝指令
上 [pytorch.org -> get-started](https://pytorch.org/get-started/) 尋找適合自己顯示卡支援的CUDA版本的 Pytorch
我選 Start Locally:
| 項目 | 選擇 |
| ---------------- | -------------- |
| Pytorch Build | Stable (2.5.1) |
| Your OS | Linux |
| Package | Pip |
| Language | Python |
| Compute Platform | CUDA 12.4 |
接著會產生以下指令用於安裝 PyTorch,但我們先不急著安裝:
`pip3 install torch torchvision torchaudio`
### 新增虛擬環境並在虛擬環境安裝 PyTorch
```
~$ mkdir DL` # 首先新增專案的工作目錄
~$ cd DL # 移動到該目錄
~/DL$ virtualenv venv # 建立虛擬環境
~/DL$ source venv/bin/activate # 啟動虛擬環境
(venv) ~/DL$
# 這個時候就可以貼上剛剛產生的 PyTorch 安裝指令
(venv) ~/DL$ pip3 install torch torchvision torchaudio
```
在虛擬環境輸入 `python`
```
~/DL$ python
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
>>>
```
如果顯示 `True` 就大功告成,就可以在虛擬環境使用 GPU 執行 PyTorch。
如果要離開虛擬環境就輸入 `deactivate`
```
(venv) ~/DL$ deactivate
~/DL$
```
## 參考資料
軟體安裝包的連結均指向我選擇安裝的選項
* [Start Locally | PyTorch](https://pytorch.org/get-started/locally/)
* [Ubuntu 20.04 LTS, CUDA 11.5.0, NVIDIA 495 and libcudnn 8.0.4](https://askubuntu.com/questions/1077061/how-do-i-install-nvidia-and-cuda-drivers-into-ubuntu/1288405#1288405)
* [在Linux下安裝cuda/cudnn環境](https://hackmd.io/@joshhu/SyZwyhODB)
* [CUDA Toolkit 12.4 Update 1 Downloads](https://developer.nvidia.com/cuda-12-4-1-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local)
* [cuDNN 9.5.1 Downloads](https://developer.nvidia.com/cudnn-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_local)