當升級GPU實例的操作系統(例如Alibaba Cloud Linux、RedHat、CentOS、Ubuntu等)內核時,可能會因為兩個內核的kABI(Kernel Application Binary Interface)不一致,導致舊內核上構建的GPU(Tesla)驅動無法在新的內核上加載。內核升級后,請根據內核的kAPI(Kernel Application Programming Interface)是否存在變化,采取不同的方案解決該問題。
問題現象
升級GPU實例的操作系統內核時,出現GPU(Tesla)驅動無法在新的內核上加載,即無法在新的內核版本上插入舊內核的NVIDIA的KO,導致該驅動無法正常使用。報錯信息如下:
問題原因
升級內核包后導致NVIDIA GPU(Tesla)驅動無法加載的可能原因如下:
升級前后兩個內核的kABI不一致,導致舊內核上構建的NVIDIA GPU(Tesla)驅動無法在新內核上加載。
NVIDIA GPU(Tesla)驅動的默認KO(Kernel Object)安裝目錄不在
/lib/modules/(uname?r)/extra
下,導致新的內核包安裝時無法對其創建軟鏈接。
解決方案
基于以上原因,根據內核的kAPI影響情況,采取不同的解決方案:
如果內核升級后,內核的kAPI不受影響,請通過DKMS自動構建NVIDIA GPU(Tesla)驅動。
如果內核升級后,內核的kAPI受到影響發生變化,無法通過DKMS自動構建NVIDIA GPU(Tesla)驅動,請重新適配NVIDIA GPU(Tesla)驅動。
通過DKMS自動構建NVIDIA GPU(Tesla)驅動
在NVIDIA GPU(Tesla)驅動上安裝DKMS。
遠程連接GPU實例。
本文以Alibaba Cloud Linux 3系統的gn7i實例為例,具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
在GPU實例上安裝DKMS。
sudo yum install dkms
手動為GPU安裝NVIDIA GPU(Tesla)驅動。
具體操作,請參見在GPU計算型實例中手動安裝Tesla驅動(Linux)。
安裝過程中,請注意以下幾點:
出現以下提示(即是否將內核模塊源代碼注冊到DKMS)時,選擇Yes。
選擇Yes后NVIDIA GPU可能會報注冊失敗提示(如下圖所示),您無需擔心,直接單擊OK即可。
根據實際需要選擇是否安裝NVIDIA的32位兼容性庫。
執行以下命令,檢測DKMS的當前狀態。
sudo dkms status
結果顯示如下,表示DKMS已安裝成功。
執行
ls
命令,查看/usr/src/nvidia-${nvidia 驅動版本}
目錄下是否存放NVIDIA GPU(Tesla)驅動相關文件。本示例以
nvidia-${nvidia 驅動版本}
為nvidia-470.141.03
為例,請替換成您實際的驅動版本。說明NVIDIA GPU(Tesla)驅動默認將其相關代碼或文件存放在
/usr/src/nvidia-${nvidia 驅動版本}
目錄下,以便DKMS在內核更新后自動重新編譯和安裝驅動程序的內核模塊。
安裝新內核觸發DKMS自動構建NVIDIA GPU(Tesla)驅動。
本示例以新內核版本
5.10.134-15.al8
為例,請您根據業務需要替換為實際的內核版本。重要建議先安裝 kernel-devel包然后安裝kernel/kernel-core包,否則,DKMS不會自動構建NVIDIA GPU(Tesla)驅動。因為kernel/kernel-core包觸發DKMS,而DKMS構建NVIDIA GPU(Tesla)驅動需要kernel-devel包,此時需要手動觸發DKMS構建NVIDIA GPU(Tesla)驅動。具體操作,請參見步驟3:手動觸發DKMS構建Tesla驅動。
執行以下命令,安裝新內核的kernel-devel包。
sudo rpm -ivh kernel-devel-5.10.134-15.al8.x86_64.rpm --force
安裝kernel/kernel-core包。
本示例以安裝kernel包為例。對于Alibaba Cloud Linux 3系統來說,需要安裝kernel-core包,執行
sudo rpm -ivh kernel-core-5.10.134-15.al8.x86_64.rpm --force
命令即可。sudo rpm -ivh kernel-5.10.134-15.al8.x86_64.rpm --force
執行以下命令,檢查新內核下NVIDIA GPU(Tesla)驅動是否構建成功。
find /lib/modules/5.10.134-15.al8.x86_64/ -name *nvidia*
執行
sudo dkms status
檢查DKMS是否存在新的內核記錄。
(條件必選)如果您先安裝了kernel/kernel-core包,然后安裝kernel-devel包,需手動觸發DKMS構建NVIDIA GPU(Tesla)驅動。
執行以下命令,構建NVIDIA GPU(Tesla)驅動。
sudo dkms build -m nvidia -v ${nvidia 驅動的版本} -k ${新的內核版本} --force
主要參數說明如下:
${nvidia 驅動的版本}
:請替換為NVIDIA GPU(Tesla)驅動的具體版本號,例如470.141.03
。${新的內核版本}
:請替換為新內核的具體版本號,例如5.10.134-15.al8.x86_64
。
執行以下命令,安裝已構建好的NVIDIA GPU(Tesla)驅動。
sudo dkms install -m nvidia -v ${nvidia 驅動版本} -k ${新的內核版本} --force
執行以下命令,檢查新內核安裝目錄下NVIDIA GPU(Tesla)驅動是否已安裝。
find /lib/modules/5.10.134-16.3.al8.x86_64/ -name *nvidia*
執行
sudo dkms status
檢查DKMS是否存在新的內核記錄。
重新適配NVIDIA GPU(Tesla)驅動
如果內核升級后導致內核的kAPI受到影響發生變化,通過DKMS無法自動構建和安裝NVIDIA GPU(Tesla)驅動,您需要重新適配NVIDIA GPU(Tesla)驅動。具體操作,請參見:在GPU計算型實例中手動安裝Tesla驅動(Linux)。