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