Driver hackeado da GPU Nvidia 4090 ativa P2P
(github.com/tinygrad)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
- Mapear toda a VRAM no BAR1 com métodos como
Dificuldades para ativar o P2P
- Mesmo após mapear a VRAM, ocorreu um erro de MMU ao executar
./simpleP2Pdocuda-samplesGMMU_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_NONCOHeGMMU_APERTURE_SYS_COH
GMMU_APERTURE_PEERfoi alterado paraGMMU_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 parafldAddrSysmem - O endereço base de referência do
BAR1foi definido no campofabricBaseAddress
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.