Try   HackMD

Description

某次斷電後,Nvidia Driver 的版本從 525 降回 460,多次重裝 Driver 與重新開機,都沒辦法升級回 525 版,以下筆記紀錄我解決此問題的過程。

OS: Ubuntu 20.04

Steps

  1. 查看是否有任何 Nvidia Package
    ​​​​dpkg -l | grep nvidia
    
  2. 將這些 Package 一個不留的刪光
    ​​​​sudo apt-get remove --purge -y '*nvidia*'
    
  3. 反覆前兩步驟,若有殘留的套件則手動刪除
    • e.g. sudo apt-get remove --purge nvidia-driver-525-server
  4. 檢查是否有程序正在使用 Nvidia 裝置
    ​​​​sudo lsof '/dev/nvidia*'
    
  5. 發現有 Xorg 正在啟用圖形化介面,把他關掉
    ​​​​sudo systemctl isolate multi-user.target
    
  6. 執行 Nvidia 官方的刪除程式
    ​​​​sudo nvidia-uninstall
    
  7. 刪除多餘的殘留套件
    ​​​​sudo apt autoremove -y
    
  8. 檢查 DKMS 的 Nvidia 狀態
    • 安裝 DKMS 套件:
      ​​​​​​​​sudo apt-get install -y dkms
      
    • 檢查 DKMS 狀態:
      ​​​​​​​​sudo dkms status
      
  9. 刪除 DKMS 底下所有與 Nvidia 相關的資料夾,例如:
    ​​​​ls /var/lib/dkms
    ​​​​sudo rm -rf /var/lib/dkms/nvidia-srv
    ​​​​sudo rm -rf /var/lib/dkms/nvidia-440
    ​​​​sudo rm -rf /var/lib/dkms/nvidia-465
    
  10. (非常重要)重新開機
    • 重開前確認 nvidia-smi 指令並不存在,但即便不存在,重開之後也有可能冒出來
  11. 重開後輸入 nvidia-smi 確認此指令並不存在,代表大致上刪除成功
  12. 重新安裝 Nvidia Driver
    • 查詢有哪些 Driver 版本可以安裝
      ​​​​​​​​apt-cache search nvidia-driver
      
    • 安裝目標版本的驅動程式,例如 525 為 CUDA 12.0
      ​​​​​​​​sudo apt-get install nvidia-driver-525-server
      
    • 如果是使用桌面版的 Ubuntu 則可以透過以下指令安裝:
      ​​​​​​​​sudo ubuntu-drivers autoinstall
      
  13. 安裝過程中發生類似以下的訊息:
    Logging Message
    ​​​​Setting up nvidia-dkms-525-server (525.105.17-0ubuntu0.20.04.1) ...
    ​​​​update-initramfs: deferring update (trigger activated)
    ​​​​INFO:Enable nvidia-srv
    ​​​​DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/lenovo_thinkpad
    ​​​​DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/dell_latitude
    ​​​​DEBUG:Parsing /usr/share/ubuntu-drivers-common/quirks/put_your_quirks_here
    ​​​​Loading new nvidia-srv-525.105.17 DKMS files...
    ​​​​Building for 5.4.0-152-generic
    ​​​​Building for architecture x86_64
    ​​​​Building initial module for 5.4.0-152-generic
    ​​​​Secure Boot not enabled on this system.
    ​​​​Done.
    
    ​​​​nvidia.ko:
    ​​​​Running module version sanity check.
    ​​​​Error! Module version 525.105.17 for nvidia.ko
    ​​​​is not newer than what is already found in kernel 5.4.0-152-generic (530.41.03).
    ​​​​You may override by specifying --force.
    
  14. 解決方法:
    • 透過 DKMS 強制載入
      ​​​​​​​​sudo dkms install -m nvidia-srv -v 525.105.17 -k 5.4.0-152-generic --force
      
    • 其中 525.105.175.4.0-152-generic 是根據 Logging Message 決定的
    • 安裝的若不是 Server 版的 Nvidia Driver,則 -m 後面可能不是接 nvidia-srv
      • 可能是根據 INFO:Enable ... 決定的
    • 可能訊息長的不會完全一樣,但如果有類似 .ko 的訊息跑出來就可以試試看強制載入 DKMS 的指令。
  15. 保險起見可以再重開一次。
  16. 再次執行 nvidia-smi 確定驅動程式版本恢復成 525 了,萬歲
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →

Power Limit

  • 查詢功率限制:
    ​​​​nvidia-smi -q -d POWER
    
  • 啟用持續模式使功率限制持續套用:
    ​​​​sudo nvidia-smi -pm ENABLED
    
  • 設定新的功率上限:
    ​​​​sudo nvidia-smi -i 0 -pl=250
    
  • 其中 -i 代表 GPU 的索引值。

Installation

  • 移除 NVIDIA 相關套件:
    ​​​​sudo apt autoremove -y "nvidia-*"
    ​​​​sudo apt purge -y "nvidia-*"
    
  • 檢視最新版本:
    ​​​​curl https://download.nvidia.com/XFree86/Linux-x86_64/latest.txt
    ​​​​# 570.144 570.144/NVIDIA-Linux-x86_64-570.144.run
    
  • 也可以到這個網頁查看版本資訊。
  • 以 570.144 版本為例,下載安裝程式:
    ​​​​wget https://download.nvidia.com/XFree86/Linux-x86_64/570.144/NVIDIA-Linux-x86_64-570.144.run
    
  • 給予安裝程式執行權限:
    ​​​​chmod +x NVIDIA-Linux-x86_64-570.144.run
    
  • 透過安裝程式移除驅動程式:
    ​​​​sudo ./NVIDIA-Linux-x86_64-570.144.run --uninstall
    
  • 執行安裝程式:
    ​​​​sudo ./NVIDIA-Linux-x86_64-570.144.run -q -s --no-opengl-files
    
  • 啟用驅動程式:
    ​​​​nvidia-smi -pm 1
    

Reference