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​​591d70065199c0df9b6811c2f9e9d726

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条评论

Toolbox 是一个容器,你必须在里面映射你的显卡,或者像 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​​591d70065199c0df9b6811c2f9e9d726

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 现在正在使用专有驱动程序。 只需要在工具箱容器内安装一次 nvidia 驱动程序。 @tpopela脚本有助于驱动程序安装。 @tpopela你必须安装CUDA Toolkit 。 为了安装它,我传递了参数--override--toolkit 。 安装 CUDA Toolkit Blender 后,向我展示使用 CUDA 进行渲染的选项。 但不幸的是,CUDA 不适用于 GCC9 :(

实际上,我会将其保持打开状态(但我会将其保留在 Rishi 上),因为我们正在与@debarshiray一起考虑将 NVIDIA 主机驱动程序泄漏到容器中,因此无需在容器中手动安装驱动程序。 我们有一个有效的 WIP 解决方案。

那太好了!

我们正在考虑@debarshiray将 NVIDIA 主机驱动程序泄露给
容器,因此无需在容器中手动安装驱动程序。

是的,我同意这是正确的做法。 OpenGL 驱动程序有一个内核模块和一些相互通信的用户空间组件(例如,共享库)。 在 NVIDIA 的情况下,这两个组件之间的接口不稳定,因此容器内的用户空间位必须与主机上的内核模块匹配。 如果您的主机落后于容器,这两者可能会不同步,反之亦然。

将文件泄漏到容器中的问题是在某处维护这些文件的列表,因为它们因版本而异。 如果主机上某处有一个众所周知的nvidia目录可以绑定挂载,这将简单得多,因为这样我们就不必担心单个文件本身的名称和位置。 不幸的是,情况并非如此。

环顾四周,我发现 Flatpak 的解决方案是一个合理的妥协。 简而言之,它发明​​并执行了这个众所周知的nvidia目录。 它希望主机操作系统的发行商将所有用户空间文件放在/var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 ,这是通过修改运送 NVIDIA 驱动程序的包

完成后,我们需要弄清楚将这些文件放置在容器内的什么位置以及如何将容器的运行时环境指向它们。

Nvidia 对此nvidia-container-runtime-hook有自己的解决方案,它与 oci 预启动钩子触发的 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 似乎不起作用,在 Steam 上尝试了 vkmark 和古墓丽影的崛起。

任何想法如何让它工作?

我看到Singularity ccontainer 在没有libnvidia-container情况下解决了这个问题。 他们使用所需文件的列表

那么2021年容器中使用英伟达GPU驱动的现状如何呢?
我可以安装/dev/nvidia0/dev/nvidiactl
但是,我无法成功安装 Nvidia 驱动程序。 安装正常进行,但检查modinfo -F version nvidia给出错误:
modinfo: ERROR: Module alias nvidia not found.
而且 Nvidia Container Toolkit 在 Fedora 中并未得到官方支持,因此与 Fedora Silverblue 一起使用似乎不是一个好主意。

此页面是否有帮助?
0 / 5 - 0 等级