web-dev-qa-db-ja.com

システムの一時停止後にNVENCのCUDAコンテキストが見つかりません

コンテキスト

最近、nVidiaドライバーを375.26に更新し、FFmpegN-83180-gcf3affaとOBS17.0.2-5-g43e4a2eを再コンパイルしました(これらの番号が意味をなさない場合は申し訳ありませんが、どのバージョン番号が重要かはよくわかりません)。 Debianマシン。 RAMにサスペンドを実行すると、OBSは、マシンを再起動するための唯一の修正で動作を停止します。

再現方法

  1. OBSを実行する
  2. 出力構成:

    • 出力をNVENCH.264および.mp4に設定します
    • CBRを使用する
    • ビットレート= 200K
    • Kf間隔= 0
    • 低レイテンシー、高品質プリセット、メイン、オート
    • 2パスエンコーディングが有効
    • GPU = 0
    • Bフレーム= 0
  3. 録音を開始し、停止して動作することを確認します

  4. ログインアクションに移動し、[一時停止]をクリックします
  5. 電源を入れて再度ログインします
  6. 記録を開始すると、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)
  • OS:Debian 8.7 Jessie

アクションボタンの動作に違いがある場合は、XFCE4.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を再起動しても効果はありません。システムを再起動する必要があります。

それでも、GPUは他のすべての処理に完全に問題がないようですが、glxinfonvidia-sminvidia-settingsはすべて、GPUが実際に他のタスクの処理に使用されていることを確認しています。 RAMへのサスペンド後に問題が発生するのはNVENCだけのようです。


編集2

ここにdmesgログがあります:https://www.diffchecker.com/wto7KPJZ

タブ付きの「元の」はサスペンドを実行した後に変更されたものであり、タブ付きの「変更された」は私が提案した修正を実行した後に変更されたものです。

完全なdmesg出力:https://0paste.com/10601#hl

3
Breeze

FFmpegは、システムをサスペンドする前にh264_nvencストリームが開始された(そして停止されたが、これは必要ありません)場合にのみCUDAinitにロックアップします。 OBSが一時停止する前にh264_nvencエンコーダーで何も記録しない場合は、再度ログインすると正常に機能します。

ログイン後にOBSがロックすると、次の方法で使用できるようになります。

  1. OBSを終了します
  2. ターミナルで実行:

    Sudo rmmod nvidia_uvm && Sudo modprobe nvidia_uvm
    
  3. OBSを再度開きます

  4. ???
  5. 利益

アンロードする場合nvidia_uvmが機能しません。この問題が発生したことはありませんが、DRMモジュールとモードセットモジュールも再ロードする必要がある場合があります。

0
Breeze