NVIDIA finalmente añade soporte nativo para Python a CUDA
(thenewstack.io)- Después de años centrado en C/C++, el toolkit CUDA de NVIDIA añadió oficialmente soporte nativo para Python en GTC 2024
- Ahora es posible ejecutar directamente en la GPU operaciones de alta velocidad enfocadas en algoritmos usando solo Python
- El arquitecto de CUDA, Stephen Jones, explicó que “Python CUDA no es simplemente código C trasladado a sintaxis de Python, sino que
fue rediseñado desde cero de una manera natural para los desarrolladores de Python”
Nuevas posibilidades que abre el soporte nativo de Python
- Antes, los usuarios de CUDA necesitaban saber C++ o Fortran, pero ahora también es posible hacer cómputo GPU de alto rendimiento solo con Python
- Según la encuesta de open source de GitHub de 2024, Python superó a JavaScript y se convirtió en el lenguaje más popular
- La cantidad de usuarios de CUDA creció de 2 millones en 2020 a 4 millones en 2023, pero
los desarrolladores de Python se cuentan por decenas de millones, lo que representa una gran oportunidad especialmente para desarrolladores de países emergentes como India y Brasil - Por eso también se espera un impacto positivo en la expansión de la infraestructura global de GPU
Cómo está compuesto Pythonic CUDA
- CUDA está compuesto por bibliotecas, SDK, compilador, runtime, herramientas y algoritmos
- La integración con Python no se limita a ofrecer kernels, sino que hace que todo el stack sea amigable para Python
- Enfoque principal: basado en compilación JIT (Just-In-Time), minimizando la dependencia del compilador
Componentes principales
- cuPyNumeric: biblioteca de Python que ofrece la misma API que NumPy con aceleración por GPU
- CUDA Core: sistema basado en flujo de ejecución que rediseña el runtime de CUDA al estilo de Python
- NVMath Python: ofrece una interfaz unificada para llamar bibliotecas host/device
- API de Python construida para integrarse directamente con bibliotecas C++ de alto rendimiento
- También se incluyen herramientas de análisis de rendimiento y análisis de código
> “Está conectado directamente con el código C++ existente de alto rendimiento, por lo que casi no hay pérdida de rendimiento” — Stephen Jones
Nuevo modelo de programación: CuTile
- Modelo de alto nivel centrado en arreglos diseñado para desarrolladores de Python
- Mientras que CUDA tradicional exigía control detallado basado en threads, CuTile ofrece una estructura más simple y fácil de entender mediante abstracción por tiles
- CuTile mapea arreglos en unidades de tiles de GPU, lo que hace que depurar y optimizar sea más fácil sin sacrificar rendimiento
- Más adelante también se extenderá a C++ CUDA
> “Como el compilador entiende mejor la estructura de la GPU, también puede realizar automáticamente una mejor optimización del rendimiento”
Resumen
- La integración nativa de Python en CUDA representa un cambio que reduce de forma importante la barrera de entrada a la programación GPU
- Sin necesidad de conocimientos complejos de otros lenguajes, ahora será posible realizar operaciones de IA y científicas en la GPU usando solo Python
- Es un punto de inflexión decisivo que abre una nueva era para la expansión del ecosistema de IA centrado en Python y para el aprovechamiento de las GPU de NVIDIA
3 comentarios
¿Será más rápido que los wrappers existentes de CUDA como CuPy y PyTorch? La ventaja de CuPy y torch era que su API es casi igual a la de NumPy, así que se podían migrar sin mucho esfuerzo los códigos de prueba escritos con NumPy; con esto, habrá que probar a ver qué tal.
Opiniones en Hacker News
No soy programador de GPU, pero parece que incluso alguien como yo podría usarlo fácilmente. Hice una demo simple usando GPU y CPU. Los resultados fueron estos
Me pregunto por qué Python es el objetivo de este tipo de cosas. He visto muchos proyectos agregar soporte para Python. Me pregunto si una base de código en Python puede compilarse más fácilmente a distintos targets que otras
Menos mal que Pytorch ganó gran impulso antes de que esto apareciera. Ahora tenemos un verdadero cuasiestándar independiente de la plataforma para cómputo paralelo. No está limitado a NVIDIA
CuTile se siente en muchos sentidos como el sucesor de Triton de OpenAI. No solo estamos obteniendo primitivas a nivel tile/bloque y TileIR, sino también un modelo de programación SIMT adecuado en CuPy. Parece que mucha gente tampoco le prestó atención en la GTC de este año. Está muy genial
Tengo mucha curiosidad por cómo se compara con JAX
Esto es enorme. Ya no creo que nadie que estuviera considerando AMD + ROCm como alternativa a NVIDIA en IA siga haciéndolo
¿Lo siguiente es soporte para Rust? Ahora mismo estoy serializando y deserializando manualmente mis estructuras de datos como arreglos de bytes hacia/desde el kernel. Sería bueno tener estructuras de datos realmente compartidas, como las que CUDA ofrece en C++
Python realmente se está consolidando como la lingua franca de los lenguajes de programación. Su adopción está creciendo con fuerza en el renacimiento del FOSS, y creo que es lo más cercano que tenemos a una herramienta universal
Esto probablemente va a impulsar lo que Python ha venido impulsando en general: que se prueben más cosas más rápido, mientras lo que quede en lenguajes más veloces se reduzca. En general, es un movimiento excelente. Definitivamente tengo ganas de jugar con esto
CUDA nació en C y C++. Ojalá hubieran implementado de verdad una variante de C para CUDA, en lugar de extender C++ y llamarlo CUDA C
¿La primera velocidad de verdad es así? Está demasiado lento...