NVIDIA GPU持久模式是什么?(驱动程序持久性 Driver Persistence Daemon 守护程序)
文章目錄
- 驅動程序持久性
- 1.概述
- 1.1. windows系統
- 1.2. Linux
- 2.數據持久性
- 2.1. GPU初始化生命周期
- 2.2. 內核驅動程序生命周期
- 2.3. GPU開發板生命周期
- 3.背景
- 4.持久模式(舊版)
- 4.1. 支持的環境
- 5.持久性守護程序
- 5.1. 支持的環境
- 5.2. 實施細節
- 5.3. 權限和安全性
- 5.4. 用法
- 5.5. 安裝注意事項
- 5.6. 客戶可見度
我們在跑程序時,分六批單獨投喂給GPU計算和將六批整合成一批投喂給GPU計算,耗時是不同的,出現這種現象的原因是什么,值得我們思考
我們大膽猜測,是否在GPU準備計算時,會有一個較長的準備時間?
搜索NVIDIA GPU持久模式:
驅動程序持久性
1.概述
必須先運行NVIDIA內核模式驅動程序并將其連接到目標GPU設備,然后才能與該設備進行任何用戶交互。驅動程序的行為因操作系統而異。通常,如果內核模式驅動程序尚未運行或尚未連接到目標GPU,則任何嘗試與該GPU進行交互的程序的調用都會透明地導致該驅動程序加載和/或初始化GPU。當所有GPU客戶端終止時,驅動程序將取消初始化GPU。驅動程序加載行為對最終用戶而言有兩種重要的作用:
-
應用啟動延遲
由于ECC清理行為,觸發GPU初始化的應用程序可能會導致每個GPU短暫(1-3秒的數量級)啟動成本。如果GPU已初始化,則不會進行清理。 -
保存驅動狀態
如果驅動程序取消了GPU的初始化,則與該GPU相關的某些非持久狀態將丟失,并在下次初始化GPU時恢復為默認狀態。請參閱數據持久性。為了避免這種情況,GPU應該保持初始化狀態。
缺省驅動程序行為在操作系統之間有所不同:
1.1. windows系統
在Windows上,內核模式驅動程序在Windows啟動時加載,并保持加載狀態,直到Windows關閉。因此,Windows用戶通常可以忽略本文檔中描述的驅動程序持久性含義。
注意:驅動程序重載事件(例如由于TDR或安裝新的驅動程序)將導致非持久狀態復位。
1.2. Linux
在默認情況下X在目標GPU上運行的Linux系統下,通常會啟用X模式,并啟動內核模式驅動程序并使之從計算機啟動到關閉都保持活動狀態。在無頭系統或沒有長期存在的類似X的客戶端維護目標GPU句柄的情況下,每次目標GPU應用程序啟動和停止時,內核模式驅動程序都會初始化和取消初始化目標GPU。在HPC環境中,這種情況非常普遍。由于在這種情況下通常需要使GPU初始化,因此NVIDIA提供了兩種更改驅動程序行為的選項: 持久模式(傳統)和持久守護程序。
2.數據持久性
不同級別的驅動程序狀態具有不同的生存期。了解這些差異非常重要,因為這會影響GPU管理功能(如時鐘設置,ECC模式等)的行為。通常,驅動程序狀態屬于以下類別。這并不是詳盡的清單,而是涵蓋了常見情況:
2.1. GPU初始化生命周期
從驅動程序初始化GPU到GPU初始化之間,這種狀態一直持續。這是最狹窄的生命周期,因為內核驅動程序本身仍處于加載狀態,并且可能正在管理其他GPU。如果客戶端應用程序嘗試訪問GPU,則GPU通常會初始化GPU。最后一個客戶端退出后,GPU通常會取消初始化。
狀態:
- 計算模式,計費模式,持久性模式
- 應用程序時鐘,應用程序時鐘權限設置
- 基于SW的功率上限
- 易失性ECC錯誤,待退頁
2.2. 內核驅動程序生命周期
從驅動程序加載到驅動程序卸載(例如rmmod),這種狀態一直持續。在大多數環境中,這是整個計算機引導周期。例外包括GPU重置事件和驅動程序安裝。
狀態:
- 會計流程數據
2.3. GPU開發板生命周期
這種類型的狀態會在啟動周期中持續存在,因為它存儲在板子的持久性信息光盤中。在某些情況下,可以明確清除這種狀態,但通常認為該狀態在整個板子的生命周期中都是持久的-直到用戶下一次更改為止。
狀態:
- ECC模式,總計ECC錯誤,已淘汰的頁面
- GPU操作模式,驅動程序模型
3.背景
NVIDIA GPU驅動程序在歷史上一直遵循Unix設計理念,僅在用戶配置系統時才初始化軟件和硬件狀態。傳統上,此配置是通過X Server完成的,并且僅在X Server(代表用戶)請求啟用GPU時才初始化GPU。這對于無需重新啟動即可重新配置GPU(例如,更改SLI模式或總線設置,尤其是在AGP時代)的能力非常重要。
最近,事實證明這在僅使用計算的環境中是個問題,在這種環境中,不使用X,而是通過Cuda庫的瞬時實例訪問GPU。這導致GPU狀態被初始化和取消初始化的次數比用戶真正想要的要多,并且導致每個Cuda作業的加載時間很長,大約為幾秒鐘。
NVIDIA先前提供了“持久模式”來解決此問題。這是可以使用nvidia-smi配置的內核級解決方案。當沒有用戶軟件正在使用GPU時,這種方法將阻止內核模塊完全卸載軟件和硬件狀態。但是,這種方法與系統的其余部分產生了細微的交互問題,使維護變得困難。
NVIDIA Persistence Daemon的目的是用更強大的用戶空間解決方案代替該內核級解決方案。這使純計算環境能夠更接近于NVIDIA GPU驅動程序所設計的歷史典型圖形環境。
4.持久模式(舊版)
持久性模式是用戶可設置的驅動程序屬性的術語,即使沒有客戶端連接,該屬性也可以使目標GPU保持初始化。該解決方案已接近使用壽命,最終將不贊成使用此方法,而推薦使用Persistence Daemon
可以使用nvidia-smi或通過NVML API以編程方式設置持久性模式。
要使用nvidia-smi(作為根)啟用持久性模式,請執行以下操作:
nvidia-smi -i <target gpu> -pm ENABLEDEnabled persistence mode for GPU <target gpu>.All done.不過我嘗試了,它說沒法用(1080Ti):
cd C:\Program Files\NVIDIA Corporation\NVSMI C:\Program Files\NVIDIA Corporation\NVSMI>nvidia-smi -i 0 -pm ENABLED Setting persistence mode is not supported for GPU 00000000:05:00.0 on this platform. Treating as warning and moving on. All done.C:\Program Files\NVIDIA Corporation\NVSMI>要使用nvidia-smi查看當前的持久模式:
nvidia-smi -i <target gpu> -q==============NVSMI LOG==============Timestamp : ----Driver Version : ----Attached GPUs : ----GPU 0000:01:00.0Product Name : ----Display Mode : ----Display Active : ----Persistence Mode : EnabledAccounting Mode : ----...4.1. 支持的環境
- 驅動程序:所有運輸驅動程序版本
- 操作系統:所有標準驅動程序支持的Linux平臺
- GPU:所有已發售的Tesla,Quadro和GRID產品
5.持久性守護程序
NVIDIA在Linux上提供了一個用戶空間守護程序,以支持Cuda作業運行期間驅動程序狀態的持久性。與持久性模式相比,守護程序方法為該問題提供了更優雅,更健壯的解決方案。
NVIDIA將在不久的將來(可能通過Cuda 8.0)支持這兩種解決方案,但是會將所有未來的開發和錯誤修復都集中在守護程序上。
守護程序安裝在/ usr / bin中,而示例安裝和初始化腳本包含在驅動程序的文檔目錄中。提供這些腳本作為安裝守護程序以在某些常見的init系統的系統啟動時運行的指南。由于初始化系統配置的多樣性,它們可能需要對某些發行版進行一些更改。
NVIDIA鼓勵客戶盡早轉向這種守護程序方法。
5.1. 支持的環境
驅動程序:R319及更高版本
操作系統:所有標準驅動程序支持的Linux平臺
GPU:所有已發售的Tesla,Quadro和GRID產品
5.2. 實施細節
在運行NVIDIA GPU驅動程序的Linux系統上,客戶端通過打開其設備文件來附加GPU。相反,通過關閉設備文件來分離GPU。每當一個或多個客戶端打開設備文件時,GPU狀態就會保持加載在驅動程序中。一旦所有客戶端都關閉了設備文件,除非啟用了持久性模式,否則GPU狀態將被卸載。
為了模擬圖形環境而又不增加用戶空間圖形驅動程序的開銷,我們實現了NVIDIA Persistence Daemon,該守護程序實際上在后臺運行,并在打開設備文件時進入睡眠狀態。守護程序使用libnvidia-cfg根據其PCI總線地址打開和關閉正確的設備文件,并提供RPC接口來分別控制每個GPU的持久模式。因此,當守護程序使設備文件保持打開狀態時,至少一個客戶端(守護程序)已連接了GPU,驅動程序將不會卸載GPU狀態。守護程序開始運行后,它將一直保留在后臺,直到被殺死為止,
由于該解決方案的性質,該守護程序可以用作NVIDIA內核模式驅動程序中實現的我們現在稱為“舊版持久性模式”的直接替代。 NVIDIA SMI已在驅動程序版本319中更新,如果守護程序正在運行,則使用守護程序的RPC接口通過守護程序設置持久性模式;如果守護程序未運行,則將退回到設置內核模式驅動程序中的傳統持久性模式。 運行。 所有這些都由NVIDIA SMI透明地處理,因此持久性模式的配置方式應該保持不變。 最終,一旦在相關用例中得到廣泛采用,便不再使用舊版持久性模式,而取而代之的是NVIDIA Persistence Daemon。
5.3. 權限和安全性
NVIDIA Persistence Daemon在Linux上提供了更強大的持久性模式實現,因為它只是模仿了GPU的外部客戶端,而實際上并未使用GPU進行任何工作。這樣,它將使NVIDIA GPU驅動程序在其原始設計的假設下運行。
守護程序運行后,保持啟用持久化模式的開銷很小。守護程序將只是在睡眠中等待命令。
該守護程序不需要超級用戶特權即可運行-但是,它確實需要超級用戶特權才能在/ var / run中設置一些運行時數據。守護程序允許在沒有超級用戶特權的情況下以用戶身份運行兩種機制:
管理員(或使用超級用戶權限運行的腳本)可以創建/ var / run / nvidia-persistenced目錄,并將其“ chown”給運行守護程序的用戶。然后可以使用su或類似程序以目標用戶身份運行守護程序。在這種情況下,殺死守護程序時不會刪除/ var / run / nvidia-persistenced目錄。
守護程序可以以超級用戶特權啟動并使用–user選項。這將在創建/ var / run / nvidia-persistenced目錄并以指定用戶身份運行后,強制守護程序盡快放棄其超級用戶特權。請注意,使用此機制,守護程序被殺死時,它可能無法刪除/ var / run / nvidia-persistenced目錄,因為用戶可能沒有對/ var / run的寫入權限。
請注意,在這兩種情況下,守護程序在被殺死時都可能無法刪除其運行時數據目錄,因此該任務通常應由該守護程序的初始化腳本或服務來處理。
通過簡單地省略--user選項,守護進程也可以永久的超級用戶權限運行,但是不建議這樣做,它對于功能而言不是必需的。
守護程序還提供了–verbose選項,該選項將其日志記錄輸出增加到syslog中以進行調試。
該守護程序的源代碼也可以在MIT許可下獲得,以允許第二方和第三方安全審核。
5.4. 用法
要運行NVIDIA Persistence Daemon,只需運行(以root身份):
# nvidia-persistenced --user foo在完成了少量需要超級用戶特權的設置任務后,守護程序將刪除超級用戶特權并以用戶’foo’的身份運行。
您可以使用NVIDIA SMI更改持久模式設置。例如,要在所有GPU上禁用持久性模式,只需運行(再次以root用戶身份):
# nvidia-smi -pm 0請參閱由NVIDIA GPU驅動程序安裝程序安裝的nvidia-persistenced(1)手冊頁,或以下內容的輸出:
% nvidia-persistenced --help有關詳細的使用信息。
有關安裝守護程序以始終在系統啟動時運行的詳細信息,請參見安裝注意事項。
5.5. 安裝注意事項
我們之所以不能立即棄用舊版持久性模式并透明地切換到NVIDIA Persistence Daemon的原因,是因為目前我們不能保證NVIDIA Persistence Daemon將運行。這將是一種功能回歸,因為持久性模式可能無法立即使用。
NVIDIA Persistence Daemon隨附了從驅動程序版本319開始的NVIDIA Linux GPU驅動程序,并由安裝程序安裝為/ usr / bin / nvidia-persistenced。理想情況下,守護程序將根據Linux發行版的init系統在對用戶透明的系統初始化中啟動,并在系統關閉時退出。不幸的是,在安裝應用程序以在Linux上進行系統初始化時沒有統一的標準,因此我們無法在NVIDIA GPU驅動程序支持的廣泛系統上可靠地這樣做。
因此,我們希望鼓勵各個發行商安裝NVIDIA Persistence Daemon來開始系統初始化,這些發行人通常將NVIDIA GPU驅動程序重新打包以通過其程序包管理器進行安裝,一旦知道初始化系統,這幾乎是一件微不足道的任務。為此,我們在驅動程序包中提供了示例“初始化腳本”,以幫助進行此安裝。這些腳本試圖涵蓋當今Linux發行版中最常見的三個init系統:SystemV,systemd和Upstart。這些示例腳本還附帶一個安裝程序腳本,該腳本會嘗試檢測初始化系統并為用戶安裝適當的腳本。樣本腳本和安裝腳本由NVIDIA GPU驅動程序安裝程序安裝到/usr/share/doc/NVIDIA_GLX-1.0/sample/nvidia-persistenced-init.tar.bz2。由于我們無法保證它們在所有支持的系統中都能正常使用,因此它們沒有被驅動程序安裝程序解壓縮或運行。
默認情況下,安裝程序腳本會嘗試為守護程序運行創建一個新的系統用戶,并且示例初始化腳本演示了權限和安全性中描述的第二個選項,用于在沒有超級用戶特權的情況下運行守護程序。
5.6. 客戶可見度
守護程序對于最終客戶是可見的,因為它通常需要某種手動安裝到init系統中。但是,在執行了初始安裝步驟之后,該守護程序應在后臺透明運行,而NVIDIA SMI處理必要的切換,以確定是否可以使用該守護程序持久化模式。理想情況下,最終棄用和刪除舊版持久性模式對于使用該守護程序的客戶是透明的。
參考文章1:配置 Nvidia GPU 主機的運行環境
參考文章2:https://docs.nvidia.com/deploy/driver-persistence/index.html
總結
以上是生活随笔為你收集整理的NVIDIA GPU持久模式是什么?(驱动程序持久性 Driver Persistence Daemon 守护程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm git 超详细教程
- 下一篇: pycharm 右方提示 PEP 8: