---
# System prepended metadata

title: 基於Ubuntu安裝nvidia cuda&cuDNN在Anaconda虛擬環境下使用VScode編譯Python

---

> [name=FU-YEN, GUAN-HONG]
> [time=Wed, Jul 24, 2024 4:09 PM]
> 
>
>:school:<font size="2">:Department of Electrical Engineering ,National Yunlin University of Science and Technolog</font><br>
> [color=#8241a8]
> 
# 基於Ubuntu安裝nvidia cuda&cuDNN在Anaconda虛擬環境下使用VScode編譯Python
## 首先本文使用Ubuntu 22.04 可能可以使用24.04版
>>https://releases.ubuntu.com/jammy/
![image](https://hackmd.io/_uploads/Hy5aO7ROC.png)
一開始依據官方流程製作開機，目前官方有給出了兩種方式
一是在winodws使用Rufus將img燒入USB
https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#1-overview
![image](https://hackmd.io/_uploads/HJoncX0uC.png)
另一種是本文使用的[balenaEtcher](https:/https://etcher.balena.io//)
兩者都是官方提供，可以自由選擇建置開機碟
https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview
![image](https://hackmd.io/_uploads/BJ-3nmCO0.png)
製作好開機碟後接上電腦進入BIOS將開機USB flash優先順序或是優先權調成第一個
重新開機進入開始安裝步驟，由於網路上許多分享安裝流程此處不再贅述。

<font color="#FF0000">建議在安裝系統時就可以先連線網路</font>



# 系統基本設定
安裝完成後會進入到桌面，照理說桌面會只有一個Home
此時我們只裝好了最"<font color="#FF0000">基本</font>"的作業系統（OS）
要有個概念如果以前上課有用過任何的指令，如make,python,gcc
或是某些tools：dpkg，vcs，vim，gedit更多諸如此類的狀況。
不會是現在安裝完作業系統就應該要可以用的
因此我們要開始安裝本次目標需求的套件
本次目標是使用極為常見的IDE由微軟發行的VScode來作為編譯
如果有自己習慣的IDE也可以自行找尋安裝，假設"只是"要做python
編譯的話其實可以使用Pycharm。
## 硬碟切割
Ubuntu 22.04 提供UI界面讓我們自行分割想要的大小，想使用指令分割的可以參考這篇文章
>Reference:https://hackmd.io/@jimmy801/linux_mount[color=#e85fd5]

本次目標切割/dev/nvme1n1p1
![image](https://hackmd.io/_uploads/HJii040uA.png)
Computer是在系統安裝選擇的主要碟，他在你安裝時就可以分割了，也可以等等經磁碟UI工具切割


| 自行設定磁碟標籤| 可用大小/總共大小 | 被系統自動掛載的名稱 |
| -------- | -------- | -------- |
| 系統碟     | 1.6/2.0     | root   |
| 切割時系統需求生成表頭  | ？？？     | /dev/nvme1n1p1   |
| 實際切割出來大小     | 1.6/2.0     | /dev/nvme1n1p2   |
| HDD     | 2.0/2.0     | /dev/sda1   |

當你將目標硬碟裝入主機板的插槽時，在22.04或24.04版應該會自動掛載，以前的不清楚，<font color="#FF0000">如果沒有出現就依照上面前人的方式指令切割並掛載</font>。

進入要切割的硬碟空白處右鍵點擊properties
![image](https://hackmd.io/_uploads/rJ0qGH0uA.png)
Open in Disks
![image](https://hackmd.io/_uploads/H16tGBAOA.png)
Volumes下面的圖是目前整個硬碟的分割使用狀況
![image](https://hackmd.io/_uploads/rJCafHRu0.png)
左邊會顯示你目前的儲存裝置名稱，點擊你要切割的位置，在點擊齒輪
![image](https://hackmd.io/_uploads/rkNb4H0dC.png)
Edit Partition可以編輯這塊的標籤Name輸入你想要的區塊名稱，到時候切出來這塊就會是這個名子，常見的就是sda1、sda2、sdb1這類。
![image](https://hackmd.io/_uploads/Hy0NEB0O0.png)
Edit Filesystems這個就是你可以自訂名稱，字面上的意思。
![image](https://hackmd.io/_uploads/HJ34HSAuA.png)
Resize可以改變磁碟區的大小，也就是容量的大小，通常是先format後再做，不過現在的作業系統也可以將切割後的在壓縮出空間來配置
![image](https://hackmd.io/_uploads/BkDkUB0u0.png)
設置好空間後點擊進去SSD空間內建立新資料夾在刪除，如果可以上都做完就表示恭喜成功掛載了。

# 系統更新
## linux套件管理
在ubuntu系統內經常使用套件，所以我們會使用apt指令下載
乾淨的作業系統必須更新套件下載軟體
![image](https://hackmd.io/_uploads/BkyevBRuR.png)
更新到系統支援的最新版你後面要下載的資源才會被找到
## 基本套件安裝
安裝文件編輯軟體
sudo apt-get install vim

sudo apt-get install gedit

CPU監控軟體
sudo apt-get install htop


# 安裝虛擬環境以及IDE編輯器
## 安裝Anaconda虛擬環境

Anaconda 是一套可以在作業系統內建立虛擬環境的程式
首先在官網下載安裝檔
![image](https://hackmd.io/_uploads/rkYmMyHK0.png)
右側輸入信箱後Submit進入下載頁面
![image](https://hackmd.io/_uploads/rJT49yUFC.png)
按下Download Now開始下載
![image](https://hackmd.io/_uploads/rJO4j1LFA.png)
### 開始安裝Anaconda
sh Anaconda3-2024.06-1-Linux-x86_64.sh
![image](https://hackmd.io/_uploads/HJwvjJUtR.png)
按下Enter
![image](https://hackmd.io/_uploads/rJ0121LKR.png)
一直Enter到底
![image](https://hackmd.io/_uploads/rkzzhyIKR.png)
輸入yes
![image](https://hackmd.io/_uploads/rkTPny8tR.png)
這邊可以更換安裝的位置，輸入Enter直接預設
![image](https://hackmd.io/_uploads/rkTYnk8K0.png)
這邊輸入yes，可以在ubuntu系統的~/.bashrc自動初始虛擬環境的path（建議使用）
![image](https://hackmd.io/_uploads/rJEmgWUY0.png)
以上都完成開啟terminal，左側出現base就是完成了設定，假使沒有出現的話輸入reboot重開機，再試一次看看。
![image](https://hackmd.io/_uploads/rJoV7ZIKA.png)
### 虛擬環境建立

conda create \--name test python==3.9

conda create \--name \[虛擬環境名稱] python==\[版本號] 沒輸入號碼自動安裝目前系統支援之最新版
下完指令之後會詢問要不要建立環境，輸入y
![image](https://hackmd.io/_uploads/B18MSWLY0.png)
![image](https://hackmd.io/_uploads/HJ7SIWIF0.png)
conda env list
這個指令可以看到目前系統中建立的全部虛擬環境，有\*的是目前使用中的
![image](https://hackmd.io/_uploads/Bke_2ZLt0.png)

conda remove -n test --all
conda remove -n ENV_NAME --all
刪除所有環境安裝過的任何套件包(這個刪除法會刪除conda也安裝過的套件)
![image](https://hackmd.io/_uploads/Hk7xyM8KR.png)

conda env remove -n test
移除後可以下指令檢查剩下的環境（只刪除虛擬環境）
conda env list test
![image](https://hackmd.io/_uploads/r1CVeGIYR.png)
![image](https://hackmd.io/_uploads/rJ3OlG8KR.png)

完成後輸入
conda activate test
![image](https://hackmd.io/_uploads/HyvKU-LF0.png)
恭喜，左側出現建立的虛擬環境名稱就是成功安裝了
接著更新pip套件包
pip install -U pip
![image](https://hackmd.io/_uploads/ry5Xo-8YR.png)

pip install -U setuptools
更新解包程式的套件
![image](https://hackmd.io/_uploads/SkLIZGLtA.png)
這樣就完成整個環境的基本建立了

## 安裝VScode IDE

到VScode 網站下載.deb檔案包
![image](https://hackmd.io/_uploads/rk9gZQUYA.png)

$ sudo dpkg -i [檔案名稱.deb]

sudo dpkg -i code_1.91.1-1720564633_amd64.deb

![image](https://hackmd.io/_uploads/BkMYzmUtC.png)
按下左上角的Activaties->搜尋VScode點擊執行
可以在左側欄右鍵VS釘選在左側欄
![image](https://hackmd.io/_uploads/SyvXX78YR.png)
`` Ctrl+` ``可叫terminal ，如果虛擬環境安裝正確，可以看到跟ubuntu的terminal一樣左側有目前環境狀態。

![image](https://hackmd.io/_uploads/HkIII7IYR.png)

到這邊為止已經安裝好作業系統、虛擬環境以及編譯器了

> Reference:https://www.arthurtoday.com/2009/12/ubuntu-deb.html


# Nvidia 加速套件完整安裝
由於不知道當看到這篇文章的人前面是不是有做了安裝並且失敗了，或是從頭到尾開始安裝的，因為成功的也不會來翻這篇文章，所以依照網路上的方式將所有安裝的東西移除，注意此引用方式可能不一定移除乾淨，請多找幾篇多移除一些，因為接下來的安裝可能會被殘留的檔案卡住，導致無法安裝或使的系統更多殘留。
```
dpkg -l | grep -i nvidia

sudo apt-get remove --purge nvidia* 

sudo apt-get remove --purge cuda* 

sudo apt-get remove --purge libnccl* 

sudo apt-get remove --purge libnvidia* 

sudo apt remove --purge libcudnn* 

sudo apt-get autoremove nvidia*

```
>Reference:https://gist.github.com/jbohnslav/1867e9e3b78a192e4ebc3654929e2aa5
> [color=#8241a8]

## nvidia toolkit 安裝
gcc降版本 因為22.04不支援gcc7的版本因此需要降版本，
cd到/usr/bin下，使用指令:
```
ls /usr/bin/gcc*
ls /usr/bin/g++*
```
會列出所有的gcc與g++的版本，如果沒有需要的版本手動安裝，例如gcc8
```
sudo apt install gcc-12 g++-8
```
然後就是切換，首先將gcc12與g++12添加入alternatives
```
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 100
```
OK,现在就是gcc,g++都是8了，如果gcc7和gcc8都是100的优先级时，我们可以使用下面命令選擇版本
```
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
```

接著添加apt sudo vim /etc/apt/sources.list
在最後面添加
```
#stable add by , in order to install g++7
deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe
```
更新apt
```
sudo apt update
```
最後重新安裝gcc7 gcc++
```
sudo apt install gcc-7 g++-7
```
查看gcc版本
```
gcc -v
```
### Install NVIDIA drivers

先更新系統套件安裝包

sudo apt update && sudo apt upgrade

移除先前安裝過或安裝失敗的殘留檔<font color="#FF0000">(重要)</font>

sudo apt autoremove nvidia* \--purge

### 查看Ubuntu支援的drivers

ubuntu-drivers devices

### 安裝 install the NVIDIA driver

>Reference:https://gist.github.com/denguir/b21aa66ae7fb1089655dd9de8351a202

這邊可以找到distro non-free recommended，建議安裝有出現這行的版本
![image](https://hackmd.io/_uploads/Byqvg4IKC.png)

sudo ubuntu-drivers autoinstall

依據上面的建議安裝版本，自行調整安裝
```
sudo apt install nvidia-driver-535

reboot
```
Reboot & Check


重啟後輸入以下指令
```
nvidia-smi
```
![image](https://hackmd.io/_uploads/HJ-1FzCt0.png)

**注意:這裡的cuda版本(CUDA Version)為最高支援版本，並非當前安裝版本!**


## Install CUDA drivers
更新套件包

sudo apt update && sudo apt upgrade

### Install CUDA toolkit
https://zh.wikipedia.org/zh-tw/CUDA
![image](https://hackmd.io/_uploads/H1z134xV1l.png)

```
sudo apt install nvidia-cuda-toolkit
```
確保環境變數設置正確應該確保在 .bashrc中設置了正確的環境變數
```
export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
```
保存並運行以下命令使更改生效
```
source ~/.bashrc 
```
### Check CUDA install

nvcc \--version

### Install cuDNN
下載 cuDNN .deb file

到tensorflow 官方網站檢查自己的加速卡套用哪個版本
![image](https://hackmd.io/_uploads/HyE6YzAYA.png)


>https://www.tensorflow.org/install/source

接著到cuDNN官網下載對應系統版本的.deb檔
![image](https://hackmd.io/_uploads/H1uGqM0Y0.png)

>https://developer.nvidia.com/rdp/cudnn-archive

確認版本的指令
nvcc --version

## Install cuDNN

### 方法一
進入到下載好的.deb檔路徑，這邊其實是可以雙擊檔案安裝的，看自己習慣
sudo dpkg -i ./<filename.deb>
sudo cp /var/cudnn-<something>.gpg /usr/share/keyrings/

自行調整自己安裝的版本，本次4090對應的是cuDNN 8.9

sudo apt update
sudo apt install libcudnn8
sudo apt install libcudnn8-dev
sudo apt install libcudnn8-samples

### 方法二
nvidia cudnn網站
https://developer.nvidia.com/rdp/cudnn-archive
![image](https://hackmd.io/_uploads/ryFicVxEyx.png)
解壓縮指令
```
tar zxvf 檔名.tar
```
複製文件到cuda include 跟lib64
添加讀取權限
```
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
```
### 驗證是否成功安裝
搜尋 cudnn.h 文件
```
sudo find / -name cudnn.h
```
查看 cudnn.h 文件的內容
```
cat /usr/local/cuda/include/cudnn.h | head -n 20
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
```
檢查是否有 cuDNN 加速
在 TensorFlow 中，當 GPU 被使用且 cuDNN 可用時，會顯示這樣的訊息：
```
2024-12-06 16:12:58.792503: I tensorflow/core/platform/cuda/cuda_dnn.cc:389] Loaded cuDNN version 8.1.1
```
清理不必要的 cuDNN版本果您確定只使用 CUDA 11.4 版本，您可以選擇刪除舊版本的 cuDNN（例如與 CUDA 10.0 相關的 cuDNN），這樣可以避免混淆和版本衝突。
```
sudo rm -rf /usr/local/cuda-10.0
```
```
import tensorflow as tf
a = tf.test.is_built_with_cuda()
b = tf.test.is_gpu_available(
    cuda_only=False,
    min_cuda_compute_capability=None
)
print("CUDA Available:", tf.config.list_physical_devices('GPU'))("CUDA available:", a)
print("GPU available:", b)
```
tf.test.is_built_with_cuda()：這個函數檢查 TensorFlow 是否在編譯時啟用了 CUDA 支援。換句話說，這是檢查您安裝的 TensorFlow 版本是否包含 CUDA 支援，而不是檢查當前是否有 GPU 可用。它只檢查 TensorFlow 是否已經編譯過來時支持 CUDA。

tf.test.is_gpu_available(cuda_only=False, min_cuda_compute_capability=None)：這個函數檢查當前系統中是否有可用的 GPU。如果您設置 cuda_only=False，它會檢查是否有 CUDA 驅動支持的 GPU，如果您設置了 min_cuda_compute_capability，則可以檢查 GPU 是否符合最低計算能力要求。該函數返回 True 或 False，告訴您當前是否有可用的 GPU。
這裡的 cuda_only=False 會讓它檢查所有類型的 GPU，包括支持 CUDA 的 GPU。

tf.config.list_physical_devices('GPU')：這個函數檢查並列出所有的 GPU 設備（物理設備），如果您的系統中有可用的 GPU，則會列出它們。返回的列表中將包含物理 GPU 設備的名稱，例如 /physical_device:GPU:0。




> [color=#8241a8]


### Some Debug Issue

Envirment path
https://github.com/tensorflow/tensorflow/issues/34287

GNU GCC Install
https://hackmd.io/@cwhu/BJu1w_64q && https://askubuntu.com/questions/1500017/ubuntu-22-04-default-gcc-version-does-not-match-version-that-built-latest-defaul

tools
https://chatgpt.com/

https://www.cnblogs.com/Tou-ming/p/16134242.html



## 小工具(可選)
# barrier鍵盤滑鼠共用
windows下載網址 https://github.com/debauchee/barrier/releases/download/v2.4.0/BarrierSetup-2.4.0-release.exe
ubuntu下載網址
https://github.com/debauchee/barrier

選擇一台做為服務端 一台做為客戶端

![barrier](https://hackmd.io/_uploads/H1P_EnhZke.png)

左上角barrier 進入change setting 取消勾選 SSL
![ba1](https://hackmd.io/_uploads/BJYwS32-ke.png)

客戶端的伺服器IP填入服務端的IP
![barrier](https://hackmd.io/_uploads/BkZlIn3-Jl.png)

服務端的伺服器設定 拉下來打上客戶端的顯示名稱
![ba2](https://hackmd.io/_uploads/B1Xrw22Z1g.png)
服務端跟客戶端點啟動就可以使用了
![ba3](https://hackmd.io/_uploads/SJVlOn3bkl.png)

## windows遠端ubuntu教學
先到ubuntu電腦，開啟「設定(Settings)」→「分享(Sharing)」
![螢幕擷取畫面 2025-08-08 121307](https://hackmd.io/_uploads/rJEOFem_ee.png)
再點選「遠端桌面(Remote Desktop」→開啟遠端桌面選項
![image](https://hackmd.io/_uploads/r1_oFxmuex.png)
User Name (就是你的登入帳號)，及Password (密碼)
![image](https://hackmd.io/_uploads/SyqhYlQ_ex.png)
windows打上ip及使用者名稱，案連線
![image](https://hackmd.io/_uploads/rkzx5eXuxg.png)
輸入密碼，按下確定
![image](https://hackmd.io/_uploads/ByfWclXOgl.png)


Copyright © 2024 Yen Fu .All Rights Reserved
