Debian

系統掛起後未找到 NVENC 的 CUDA 上下文

  • January 24, 2017

語境

我最近將我的 nVidia 驅動程序更新為 375.26 並在我的Debian 機器。對 RAM 進行掛起將導致 OBS 停止使用其唯一修復重啟機器的工作。

如何重現

  1. 執行 OBS
  2. 輸出配置:
  • 將輸出設置為 NVENC H.264 和 .mp4
  • 使用社區康復
  • 比特率 = 200K
  • Kf 間隔 = 0
  • 低延遲,高質量預設,主要,自動
  • 啟用 2 遍編碼
  • 顯卡 = 0
  • B 幀 = 0
  1. 開始錄製並停止以確認它有效
  2. 轉到登錄操作並點擊暫停
  3. 打開並再次登錄
  4. 開始錄製,OBS 失敗並出現以下錯誤:
[h264_nvenc @ 0x3fdd1e0] Failed creating CUDA context for NVENC: 0x3e7
[h264_nvenc @ 0x3fdd1e0] No NVENC capable devices found

系統資訊

  • 上面列出的驅動程序/軟體版本
  • GPU: MSI GTX 970
  • uname -a:Linux 版本 3.16.0-4-amd64,#1 SMP Debian 3.16.39-1 (2016-12-30)
  • 作業系統:Debian 8.7 傑西

如果這會對操作按鈕的工作方式產生影響,我會使用 XFCE 4.10。

問題

有什麼辦法可以避免每次都重新啟動以避免在喚醒電腦後出現此錯誤?


編輯 1

我知道 OBS 是這個問題的根源。

測試案例 1:

  1. 啟動電腦,使用ffmpeg的h264_nvenc編碼器輸出一個影片文件
  2. 掛起到 RAM
  3. 登錄,成功重複步驟1

測試案例 2:

  1. 啟動電腦,使用OBS用h264_nvenc錄製影片
  2. 退出OBS
  3. 掛起到 RAM
  4. 登錄,成功重複步驟2

測試案例 3:

  1. 啟動電腦,使用OBS用h264_nvenc錄製影片
  2. 掛起到 RAM
  3. 登錄,失敗Cannot init CUDA

我的猜測是,當錄製停止時,OBS 不會關閉其流,它可能會因為性能(?)原因而持續存在,直到您退出程序?我不知道如何解決這個問題。出現錯誤後重啟OBS無效,必須重啟系統。

glxinfo儘管如此,GPU 似乎完全可以處理其他所有事情nvidia-sminvidia-settings所有這些都證實了 GPU 確實被用於處理其他任務。似乎 NVENC 是暫停到 RAM 後唯一有問題的東西。


編輯 2

以下是dmesg日誌:https://www.diffchecker.com/wto7KPJZ

選項卡式“原始”是在執行暫停後發生的變化,選項卡式“更改”是執行我建議的修復後發生的變化。

完整dmesg輸出:https://0paste.com/10601#hl

如果 h264_nvenc 流在將系統置於掛起狀態之前啟動(並停止,但這不是必需的),FFmpeg 只會鎖定 CUDA init。如果 OBS 在掛起之前從未使用 h264_nvenc 編碼器記錄任何內容,那麼當您再次登錄時它將正常工作。

如果OBS在登錄後鎖定,它將變得可用:

  1. 退出 OBS
  2. 在終端中執行:
sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm
  1. 再次打開OBS
  2. ???
  3. 利潤

如果解除安裝nvidia_uvm不起作用,則可能還需要重新載入 DRM 和 modeset 模組,儘管我從未遇到過這個問題。

引用自:https://unix.stackexchange.com/questions/339362