快轉到主要內容

Ubuntu LTS如何安裝Nvidia顯示卡驅動、CUDA、cuDNN、NVIDIA Container Toolkit套件

分類   Linux系統 Linux使用技巧
標籤   Ubuntu Nvidia
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

適用系統版本:Ubuntu 22.04以上

本文解說如何在Ubuntu LTS以終端機指令安裝Nvidia專有驅動(proprietary driver),以及相關的CUDA、cuDNN、TensorRT、NVIDIA Container Toolkit套件。

一般用戶玩遊戲只要裝完Nvidia閉源驅動即可收工。

要跑3D渲染、神經網路、深度學習的用戶才裝後面的CUDA、cuDNN、TensorRT套件。這些套件都依賴Nvidia閉源驅動,但是不一定要全裝,端看專案需求。

Anaconda請參閱 此篇安裝。

NVIDIA Container Toolkit是為想跑CUDA但又不想裝多重CUDA版本的用戶所設計的容器工具。

0. 前言
#

Ubuntu內建支援Nvidia顯示卡的開源驅動「nouveau」,為Linux社群逆向工程而來,不至於讓電腦開機沒畫面。那為什麼Nvidia官方發表的閉源驅動並非開源軟體,仍建議您安裝?因為nouveau驅動會導致Nvidia顯示卡性能下降,控制風扇失效,並且無法使用Nvidia獨家的加速技術「CUDA」、「NVENC」。欲發揮Nvidia顯示卡全部潛能,安裝Nvidia閉源驅動乃必要之舉。

一切安裝指令以參考資料處的【Nvidia官方文件】為準。

Nvidia官方文件提供的安裝方式主要有四種:

  1. 從tar檔安裝
  2. 下載deb檔匯入PPA安裝(Local)
  3. 套件管理員匯入PPA安裝(Network)
  4. 下載.run檔安裝

本文採用「3.套件管理員匯入PPA安裝」,這樣就不需要去官網註冊帳號下載安裝檔了,Nvidia驅動會自動跟著系統套件管理員更新,裝錯版本也比較好解除安裝。

儘管Ubuntu本身的套件庫有Nvidia驅動相關的套件,但是有的是舊版本,所以我們使用Nvidia官方維護的套件庫取得最新驅動套件。

要使用Tensorflow前務必參閱 官網,了解對應的CUDA版本才安裝。

1. 安裝Nvidia專有驅動
#

1.1. 桌上型電腦與伺服器
#

  1. 想知道目前電腦是使用哪一個主顯示卡,使用指令:glxinfo | grep OpenGL查看,應會印出Nvidia。

  2. 若有Nvidia顯示卡,Ubuntu預設會載入開源的nouveau驅動,用指令sudo lshw -C display確認,driver區段會顯示"nouveau"

  3. 欲使用CUDA技術,必須安裝專有的Nvidia驅動程式。先將nouveau套件與舊版Nvidia套件刪除:

sudo apt update
sudo apt upgrade
sudo apt purge *nvidia*
  1. 接著使用ubuntu-drivers list指令列出目前Nvidia顯示卡可用的驅動版本。例如GTX 1050Ti會看到以下畫面。

  2. 如果您沒有要使用CUDA,那就讓Ubuntu自動挑選適合的版本安裝;要使用CUDA請注意挑選正確的驅動版本。

# 讓Ubuntu自動挑選推薦的驅動版本
sudo ubuntu-drivers autoinstall

# 手動指定版本,填入要安裝的Nvidia驅動版本號。
sudo apt install nvidia-driver-525
  1. 安裝後nouveau應會自動加入黑名單禁止載入。接著重開機,用指令sudo lshw -C display確認是否安裝成功,driver區段應會顯示"nvidia"

  2. 輸入nvidia-smi指令應會看到目前的驅動狀況

1.2. 雙GPU筆電
#

有Nvidia顯示卡的筆電安裝顯示卡驅動的方式跟桌上型電腦一樣。

不過,像Intel+Nvidia這種的雙GPU筆電,即使裝了Nvidia驅動也可能繼續用Intel的GPU渲染3D,導致3D性能低下。

此時可以使用prime-select指令,指定用Nvidia顯示卡負責渲染作業。

sudo prime-select nvidia

重開機後再使用指令:glxinfo | grep OpenGL查看主顯示卡為何。

2. 安裝CUDA
#

CUDA (Compute Unified Device Architecture),在做深度學習、Blender渲染時常用到的技術。

  1. 加入的Nvidia官方PPA,裡面含有各種CUDA版本。
# 使用環境變數os指定系統版本,比如我目前是Ubuntu 22.04
os=ubuntu2204

# 使用環境變數arch指定系統架構
arch=x86_64

# 取得keyring
wget https://developer.download.nvidia.com/compute/cuda/repos/$os/$arch/cuda-keyring_1.0-1_all.deb

# 安裝keyring
sudo dpkg -i cuda-keyring_1.0-1_all.deb
  1. 安裝最新的CUDA,重開機。如果Nvidia驅動版本對不上,在安裝CUDA的過程會自動跟著升級。
sudo apt update
sudo apt install cuda nvidia-cuda-toolkit

# 或是 sudo apt-get install cuda-12-1
  1. nvcc --version指令確認CUDA版本

  2. 如果顯示Command nvcc not found,則將路徑加入至~/.bashrc

export PATH=/usr/local/cuda-12/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  1. 再嘗試檢查一次版本
source ~/.bashrc
nvcc --version
如何安裝舊版本CUDA

如果裝了CUDA 12.1,才發現你需要的其實是CUDA 11.8,那就將其移除重裝。

  1. 刪除目前已安裝的Nvidia驅動、CUDA、cuDNN
sudo apt purge *nvidia*
sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"
sudo apt autoremove
  1. 安裝舊版CUDA,會一併把對應的Nvidia驅動一起裝回來。
os=ubuntu2204
arch=x86_64
wget https://developer.download.nvidia.com/compute/cuda/repos/$os/$arch/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install cuda-11-8
  1. 編輯~/.bashrc,將PATH修改為指向CUDA 11.8的路徑
export PATH=/usr/local/cuda-11/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  1. 確認CUDA版本是否為11.8
source ~/.bashrc
nvcc --version

3. 安裝cuDNN
#

CUDA Deep Neural Network (cuDNN)

安裝cuDNN前務必檢查CUDA版本是否正確。

  1. 加入Ubuntu 22.04的Nvidia官方PPA
OS=ubuntu2204
wget https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/cuda-${OS}.pin 
sudo mv cuda-${OS}.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/${OS}/x86_64/ /"
sudo apt-get update
  1. 安裝libfreeimage
sudo apt install libfreeimage-dev
  1. 安裝cuDNN執行時與範本。libcudnn8後面的數字應為cuda12.0cuda11.8
# 如果找不到套件請用apt search libcudnn8查找其確切版本號碼

# CUDA 12.0
sudo apt-get install libcudnn8=8.8.0.121_1.0-1+cuda12.0
sudo apt-get install libcudnn8-dev=8.8.0.121-1+cuda12.0

# CUDA 11.8
sudo apt-get install libcudnn8=8.8.0.121_1-1+cuda11.8
sudo apt-get install libcudnn8-dev=8.8.0.121-1+cuda11.8
  1. 編譯執行官方範本,測試cuDNN安裝是否成功
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd  $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
  1. 看到Test passed!代表安裝成功。

4. 安裝TensorRT
#

TensorRT是Nvidia推出的深度學習推理平台。

TensorRT目前還沒有PPA可以直接用,必須註冊Nvidia帳號下載匯入。

  1. Nvidia官網註冊帳號,登入,勾選同意授權條款,點選Ubuntu 22.04的deb檔下載

  2. 安裝TensorRT

sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-8.5.2-cuda-11.8_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2204-8.5.2-cuda-11.8/nv-tensorrt-local-A4462430-keyring.gpg /usr/share/keyrings/

sudo apt-get update
sudo apt-get install tensorrt

5. 安裝NVIDIA Container Toolkit
#

這是設計給Docker容器用的Nvidia工具,使容器可以使用CUDA計算。

即使宿主機沒有安裝CUDA套件,容器內照樣可以使用CUDA計算。

  1. 先安裝 Docker

  2. 加入Nvidia的套件庫

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
  1. 安裝NVIDIA Container Toolkit
sudo apt-get update
sudo apt-get install nvidia-container-toolkit
  1. 向Docker註冊Nvidia裝置
sudo nvidia-ctk runtime configure --runtime=docker
  1. 重新啟動Docker
sudo systemctl restart docker
  1. 測試是否正確安裝,應該會印出Nvidia顯示卡的資訊。
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

參考資料
#

相關文章

Ubuntu 22.04如何連接Apple Airpods Pro藍牙耳機並查看電量
分類   Linux系統 Linux使用技巧
標籤   GNOME Ubuntu KDE Plasma
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Arch Linux
Linux如何設定開機自動執行應用程式
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Arch Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。