跳至主要内容

ubuntu 20.04.3 系統更新導致的 nvidia-driver 異常問題

· 閱讀時間約 9 分鐘
Bosh
Software Engineer

本篇為排除 nvidia-driver 異常問題的紀錄,本身對 Linux 系統與 Nvidia 深度學習環境也不是很熟悉,若有描述不正確的地方歡迎更正~

設備與軟體版本

  • 設備:
    • GPU: RTX 3090
    • CPU: Intel Core i5-9500 CPU @ 3.00GHz × 6
  • 系統: Ubuntu 20.04.3
  • 軟體版本:
    • nvidia-driver: 510.69.02
    • CUDA: 11.3

問題:重新開機後螢幕黑屏、畫面比例異常

如標題所述,某次實驗大樓預告要停電,我前一天晚上先把電腦關機,隔天我重新開機後原本正常顯示的雙螢幕只有其中一台可以顯示,且畫面比例非常奇怪又不能調整。大概能猜到是顯卡驅動的問題,於是我先下 nvidia-smi指令確認nvidia-driver 是否正常,果不其然無法顯示顯卡資訊,於是我查了會造成 nvidia driver 出現異常的原因,主要可能由以下原因造成:

  1. 驅動程式版本不相容:如果使用舊版本的驅動程式,可能會與新版本的系統不相容。
  2. 驅動程式更新失敗:如果驅動程式更新失敗,可能會導致驅動程式異常。
  3. 硬體故障:如果 NVIDIA GPU 硬體故障,可能會導致驅動程式異常。
  4. 系統更新:如果系統更新後,驅動程式與系統不相容,也可能導致驅動程式異常。

從我遇到的情況來看大概能推敲出原因是因為 Linux 系統自動更新後,系統的內核版本、核心函數或其他系統設置已經改變,但是驅動程式仍然是舊版本,不能與新版本的系統兼容。

解決方法:重新安裝驅動程式

解決上述問題的方法就是重新安裝驅動程式,以下介紹兩種安裝方法。

Command mode 安裝驅動

以 command line 安裝 nvidia driver 可以透過 apt install 直接安裝,或是從 Nvidia 官網下載安裝檔來安裝,這兩者的差別在於使用「apt install」安裝 NVIDIA 驅動程式是以Ubuntu的軟體包管理系統為基礎的安裝方式,這種方式可以確保驅動程式的版本是與當前Ubuntu版本相容的。相反的,如果從 NVIDIA 官網下載驅動程式安裝包,並且使用手動安裝的方式,我們可以選擇最新版本的驅動程式,但不保證與當前的Ubuntu版本相容。

為了避免安裝 nvidia driver 時 GPU 受到圖形介面相關程式驅動,因此我先按 ctrl + alt + F3 進入全屏的 command mode,接著在命令列中輸入

#給驅動run檔賦予執行權限 
sudo chmod +x 驅動程式檔名.run

#執行安裝程式
sudo ./驅動程式檔名.run

接著遵循驅動程式安裝程序的指示後按下 ctrl + alt + F2 返回圖形介面模式。

我們也可以輸入 sudo service lightdm stop 來停用 X server,關閉圖形介面,完成安裝後再輸入 sudo service lightdm start來啟動圖型介面。

X server 是 X Window System 中的一部分,它是一個在 Unix-like 系統中運行的圖形繪製程式,負責管理圖形輸出與輸入。它管理螢幕、鍵盤、滑鼠等裝置的顯示和輸入訊息,並允許應用程式進行圖形繪製和互動。

若安裝成功,切換回圖型介面後畫面應該就正常了,若仍不正常可以先嘗試重新開機在找問題。

圖型介面安裝

若對下指令沒這麼熟悉甚至有恐懼的話可以先試試看用 ubuntu 提供的圖型介面,依照下列步驟來安裝:

  1. 開啟「顯示設定」,通常可以在「應用程式」選單中找到。
  2. 選擇「顯示設定」中的「驅動程式」選項卡。
  3. 選擇「更新驅動程式」,如果有可用的 NVIDIA 驅動程式,您就可以選擇它。
  4. 安裝驅動程式並重新啟動系統,以使 NVIDIA 驅動程式生效。

因為我也沒有試過以圖型介面安裝,若失敗可以嘗試以 command mode 安裝。

追溯問題:為什麼我的 Ubuntu 系統更新才會發生這個問題?

一般情況下,系統進行更新後不會發生驅動程式與系統不相容的問題,是因為系統更新通常包括驅動程式更新,以確保驅動程式與系統相容。但是,在某些情況下,驅動程式更新不是通過系統更新進行的,而是需要手動下載並安裝,這時就有可能發生驅動程式與系統不相容的問題。而驅動程式更新不是通過系統更新進行的原因是因為驅動程式並不是由系統供應商提供的,而是由硬體製造商提供的。

而解決這個問題的方法就是要確保系統更新時驅動程式會跟著一起更新,我們可以通過以下步驟:

  1. 在系統設置中,選擇「軟體更新」或「軟體和更新」。
  2. 在「軟體更新」選項中,找到「驅動程式」選項,並選擇「自動安裝驅動程式更新」。
  3. 完成設置後,系統將自動檢查驅動程式更新,並在更新可用時進行自動更新。

而如果 「更新驅動程式」選項卡中只有手動安裝選項可用,這可能是因為:

  1. 系統不是最新版本:如果系統不是最新版本,可能不支援自動更新 NVIDIA 驅動程式。需要先更新系統,然後再更新 NVIDIA 驅動程式。
  2. 在系統中禁用了自動更新:如果禁用了自動更新,就必須手動安裝 NVIDIA 驅動程式。可以檢查「顯示設定」中的「更新」選項卡,以確保自動更新功能是啟用的。
  3. 沒有可用的自動更新驅動程式:如果沒有可用的自動更新驅動程式,您就必須手動安裝 NVIDIA 驅動程式。可以前往 NVIDIA 網站下載驅動程式,然後手動安裝它。

延伸問題:自動更新驅動會不會影響到已經安裝好的 CUDA 和 cudnn?

通常新的驅動可以向下兼容版本較舊的 CUDA 與 cudnn,但還是有可能會發生新版驅動程式不相容舊版 CUDA 和 cudnn 的版本的問題,身為一個疲累的研究生,光做研究就足夠心累了,時不時還要處理開發環境問題真的很麻煩,因此我的做法是停用 ubuntu 的系統自動更新,雖然會捨棄修復漏洞和提高系統安全性的好處,但可以減少驅動程式和其他軟件不相容的風險。