NVIDIA GPUs 已成為加速機(jī)器學(xué)習(xí)、高性能計(jì)算( HPC )、內(nèi)容創(chuàng)建工作流和數(shù)據(jù)中心應(yīng)用程序等多種工作負(fù)載的主流。對(duì)于這些企業(yè)用例, NVIDIA 提供了一個(gè)由 CUDA 平臺(tái)支持的軟件堆棧:驅(qū)動(dòng)程序、 CUDA -X 加速庫(kù)、 CUDA – 優(yōu)化的應(yīng)用程序和框架。
部署 NVIDIA 驅(qū)動(dòng)程序是建立 GPU 加速集群以使用 CUDA 的一個(gè)基本方面。在過(guò)去, NVIDIA 驅(qū)動(dòng)程序的安裝或升級(jí)都需要一個(gè)完整的軟件開(kāi)發(fā)環(huán)境,比如編譯器工具鏈和內(nèi)核頭文件,在每個(gè) GPU 節(jié)點(diǎn)上。企業(yè)用戶還希望使用經(jīng)過(guò)測(cè)試的 NVIDIA 驅(qū)動(dòng)程序和 Linux 內(nèi)核組合的組合,以獲得穩(wěn)定性,并能夠在特定的驅(qū)動(dòng)程序分支上運(yùn)行,這些分支可能具有不同的生命周期。
在這篇文章中,我將介紹如何在 Red Hat Enterprise Linux ( RHEL ) 8 上打包 NVIDIA 驅(qū)動(dòng)程序,以改進(jìn)安裝和升級(jí)驅(qū)動(dòng)程序的體驗(yàn)。這項(xiàng)工作提供了幾個(gè)好處 – 包括提高可靠性、安全性和可選擇性。為此,請(qǐng)使用 RHEL8 和預(yù)編譯內(nèi)核模塊( kmod )包中提供的模塊化流。
DNF 模塊化
使用 模塊化 , CUDA 存儲(chǔ)庫(kù)為驅(qū)動(dòng)程序包提供多個(gè)更新流。只考慮對(duì)所選流的更新。您可以選擇跟上最新和最新版本,或鎖定到特定的驅(qū)動(dòng)程序分支,例如,主版本等于“ 450 ”的驅(qū)動(dòng)程序。
這個(gè)新機(jī)制允許您根據(jù)您的用例切換到不同的流。您可以從多個(gè) NVIDIA GPU 驅(qū)動(dòng)程序分支中選擇一個(gè),這些分支可從單個(gè) RPM 存儲(chǔ)庫(kù)遵循。一些 NVIDIA 驅(qū)動(dòng)程序 用于 NVIDIA 數(shù)據(jù)中心 GPUs ,與其他驅(qū)動(dòng)程序分支相比,它們的使用壽命可能更長(zhǎng)。企業(yè)用戶可能出于穩(wěn)定性的原因選擇留在特定的驅(qū)動(dòng)程序分支上,而其他用戶可能希望跟蹤其他分支以訪問(wèn)新功能。
圖 1 可用 NVIDIA 驅(qū)動(dòng)模塊流列表。
您可以選擇一個(gè)特定的驅(qū)動(dòng)程序分支,例如 R418 ,用于跟蹤更新,并且只從該分支獲取更新。這些軟件包還提供了一個(gè)名為 latest 和 latest-dkms 的虛擬分支,在每個(gè)時(shí)間點(diǎn)跟蹤最新的 NVIDIA 驅(qū)動(dòng)程序。默認(rèn)為分支 latest-dkms 。其他的分支是可選的,并且可以在不需要重新安裝 CUDA 工具箱的情況下切換分支。
使用預(yù)編譯驅(qū)動(dòng)程序
對(duì)于受支持的 Red Hat Enterprise Linux 8 .x 內(nèi)核版本(請(qǐng)參閱下面的支持列表),提供了實(shí)現(xiàn) DKMS 公司 替代方案的驅(qū)動(dòng)程序包。無(wú)需啟用 EPEL 存儲(chǔ)庫(kù) 。這些驅(qū)動(dòng)程序 kmod 包的源文件是預(yù)先編譯的,然后在安裝時(shí)鏈接,因此這些文件被稱為“預(yù)編譯驅(qū)動(dòng)程序”
新方法不需要安裝 gcc 編譯器,從而減少了攻擊面,加快了內(nèi)核和/或驅(qū)動(dòng)程序更新的啟動(dòng)時(shí)間。使用這些預(yù)編譯的 kmod 包提供了更大的穩(wěn)定性,因?yàn)?NVIDIA 驅(qū)動(dòng)程序版本和內(nèi)核版本字符串組合已經(jīng)過(guò)預(yù)測(cè)試。告別黑屏(運(yùn)行級(jí)別 3 ),向可預(yù)測(cè)的用戶體驗(yàn)問(wèn)好,驅(qū)動(dòng)程序安裝不再依賴于 kernel-devel 和 kernel-headers 軟件包。
當(dāng)發(fā)布新的驅(qū)動(dòng)程序更新時(shí),只為驅(qū)動(dòng)程序更新時(shí)最新發(fā)布的內(nèi)核提供預(yù)編譯的驅(qū)動(dòng)程序包。同樣,如果發(fā)布了新的內(nèi)核更新,則會(huì)為該內(nèi)核提供預(yù)編譯的驅(qū)動(dòng)程序包。另一種說(shuō)法是,在任何時(shí)候,對(duì)最新的 RHEL 內(nèi)核和最新的 NVIDIA 驅(qū)動(dòng)程序版本(每個(gè)支持的分支)都啟用預(yù)編譯驅(qū)動(dòng)程序。
圖 2 在預(yù)編譯包列表中突出顯示了 450 RPM 的程序包。
使用預(yù)編譯驅(qū)動(dòng)程序時(shí), dnf 包管理器的插件將被啟用,用于清除過(guò)時(shí)的。 ko 文件。為了防止系統(tǒng)崩潰, NVIDIA dnf 插件 還防止升級(jí)到尚未存在預(yù)編譯驅(qū)動(dòng)程序的內(nèi)核。這可能會(huì)延遲安全修復(fù)的應(yīng)用,但確保始終使用經(jīng)過(guò)測(cè)試的內(nèi)核和驅(qū)動(dòng)程序組合。
使用包管理器安裝
下面是如何開(kāi)始在 RHEL8 上使用新的驅(qū)動(dòng)程序包。首先,確保已啟用 Red Hat 存儲(chǔ)庫(kù),包括 RHEL8 AppStream 、 RHEL8 BaseOS 和 RHEL8 CRB :v
$ subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms $ subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms $ subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms
添加 CUDA 網(wǎng)絡(luò)存儲(chǔ)庫(kù):
$ sudo dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
安裝最新的流以選擇進(jìn)入預(yù)編譯包:
$ sudo dnf module install nvidia-driver:latest
選擇模塊化流
為了提高靈活性,預(yù)編譯和 DKMS 變體中都有幾個(gè)流可用(表 1 )。
最新選項(xiàng)始終更新到最高版本的驅(qū)動(dòng)程序(預(yù)編譯):
$ sudo dnf module install nvidia-driver:latest
選項(xiàng)將驅(qū)動(dòng)程序更新鎖定到指定的驅(qū)動(dòng)程序分支(預(yù)編譯)。將
替換為適當(dāng)?shù)尿?qū)動(dòng)程序分支流,例如 455 、 450 、 440 或 418 。
$ sudo dnf module install nvidia-driver:
latest-dkms
選項(xiàng)總是更新到最高版本的驅(qū)動(dòng)程序(非預(yù)編譯)。這是默認(rèn)流。
$ sudo dnf module install nvidia-driver:latest-dkms
選項(xiàng)將驅(qū)動(dòng)程序更新鎖定到指定的驅(qū)動(dòng)程序分支(非預(yù)編譯),例如 455 dkms 、 450 dkms 、 440 dkms 或 418 dkms 。
$ sudo dnf module install nvidia-driver:-dkms
交換流
要切換到另一個(gè)流,請(qǐng)先刪除驅(qū)動(dòng)程序包:
$ sudo dnf remove nvidia-driver
然后,重置模塊流:
$ sudo dnf module reset nvidia-driver
現(xiàn)在可以從適當(dāng)?shù)牧靼惭b驅(qū)動(dòng)程序。
使用模塊化配置文件
模塊化概要文件與任何支持的模塊化流一起工作,并允許附加的用例(表 2 )。
現(xiàn)在,您可以使用dnf
命令指定流和配置文件:
$ sudo dnf module install nvidia-driver:/
/default
選項(xiàng)在流中安裝所有驅(qū)動(dòng)程序包(可傳遞閉包):
$ sudo dnf module install nvidia-driver:latest/default
/ks
選項(xiàng)用于無(wú)人值守的 Linux 操作系統(tǒng)安裝,使用的是不安裝cuda-drivers
元包的cuda-drivers
配置文件。該元包嘗試刪除舊的驅(qū)動(dòng)程序運(yùn)行文件安裝。
%packages @^Minimal Install @nvidia-driver:latest-dkms/ks %end
/fm
選項(xiàng)安裝用于引導(dǎo) NVSwitch 的其他軟件包,包括 Fabric Manager 和 NSCQ (用于交換機(jī)遙測(cè)):
$ sudo dnf module install nvidia-driver:450/fm
RHEL 支持矩陣
目前,這些包改進(jìn)僅支持 x86 _ 64 體系結(jié)構(gòu)上的 RHEL 8 。 2 (及更高版本)。 NVIDIA 只為最新的官方 RHEL 內(nèi)核提供預(yù)編譯驅(qū)動(dòng)程序包,例如 4 。 18 。 0-193 。 19 。 1 及更高版本。如果使用早期內(nèi)核,請(qǐng)更新以開(kāi)始接收預(yù)編譯的驅(qū)動(dòng)程序包。沒(méi)有為 幾何學(xué) 內(nèi)核提供預(yù)編譯驅(qū)動(dòng)程序。
表 3 顯示了根據(jù) NVIDIA 驅(qū)動(dòng)程序生命周期策略 支持的分支。
新的 kmod 包通常在新的 RHEL 內(nèi)核更新后 24 小時(shí)內(nèi)可用。
為了防止系統(tǒng)崩潰,dnf
插件會(huì)在內(nèi)核上線和 kmod 包可用性之間阻止內(nèi)核更新。在升級(jí)過(guò)程中,dnf
會(huì)顯示一條警告:
NOTE: Skipping kernel installation since no NVIDIA driver kernel module package kmod-nvidia-${driver}-${kernel} ... could be found
摘要
在 RHEL8 上部署 NVIDIA 驅(qū)動(dòng)程序是使用預(yù)編譯內(nèi)核模塊包和模塊化流的更好的體驗(yàn)。新的驅(qū)動(dòng)程序包在 CUDA 存儲(chǔ)庫(kù) 中提供,所以您可以從今天開(kāi)始。
GitHub 上提供了打包模板和說(shuō)明,允許您為自定義內(nèi)核和衍生 Linux 發(fā)行版維護(hù)自己的預(yù)編譯內(nèi)核模塊包:
NVIDIA / yum 打包預(yù)編譯 kmod
NVIDIA / yum 打包 -NVIDIA – 插件
關(guān)于作者
Kevin Mittman 是一個(gè) GNU / Linux 愛(ài)好者,對(duì)自動(dòng)化有著濃厚的熱情。他是 NVIDIA 的系統(tǒng)軟件工程師,專注于 CUDA 、 NVIDIA 驅(qū)動(dòng)程序和其他 CUDA -X 產(chǎn)品的安裝程序打包和發(fā)布過(guò)程。在加入 NVIDIA 之前, Kevin 在開(kāi)源社區(qū)開(kāi)始了他的職業(yè)生涯。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4986瀏覽量
103066 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49133 -
CUDA
+關(guān)注
關(guān)注
0文章
121瀏覽量
13628
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論