Toolbox: Nvidia独自のドライバー

作成日 2019年04月16日  ·  16コメント  ·  ソース: containers/toolbox

まず、素晴らしいプロジェクトです!

Nvidia独自のドライバーを使用している場合、OpenGLソフトウェア(Blenderなど)はツールボックスコンテナー内では機能しません。 コンテナ内にプロプライエタリドライバをインストールしようとしましたが、インストールされますが、OpenGLソフトウェアが機能しません。 もっとインストールする必要がありますか? または、いくつかの環境変数を設定しますか?

ありがとう!

1. Bug 5. Help Wanted

最も参考になるコメント

したがって、ツールボックス内でNVIDIAのもの​​を機能させるには、これを行う必要がありました(https://github.com/thewtex/docker-opengl-nvidiaに触発されました)。

1)/ dev / nvidia0と/ dev / nvidiactlをツールボックスにバインドマウントしてX11のものをセットアップするには、ツールボックスにパッチを適用する必要があります-https://github.com/tpopela/toolbox/commit/40231e8​​591d70065199c0df9b6811c2f9e9d7269を参照してください

2)ホストにNVIDIA独自のドライバーをダウンロードします。

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3)ツールボックス内にいる間にドライバーをインストールします。

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

全てのコメント16件

ツールボックスはコンテナです。グラフィックカードを内部にマッピングするか、nvidia-dockerと同じように処理する必要があります。

@Findarato --volume /dev/nvidia0:/dev/nvidia0や他の/ devファイルのようなものを追加するという意味ですか?

したがって、ツールボックス内でNVIDIAのもの​​を機能させるには、これを行う必要がありました(https://github.com/thewtex/docker-opengl-nvidiaに触発されました)。

1)/ dev / nvidia0と/ dev / nvidiactlをツールボックスにバインドマウントしてX11のものをセットアップするには、ツールボックスにパッチを適用する必要があります-https://github.com/tpopela/toolbox/commit/40231e8​​591d70065199c0df9b6811c2f9e9d7269を参照してください

2)ホストにNVIDIA独自のドライバーをダウンロードします。

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3)ツールボックス内にいる間にドライバーをインストールします。

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

@tpopelaそれは

うまくいったことをうれしく思います! ただし、ホストの再起動後に誤動作を引き起こす可能性のある間違いがありました。前のパッチに加えてhttps://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04を適用する必要があります。

@tpopela /tmp/.x11-unixをバインドマウントせずに逃げることができるかもしれません。 最近、X.orgサーバーはファイルシステム上の抽象UNIXソケットとUNIXソケットをリッスンします。 前者はネットワーク名前空間がある場合は機能しませんが、ツールボックスには名前空間がありません( podman create --net host )。そのため、Xアプリケーションが機能します。 後者は/tmp/.x11-unixあり、Flatpakコンテナにはネットワーク名前空間があるため使用されます。

参照:

ああ、@ debarshiray! ご説明ありがとうございます。 /tmp/X11-unixバインドマウントしなくても何も変わらず、統合が機能することを確認できます(ここでBlenderを実行しようとしました)。

/dev全体をバインドマウントした後、おそらく小さな変更があります。 BlenderはPATHでnvcc (CUDAのもの)を探すようになりましたが、見つかりません。

https://github.com/debarshiray/toolbox/pull/119のマージにより、Nvidiaは現在プロプライエタリドライバーで動作しているため、この問題は解決される可能性があり@tpopelaスクリプトは、ドライバーのインストールに役立ちます。 @tpopela CUDAToolkitをインストールする必要があります。 インストールするために、パラメーター--override--toolkitを渡しました。 CUDA Toolkit Blenderをインストールした後、CUDAを使用してレンダリングするオプションを表示します。 しかし残念ながら、CUDAはGCC9では動作しません:(

NVIDIAホストドライバーをコンテナーにリークすることについて@debarshirayと考えていた

それは素晴らしいことです!

NVIDIAホストドライバーをにリークすることについて@debarshirayと考えていました
コンテナなので、コンテナにドライバを手動でインストールする必要はありません。

はい、これが正しいことであることに同意します。 OpenGLドライバーには、カーネルモジュールと、相互に通信するいくつかのユーザースペースコンポーネント(共有ライブラリなど)があります。 NVIDIAの場合、これら2つのコンポーネント間のインターフェイスは安定していないため、コンテナ内のユーザースペースビットはホスト上のカーネルモジュールと一致する必要があります。 ホストがコンテナより遅れている場合、またはその逆の場合、これら2つは同期しなくなる可能性があります。

ファイルをコンテナにリークする際の問題は、バージョンごとに異なるため、それらのファイルのリストをどこかに維持することです。 ホストのどこかにバインドマウント可能な既知のnvidiaディレクトリがあれば、個々のファイル自体の名前と場所を気にする必要がないため、これは非常に簡単です。 残念ながら、そうではありません。

周りを見回すと、Flatpakのソリューションが妥当な妥協点であることがわかりました。 要するに、それはこのよく知られているnvidiaディレクトリを発明して実施します。 ホストOSのディストリビューターがすべてのユーザースペースファイルを/var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4に入れることを期待しており、これはNVIDIAドライバーを出荷するパッケージを変更することで実装されます。

これが完了したら、これらのファイルをコンテナー内のどこに配置するか、およびコンテナーのランタイム環境をそれらに向ける方法を理解する必要があります。

Nvidiaには、このnvidia-container-runtime-hookに対する独自のソリューションがあります。これは、ociprestartフックによってトリガーされるpodmanで非常にうまく機能します。 --uidmapを使用しているときに問題が発生し、 ldconfigを実行する権限が失われました。

could not start /sbin/ldconfig: mount operation failed: /proc: operation not permitted

ツールボックスは、別の実装を維持するよりも、この既存のツールと統合しようとする方がよい場合があります。

uidmap権限の問題に関連する問題:

https://github.com/NVIDIA/libnvidia-container/issues/49

ツールボックスのバグ#343でsteamを実行しようとしていました。ツールボックスにパッチを適用しなかったため、steamが実行され、openglが機能しますが、vulkanが機能しないようです。蒸気で、vkmarkとRise of TombRaiderを試しました。

それを機能させる方法について何かアイデアはありますか?

Singularity ccontainerがlibnvidia-containerなしでこの問題を修正するのを見ました。 彼らは必要なファイルのリストを使用し

では、2021年にコンテナでNvidia GPUドライバーを使用した状況はどうなっていますか?
/dev/nvidia0/dev/nvidiactlをマウントできます。
ただし、Nvidiaドライバーを正常にインストールできません。 インストールは正常に進行しますが、 modinfo -F version nvidia確認するとエラーが発生します。
modinfo: ERROR: Module alias nvidia not found.
また、Nvidia Container ToolkitはFedoraで公式にサポートされていないため、FedoraSilverblueで使用するのは良い考えではないようです。

このページは役に立ちましたか?
0 / 5 - 0 評価