> [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