Como passar a GPU NVIDIA para contêineres Proxmox VE 8 para aceleração CUDA/AI e transcodificação de mídia

Como Passar A Gpu Nvidia Para Conteineres Proxmox Ve 8 Para Aceleracao Cuda Ai E Transcodificacao De Midia



Se você tiver uma GPU NVIDIA instalada em seu servidor Proxmox VE, poderá passá-la para um contêiner Proxmox VE LXC e usá-la no contêiner para aceleração CUDA/AI (ou seja, TensorFlow, PyTorch). Você também pode usar a GPU NVIDIA para transcodificação de mídia, streaming de vídeo, etc. em um contêiner Proxmox VE LXC com o Plex Media Server ou NextCloud instalado (por exemplo).

Neste artigo, mostraremos como passar uma GPU NVIDIA para um contêiner Proxmox VE 8 LXC para que você possa usá-lo para aceleração CUDA/AI, transcodificação de mídia ou outras tarefas que exijam uma GPU NVIDIA.







Tópico de Conteúdo:

Instalando os drivers de GPU NVIDIA no Proxmox VE 8

Para passar uma GPU NVIDIA para um contêiner Proxmox VE LXC, você deve ter os drivers de GPU NVIDIA instalados em seu servidor Proxmox VE 8. Se você precisar de ajuda para instalar a versão mais recente dos drivers oficiais de GPU NVIDIA em seu servidor Proxmox VE 8, leia este artigo .



Certificando-se de que os módulos do kernel da GPU NVIDIA são carregados automaticamente no Proxmox VE 8

Depois de instalar os drivers da GPU NVIDIA em seu servidor Proxmox VE 8, você deve certificar-se de que os módulos do kernel da GPU NVIDIA sejam carregados automaticamente no momento da inicialização.



Primeiro, crie um novo arquivo como “nvidia.conf” no diretório “/etc/modules-load.d/” e abra-o com o editor de texto nano.





$ nano / etc. / módulos-load.d / nvidia.conf

Adicione as seguintes linhas e pressione + X seguido por “Y” e para salvar o arquivo “nvidia.conf”:



nvidia

nvidia_uvm

Para que as alterações tenham efeito, atualize o arquivo “initramfs” com o seguinte comando:

$ atualização-initramfs -em

Por algum motivo, o Proxmox VE 8 não cria os arquivos necessários do dispositivo GPU NVIDIA no diretório “/dev/”. Sem esses arquivos de dispositivo, os contêineres Promox VE 8 LXC não poderão usar a GPU NVIDIA.

Para garantir que o Proxmox VE 8 crie os arquivos do dispositivo GPU NVIDIA no diretório '/dev/' no momento da inicialização, crie um arquivo de regras do udev '70-nvidia.rules' no diretório '/etc/udev/rules.d/' diretório e abra-o com o editor de texto nano da seguinte forma:

$ nano / etc. / udev / regras.d / 70 -nvidia.rules

Digite as seguintes linhas no arquivo “70-nvidia.rules” e pressione + X seguido por “Y” e para salvar o arquivo:

# cria os arquivos necessários do dispositivo NVIDIA em /dev/*

NÚCLEO == 'nvidia' , EXECUTAR+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''

NÚCLEO == 'nvidia_uvm' , EXECUTAR+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

Para que as alterações tenham efeito, reinicie o servidor Proxmox VE 8 da seguinte maneira:

$ reinício

Assim que o servidor Proxmox VE 8 inicializar, os módulos do kernel NVIDIA devem ser carregados automaticamente, como você pode ver na imagem a seguir:

$ lsmod | pegada nvidia

Os arquivos necessários do dispositivo NVIDIA também devem ser preenchidos no diretório “/dev” do servidor Proxmox VE 8. Observe os IDs do CGroup dos arquivos do dispositivo NVIDIA. Você deve permitir esses IDs CGroup no contêiner LXC onde deseja passar as GPUs NVIDIA do seu servidor Proxmox VE 8. No nosso caso, os IDs do CGroup são 195, 237 e 226.

$ eu -lh / desenvolvedor / nvidia *

$ eu -lh / desenvolvedor / dr

Criando um contêiner Proxmox VE 8 LXC para NVIDIA GPU Passthrough

Usamos um contêiner Ubuntu 22.04 LTS Proxmox VE 8 LXC neste artigo para demonstração, já que as bibliotecas NVIDIA CUDA e NVIDIA cuDNN são fáceis de instalar no Ubuntu 22.04 LTS a partir dos repositórios de pacotes do Ubuntu e é mais fácil testar se a aceleração NVIDIA CUDA está funcionando . Se desejar, você também pode usar outras distribuições Linux. Nesse caso, os comandos de instalação NVIDIA CUDA e NVIDIA cuDNN irão variar. Certifique-se de seguir as instruções de instalação NVIDIA CUDA e NVIDIA cuDNN para a distribuição Linux desejada.

Se você precisar de ajuda na criação de um contêiner Proxmox VE 8 LXC, leia este artigo .

Configurando um contêiner LXC para NVIDIA GPU Passthrough no Promox VE 8

Para configurar um contêiner LXC (contêiner 102, digamos) para passagem de GPU NVIDIA, abra o arquivo de configuração do contêiner LXC no shell Proxmox VE com o editor de texto nano da seguinte maneira:

$ nano / etc. / pvv / lxc / 102 .conf

Digite as seguintes linhas no final do arquivo de configuração do contêiner LXC:

lxc.cgroup.devices.allow: c 195 : * rwm

lxc.cgroup.devices.allow: c 237 : * rwm

lxc.cgroup.devices.allow: c 226 : * rwm

lxc.mount.entry: / desenvolvedor / nvidia0          dev / nvidia0          nenhum vincular ,opcional, criar = arquivo

lxc.mount.entry: / desenvolvedor / nvidiactl        dev / nvidiactl        nenhum vincular ,opcional, criar = arquivo

lxc.mount.entry: / desenvolvedor / nvidia-modeset   dev / nvidia-modeset   nenhum vincular ,opcional, criar = arquivo

lxc.mount.entry: / desenvolvedor / nvidia-uvm       dev / nvidia-uvm       nenhum vincular ,opcional, criar = arquivo

lxc.mount.entry: / desenvolvedor / nvidia-uvm-tools dev / nvidia-uvm-tools nenhum vincular ,opcional, criar = arquivo

lxc.mount.entry: / desenvolvedor / dri              dev / dri              nenhum vincular ,opcional, criar = você

Certifique-se de substituir os IDs do CGroup nas linhas “lxc.cgroup.devices.allow” do arquivo de configuração do contêiner LXC. Quando terminar, pressione + X seguido por “Y” e para salvar o arquivo de configuração do contêiner LXC.

Agora, inicie o contêiner LXC no painel do Proxmox VE 8.

Se a passagem da GPU NVIDIA for bem-sucedida, o contêiner LXC será iniciado sem nenhum erro e você verá os arquivos do dispositivo NVIDIA no diretório “/dev” do contêiner.

$ eu -lh / desenvolvedor / nvidia *

$ eu -lh / desenvolvedor / dr

Instalando os drivers de GPU NVIDIA no contêiner Proxmox VE 8 LXC

Estamos usando um contêiner Ubuntu 22.04 LTS LXC em nosso servidor Proxmox VE 8 para demonstração. Se você estiver usando outra distribuição Linux no contêiner LXC, seus comandos serão ligeiramente diferentes dos nossos. Portanto, certifique-se de ajustar os comandos dependendo da distribuição Linux que você está usando no contêiner.

Você pode encontrar a versão dos drivers da GPU NVIDIA instalada no servidor Proxmox VE 8 com o comando “nvidia-smi”. Como você pode ver, temos os drivers de GPU NVIDIA versão 535.146.02 instalados em nosso servidor Proxmox VE 8. Portanto, também devemos instalar os drivers de GPU NVIDIA versão 535.146.02 em nosso contêiner LXC.

$ nvidia-smi

Primeiro, instale o CURL no contêiner LXC da seguinte maneira:

$ atualização adequada && apto instalar ondulação -e

CURL deve ser instalado no contêiner LXC.

Para instalar os drivers de GPU NVIDIA versão 535.146.02 (digamos), exporte a variável de ambiente NVIDIA_VERSION e execute o comando CURL (no contêiner) para fazer download da versão necessária do arquivo de instalação dos drivers de GPU NVIDIA.

$ exportar NVIDIA_VERSION = '535.146.02'

$ enrolar -O 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .correr'

A versão correta do arquivo de instalação dos drivers de GPU NVIDIA deve ser baixada no contêiner LXC, como você pode ver na captura de tela a seguir:

Agora, adicione uma permissão executável ao arquivo de instalação dos drivers de GPU NVIDIA no contêiner da seguinte maneira:

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

Para instalar os drivers de GPU NVIDIA no contêiner, execute o arquivo de instalação dos drivers de GPU NVIDIA com o “–no-kernel-module” opção da seguinte forma:

$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-kernel-módulo

Depois de ver esta opção, selecione “OK” e pressione .

Selecione “OK” e pressione .

Selecione “Sim” e pressione .

Selecione “OK” e pressione .

Os drivers da GPU NVIDIA estão sendo instalados no contêiner LXC. Demora alguns segundos para ser concluído.

Depois de ver este prompt, selecione “Sim” e pressione .

Selecione “OK” e pressione . Os drivers da GPU NVIDIA devem ser instalados no contêiner LXC.

Para confirmar se os drivers da GPU NVIDIA estão instalados e funcionando, execute o comando “nvidia-smi” no contêiner LXC. Como você pode ver, o driver da GPU NVIDIA versão 535.146.02 (a mesma versão instalada no servidor Proxmox VE 8) está instalado no contêiner LXC e detectou nossa GPU NVIDIA RTX 4070 corretamente.

$ nvidia-smi

Instalando NVIDIA CUDA e cuDNN no contêiner Proxmox VE 8 LXC

Estamos usando um contêiner Ubuntu 22.04 LTS LXC em nosso servidor Proxmox VE 8 para demonstração. Se você estiver usando outra distribuição Linux no contêiner LXC, seus comandos serão ligeiramente diferentes dos nossos. Portanto, certifique-se de ajustar os comandos dependendo da distribuição Linux que você está usando no contêiner.

Para instalar NVIDIA CUDA e cuDNN no contêiner Ubuntu 22.04 LTS Proxmox VE 8, execute o seguinte comando no contêiner:

$ apto instalar build-essencial nvidia-cuda-toolkit nvidia-cudnn

Para confirmar a instalação, pressione “Y” e depois pressione .

Os pacotes necessários estão sendo baixados e instalados. Demora um pouco para ser concluído.

Depois de ver esta janela, selecione “OK” e pressione .

Selecione “Concordo” e pressione .

A instalação deve continuar.

O instalador está baixando o arquivo da biblioteca NVIDIA cuDNN da NVIDIA. É um arquivo grande, por isso leva muito tempo para ser concluído.

Depois que o arquivo da biblioteca NVIDIA cuDNN for baixado, a instalação deverá continuar normalmente.

Neste ponto, NVIDIA CUDA e cuDNN devem ser instalados no contêiner Ubuntu 22.04 LTS Proxmox VE 8 LXC.

Verificando se a aceleração NVIDIA CUDA está funcionando no contêiner Proxmox VE 8 LXC

Para verificar se o NVIDIA CUDA está instalado corretamente, verifique se o comando “nvcc” está disponível no contêiner Proxmox VE 8 da seguinte maneira:

$ nvcc --versão

Como você pode ver, temos NVIDIA CUDA 11.5 instalado em nosso contêiner Proxmox VE 8.

Agora, vamos escrever, compilar e executar um programa CUDA C simples e ver se tudo está funcionando conforme o esperado.

Primeiro, crie um diretório de projeto “~/code” no contêiner Proxmox VE 8 para manter os arquivos organizados.

$ mkdir ~ / código

Navegue até o diretório do projeto “~/code” da seguinte forma:

$ cd `/ código

Crie um novo arquivo como “hello.cu” no diretório “~/code” do contêiner Proxmox VE 8 e abra-o com o editor de texto nano:

$ nano olá.cu

Digite as seguintes linhas de código no arquivo “hello.cu”:

#include

__global__ void diga Olá ( ) {
imprimir ( 'Olá, mundo da GPU! \n ' ) ;
}

principal interno ( ) {
imprimir ( 'Olá mundo da CPU! \n ' ) ;

diga olá << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;

retornar 0 ;
}

Quando terminar, pressione + X seguido por “Y” e para salvar o arquivo “hello.cu”.

Para compilar o programa CUDA “hello.cu” no contêiner Proxmox VE 8, execute os seguintes comandos:

$ nvcc olá.cu -o olá

Agora, você pode executar o programa CUDA “hello” no contêiner Proxmox VE 8 da seguinte maneira:

$ . / olá

Se o contêiner Proxmox VE 8 puder usar a GPU NVIDIA para aceleração NVIDIA CUDA, o programa imprimirá duas linhas conforme mostrado na captura de tela a seguir.

Se a GPU NVIDIA não estiver acessível a partir do contêiner Proxmox VE 8, o programa imprimirá apenas a primeira linha que é “Olá, mundo da CPU!”, e não a segunda linha.

Conclusão

Neste artigo, mostramos como passar uma GPU NVIDIA do host Proxmox VE 8 para um contêiner Proxmox VE 8 LXC. Também mostramos como instalar a mesma versão dos drivers de GPU NVIDIA no contêiner Proxmox VE 8 que o host Proxmox VE. Por fim, mostramos como instalar NVIDIA CUDA e NVIDIA cuDNN em um contêiner Ubuntu 22.04 LTS Proxmox VE 8 e compilar e executar um programa NVIDIA CUDA simples no contêiner Proxmox VE 8.

Referências: