Driver hackeado de GPU Nvidia 4090 habilita P2P
(github.com/tinygrad)Se agrega soporte P2P al driver Open GPU de NVIDIA para Linux
Este proyecto hace un fork del driver de NVIDIA para agregar soporte P2P a la GPU 4090.
- Se puede instalar fácilmente ejecutando
./install.sh - Puede ser necesario quitar primero el driver existente en DKMS
- El sistema necesita soporte para Large BAR y se debe desactivar IOMMU
- No hay total certeza de que todos los flushes de caché sean correctos, así que si encuentras algún problema, repórtalo
- Esto no es un hack, sino una implementación conforme a la especificación de PCIe, y si se ordena bien podría incorporarse upstream
Cómo funciona
Problemas del P2P existente de NVIDIA
- Antes se usaba una interfaz de hardware llamada MAILBOXP2P para transferir memoria entre GPUs
- En la 4090 este hardware no existe o está deshabilitado, por lo que P2P no funciona
- En los drivers iniciales se reportaba incorrectamente que funcionaba, pero en realidad estaba transfiriendo por el bus PCIe
- Sin embargo, como no había hardware de mailbox, el contenido copiado no llegaba al lugar correcto y podía causar un crash del sistema
Se agrega soporte Large BAR
- NVIDIA agregó soporte Large BAR en algunas 3090 y en todas las 4090
- En la H100 agregó un modo PCIe llamado BAR1P2P, que usa BAR directamente en lugar de mailbox
- Para activarlo en la 4090 hubo que saltarse el HAL y llamar directamente a métodos de GH100
- Mapear toda la VRAM en BAR1 con métodos como
kbusEnableStaticBar1Mapping_GH100 - En la función
MapAperturefue necesario deshabilitar el uso de esa región
- Mapear toda la VRAM en BAR1 con métodos como
Dificultades para habilitar P2P
- Incluso después de mapear la VRAM, al ejecutar
./simpleP2Pdecuda-samplesaparecía un error de MMU- Usa
GMMU_APERTURE_PEERcomo tipo de mapeo, pero la 4090 no lo soporta - Los tipos soportados en la 4090 son
GMMU_APERTURE_VIDEO,GMMU_APERTURE_SYS_NONCOHyGMMU_APERTURE_SYS_COH
- Usa
- Se cambió
GMMU_APERTURE_PEERporGMMU_APERTURE_SYS_NONCOH- Porque no se necesita coherencia con la caché L2 de la CPU, pero sí debe salir por el bus PCIe
- El campo de dirección peer
fldAddrPeerse cambió porfldAddrSysmem - En el campo
fabricBaseAddressse configuró una dirección base basada enBAR1
Verificación de funcionamiento
- Se confirmó que
./simpleP2Pfunciona correctamente- P2P funciona entre GPU0 y GPU1 a una velocidad de 24GB/s
- Se verificó el ancho de banda bidireccional con
p2pBandwidthLatencyTest- Se midieron 920GB/s de ancho de banda local y 51GB/s de ancho de banda P2P
- Se verificó compatibilidad con pruebas de NCCL
- Se logró un ancho de banda promedio del bus de 24.5GB/s con 6 GPUs 4090
Opinión de GN⁺
- Parece que este tipo de intentos por parte de la comunidad de desarrolladores ha sido posible porque gran parte del driver de NVIDIA está publicada como código abierto. Ojalá más partes se vuelvan open source en el futuro.
- Si se vuelve posible conectar varias 4090 y aprovechar su gran rendimiento, incluso desarrolladores individuales o laboratorios pequeños podrían entrenar modelos de IA a gran escala.
- Pero que los desarrolladores tengan que tocar directamente partes tan delicadas y dependientes del hardware también demuestra que NVIDIA todavía no termina de completar el soporte para la 4090.
- Además, esto se limita al driver de Linux, y su uso comercial en Windows aún parece lejano. Ojalá NVIDIA dé soporte oficial cuanto antes.
- Como la 4090 sigue siendo hardware muy reciente, parece difícil esperar compatibilidad perfecta con bibliotecas o frameworks de ML como CUDA, PyTorch y Tensorflow. Habrá que esperar a que se estabilice.
Aún no hay comentarios.