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
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
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 : * rwmlxc.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
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.runPara 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
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ãoComo 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ódigoNavegue até o diretório do projeto “~/code” da seguinte forma:
$ cd `/ códigoCrie 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á.cuDigite 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
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.