1 pontos por GN⁺ 2024-04-13 | Ainda não há comentários. | Compartilhar no WhatsApp

Adicionado suporte a P2P ao driver NVIDIA Linux Open GPU

Este projeto fez um fork do driver da NVIDIA para adicionar suporte a P2P à GPU 4090.

  • Instalação simples com a execução de ./install.sh
  • Pode ser necessário remover primeiro o driver existente no DKMS
  • O sistema precisa de suporte a Large BAR, e o IOMMU deve estar desativado
  • Não há certeza de que todos os flushes de cache estejam corretos, então, se encontrar algum problema, por favor reporte
  • Isto não é um hack, mas uma implementação conforme a especificação PCIe; com uma boa organização, pode acabar sendo incorporado ao upstream

Como funciona

Problemas do P2P existente da NVIDIA

  • Antes, a transferência de memória entre GPUs usava uma interface de hardware chamada MAILBOXP2P
  • Na 4090, esse hardware não existe ou está desativado, então o P2P não funciona
  • Nos drivers iniciais, foi reportado que funcionava incorretamente, mas na prática a transferência estava sendo feita pelo barramento PCIe
  • Porém, como não havia o hardware de mailbox, o conteúdo copiado não ia para o lugar correto e podia causar travamentos no sistema

Adição de suporte a Large BAR

  • A NVIDIA adicionou suporte a Large BAR em algumas 3090 e em todas as 4090
  • No H100, foi adicionado um modo PCIe chamado BAR1P2P, que usa diretamente o BAR em vez do mailbox
  • Para ativar isso na 4090, é necessário contornar a HAL e chamar diretamente métodos do GH100
    • Mapear toda a VRAM no BAR1 com métodos como kbusEnableStaticBar1Mapping_GH100
    • Também foi necessário desativar o uso dessa área na função MapAperture

Dificuldades para ativar o P2P

  • Mesmo após mapear a VRAM, ocorreu um erro de MMU ao executar ./simpleP2P do cuda-samples
    • GMMU_APERTURE_PEER é usado como tipo de mapeamento, mas não é suportado na 4090
    • Os tipos suportados na 4090 são apenas GMMU_APERTURE_VIDEO, GMMU_APERTURE_SYS_NONCOH e GMMU_APERTURE_SYS_COH
  • GMMU_APERTURE_PEER foi alterado para GMMU_APERTURE_SYS_NONCOH
    • Porque não é necessária coerência com o cache L2 da CPU, mas os dados precisam sair pelo barramento PCIe
  • O campo de endereço peer, fldAddrPeer, foi alterado para fldAddrSysmem
  • O endereço base de referência do BAR1 foi definido no campo fabricBaseAddress

Verificação de funcionamento

  • Confirmado o funcionamento normal de ./simpleP2P
    • O P2P entre GPU0 e GPU1 operou a 24GB/s
  • Verificada a largura de banda bidirecional com p2pBandwidthLatencyTest
    • Foram medidos 920GB/s de largura de banda local e 51GB/s de largura de banda P2P
  • Compatibilidade confirmada com testes do NCCL
    • Com 6 GPUs 4090, foi alcançada uma largura de banda média de barramento de 24.5GB/s

Opinião do GN⁺

  • Como a maior parte do driver da NVIDIA foi publicada como open source, parece ter sido possível à comunidade de desenvolvedores fazer esse tipo de tentativa. Fica a expectativa de que ainda mais partes sejam abertas no futuro.
  • Se passar a ser possível conectar e aproveitar várias 4090 de alto desempenho, até desenvolvedores individuais ou pequenos laboratórios poderão treinar modelos de IA em escala muito maior.
  • Por outro lado, o fato de os desenvolvedores ainda precisarem mexer diretamente nessas partes tão dependentes de hardware e delicadas também mostra que a NVIDIA ainda não concluiu totalmente o suporte à 4090.
  • Além disso, isso se limita ao driver para Linux, e o uso comercial no Windows ainda parece distante. Tomara que o suporte oficial da NVIDIA chegue o quanto antes.
  • Como a 4090 ainda é um hardware muito recente, provavelmente é difícil esperar compatibilidade perfeita com bibliotecas e frameworks de ML como CUDA, PyTorch e Tensorflow. Parece melhor aguardar até que tudo fique mais estável.

Ainda não há comentários.

Ainda não há comentários.