Toolbox: Проприетарный драйвер Nvidia

Созданный на 16 апр. 2019  ·  16Комментарии  ·  Источник: containers/toolbox

Во-первых, отличный проект!

Если я использую проприетарный драйвер Nvidia, программное обеспечение OpenGL (например, Blender) не работает внутри контейнера панели инструментов. Я попытался установить проприетарный драйвер внутри контейнера, он устанавливается, но программное обеспечение OpenGL не работает. Надо ли еще устанавливать? Или установить какую-нибудь переменную env?

Спасибо!

1. Bug 5. Help Wanted

Самый полезный комментарий

Итак, чтобы элементы NVIDIA работали внутри Toolbox, мне пришлось сделать это (вдохновленный https://github.com/thewtex/docker-opengl-nvidia):

1) Вам необходимо исправить Toolbox, чтобы привязать монтирование / dev / nvidia0 и / dev / nvidiactl к Toolbox и настроить X11 - см. Https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

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) Установите драйверы, находясь внутри Toolbox:

#!/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 работали внутри Toolbox, мне пришлось сделать это (вдохновленный https://github.com/thewtex/docker-opengl-nvidia):

1) Вам необходимо исправить Toolbox, чтобы привязать монтирование / dev / nvidia0 и / dev / nvidiactl к Toolbox и настроить X11 - см. Https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

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) Установите драйверы, находясь внутри Toolbox:

#!/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 в файловой системе. Первое не работает, если у вас есть сетевое пространство имен, но в Toolbox его нет (потому что podman create --net host ), и поэтому приложения X работают. Последний расположен по адресу /tmp/.x11-unix и используется контейнерами Flatpak, поскольку у них есть сетевые пространства имен.

Использованная литература:

А, ладно, @debarshiray! Спасибо за разъяснения. Я могу подтвердить, что отсутствие привязки при установке /tmp/X11-unix ничего не меняет и интеграция работает (здесь пытался запустить Blender).

Возможно, будет небольшое изменение после того, как мы монтируем весь /dev . Блендер теперь ищет nvcc (материал CUDA) в PATH и не может его найти.

Благодаря слиянию https://github.com/debarshiray/toolbox/pull/119 эта проблема может быть закрыта, поскольку Nvidia теперь работает с проприетарным драйвером. Просто необходимо установить драйвер nvidia один раз внутри контейнера панели инструментов. @tpopela «s сценариев помогает при установке драйвера. @tpopela вам необходимо установить CUDA Toolkit . Чтобы установить его, я передал параметры --override и --toolkit . После установки CUDA Toolkit Blender покажет мне вариант рендеринга с использованием CUDA. Но, к сожалению, CUDA не работает с GCC9 :(

На самом деле я бы оставил это открытым (но я оставлю это на Риши), поскольку мы думали с @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 которое очень хорошо работает с podman, запускаемым предварительным запуском oci. У меня просто возникают проблемы при использовании --uidmap s, что приводит к потере разрешений на запуск ldconfig :

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

Для набора инструментов может быть лучше попытаться интегрироваться с этим существующим инструментом, чем поддерживать другую реализацию.

Проблема, связанная с проблемой разрешения uidmap:

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

Я пытался запустить Steam в баге панели инструментов # 343 Я не пропатчил панель инструментов, запускает Steam и работает opengl, но vulkan, похоже, не работает, попробовал vkmark и Rise of Tomb Raider в Steam.

Есть идеи, как заставить его работать?

Я видел, что ccontainer Singularity решает эту проблему без libnvidia-container . Они используют список необходимых файлов

Итак, каков статус использования драйверов графического процессора Nvidia в контейнере в 2021 году?
Я могу смонтировать /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 рейтинги