Toolbox: Driver proprietário Nvidia

Criado em 16 abr. 2019  ·  16Comentários  ·  Fonte: containers/toolbox

Primeiro, ótimo projeto!

Se estou usando um driver proprietário da Nvidia, os softwares OpenGL (como o Blender) não funcionam dentro do contêiner da caixa de ferramentas. Tentei instalar o driver proprietário dentro do container, ele instala, mas os softwares OpenGL não funcionam. É necessário instalar mais coisas? Ou definir alguma variável env?

Obrigado!

1. Bug 5. Help Wanted

Comentários muito úteis

Então, para ter as coisas da NVIDIA funcionando dentro da caixa de ferramentas, eu tive que fazer isso (inspirado em https://github.com/thewtex/docker-opengl-nvidia):

1) Você deve corrigir a caixa de ferramentas para vincular a montagem / dev / nvidia0 e / dev / nvidiactl à caixa de ferramentas e configurar as coisas do X11 - consulte https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Baixe os drivers proprietários NVIDIA no host:

#!/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) Instale os drivers enquanto estiver dentro da caixa de ferramentas:

#!/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"

Todos 16 comentários

A caixa de ferramentas é um contêiner, você teria que mapear sua placa gráfica dentro ou fazer as coisas da maneira que o nvidia-docker faz.

@Findarato Você quer dizer adicionar algo como --volume /dev/nvidia0:/dev/nvidia0 e outros arquivos / dev?

Então, para ter as coisas da NVIDIA funcionando dentro da caixa de ferramentas, eu tive que fazer isso (inspirado em https://github.com/thewtex/docker-opengl-nvidia):

1) Você deve corrigir a caixa de ferramentas para vincular a montagem / dev / nvidia0 e / dev / nvidiactl à caixa de ferramentas e configurar as coisas do X11 - consulte https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Baixe os drivers proprietários NVIDIA no host:

#!/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) Instale os drivers enquanto estiver dentro da caixa de ferramentas:

#!/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 funcionou. Obrigado!

Estou feliz que funcionou! Mas houve um erro que pode levar a mau funcionamento após o host ser reiniciado - você precisará aplicar https://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04 sobre o patch anterior.

@tpopela Podemos conseguir escapar sem vincular a montagem /tmp/.x11-unix . Hoje em dia, o servidor X.org escuta em um soquete UNIX abstrato e um soquete UNIX no sistema de arquivos. O primeiro não funciona se você tiver um namespace de rede, mas a caixa de ferramentas não tem um (porque podman create --net host ), e é por isso que os aplicativos X funcionam. O último está localizado em /tmp/.x11-unix e é usado por contêineres Flatpak porque eles têm namespaces de rede.

Referências:

Ah ok @debarshiray! Obrigado pelo esclarecimento. Posso confirmar que não ligar montando o /tmp/X11-unix não muda nada e a integração funciona (tentei rodar o Blender aqui).

Talvez haja uma pequena mudança depois de montarmos o /dev inteiro. O Blender agora procura por nvcc (coisas CUDA) no PATH e não consegue encontrar.

Com a fusão de https://github.com/debarshiray/toolbox/pull/119 este problema pode ser resolvido, já que a Nvidia está trabalhando agora com driver proprietário. É apenas necessário instalar o driver nvidia uma vez dentro do contêiner da caixa de ferramentas. Os scripts de @tpopela ajudam na instalação do driver. @tpopela, você deve instalar o CUDA Toolkit . Para fazer a instalação, passei os parâmetros --override e --toolkit . Depois de instalar o CUDA Toolkit Blender, mostre a opção de renderizar usando CUDA. Mas, infelizmente, CUDA não funciona com GCC9 :(

Na verdade, eu deixaria isso aberto (mas vou deixar no Rishi), pois estávamos pensando com @debarshiray sobre o vazamento dos drivers do host NVIDIA para o contêiner, então não haverá necessidade de instalar manualmente os drivers no contêiner. Temos uma solução WIP funcional para isso.

Isso seria bom!

estávamos pensando com @debarshiray sobre o vazamento de drivers de host NVIDIA para o
contêiner, portanto, não haverá necessidade de instalar manualmente os drivers no contêiner.

Sim, concordo que essa será a coisa certa a fazer. Os drivers OpenGL têm um módulo de kernel e alguns componentes do espaço do usuário (por exemplo, bibliotecas compartilhadas) que se comunicam entre si. No caso da NVIDIA, a interface entre esses dois componentes não é estável e, portanto, os bits do espaço do usuário dentro do contêiner devem corresponder ao módulo do kernel no host. Esses dois podem ficar fora de sincronia se o seu host estiver atrasado em relação ao contêiner ou vice-versa.

O problema de vazar os arquivos para o contêiner é manter uma lista desses arquivos em algum lugar, porque eles variam de versão para versão. Isso seria muito mais simples se houvesse um diretório nvidia bem conhecido em algum lugar do host que pudesse ser montado por bind, porque então não teríamos que nos preocupar com os nomes e localizações dos próprios arquivos individuais. Infelizmente, esse não é o caso.

Olhando em volta, descobri que a solução da Flatpak era um meio-termo razoável. Resumindo, ele inventa e reforça esse conhecido diretório nvidia . Ele espera que os distribuidores do sistema operacional hospedeiro coloquem todos os arquivos do espaço do usuário em /var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 e isso é implementado modificando o pacote de envio do driver NVIDIA.

Feito isso, precisaríamos descobrir onde colocar esses arquivos dentro do contêiner e como apontar o ambiente de tempo de execução do contêiner para eles.

A Nvidia tem sua própria solução para este nvidia-container-runtime-hook que funciona muito bem com o podman acionado por um gancho oci prestart. Acabei de ter problemas no momento ao usar --uidmap s, resultando na perda de permissões para executar ldconfig :

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

Pode ser melhor para a caixa de ferramentas tentar se integrar a essa ferramenta existente, em vez de manter outra implementação.

Problema relacionado ao problema de permissão do uidmap:

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

Eu estava tentando usar o Steam no bug # 343 da caixa de ferramentas. Não fiz patch, o Steam funciona e o opengl funciona, mas o Vulkan não parece funcionar, tentei o vkmark e o Rise of Tomb Raider no Steam.

Alguma ideia de como fazê-lo funcionar?

Vi que o ccontainer do Singularity corrigiu esse problema sem libnvidia-container . Eles usam uma lista de arquivos necessários

Então, qual é o status do uso de drivers de GPU da Nvidia no contêiner em 2021?
Posso /dev/nvidia0 e /dev/nvidiactl estão montados.
No entanto, não consigo instalar os drivers da Nvidia com sucesso. A instalação prossegue normalmente, mas a verificação de modinfo -F version nvidia resulta em erro:
modinfo: ERROR: Module alias nvidia not found. .
E o Nvidia Container Toolkit não é oficialmente suportado no Fedora, então não parece uma boa ideia usar com o Fedora Silverblue.

Esta página foi útil?
0 / 5 - 0 avaliações