24 puntos por GN⁺ 2025-04-05 | 3 comentarios | Compartir por WhatsApp
  • 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

 
aer0700 2025-04-06

¿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.

 
GN⁺ 2025-04-05
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

    • Generar 100 matrices aleatorias de tamaño 5000x5000 en la CPU
    • Sumar matrices en la CPU
    • Tiempo para completar la suma de matrices en CPU: 0.6541 segundos
    • Tamaño de la matriz resultado en CPU: (5000, 5000)
    • Generar 100 matrices aleatorias de tamaño 5000x5000 en la GPU
    • Sumar matrices en la GPU
    • Tiempo para completar la suma de matrices en GPU: 0.1480 segundos
    • Tamaño de la matriz resultado en GPU: (5000, 5000)
    • La API es realmente simple, así que vale la pena explorarla más a fondo. Programar en CUDA parece una tarea enorme sin algo de tan alto nivel como esto
  • 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

    • La parte de Pytorch relacionada con el backend de NVIDIA ahora podría implementarse directamente en Python
    • Lo importante es que para el usuario final/desarrollador esto no importa, o no debería importar
    • Quizá esta nueva plataforma pueda expandir todo el concepto del cómputo en GPU, a través de Python, hacia más dominios como los juegos
    • Imaginen correr juegos en Rust principalmente sobre la GPU a través de Python
  • 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

    • Aun así, casi no hubo anuncios o charlas relacionadas con CPU. Grace CPU fue anunciada hace bastante tiempo, pero no parece que vayamos a ver pronto una abstracción generalizada que funcione sin fricción entre CPU y GPU de Nvidia
    • Para quienes trabajamos todos los días con algoritmos paralelos, esto sí es un problema. Depurar con NSight y CUDA-GDB sigue sin parecerse a GDB puro, y es mucho más fácil diseñar primero el algoritmo en CPU y luego portarlo a GPU
    • De todos los equipos en el área de compiladores, Modular es uno de los pocos que no se dejó absorber por completo por la fiebre de los LLM y sigue construyendo activamente abstracciones y lenguajes que abarcan múltiples plataformas. Eso vale cada vez más en este entorno. Ojalá más gente experimente con Mojo. Tal vez eso por fin pueda cerrar la brecha CPU-GPU con la que nos topamos todos los días
  • Tengo mucha curiosidad por cómo se compara con JAX

    • JAX te permite escribir código Python que corre en GPU no solo de Nvidia sino también de otras marcas (con soporte variable). De forma similar, tiene reemplazos drop-in para funciones de NumPy
    • Esto solo soporta Nvidia. Pero ¿puede hacer cosas que JAX no puede? ¿Es más fácil de usar? ¿Está menos orientado a arreglos de tamaño fijo? ¿Vale la pena atarte a una sola marca de GPU?
  • Esto es enorme. Ya no creo que nadie que estuviera considerando AMD + ROCm como alternativa a NVIDIA en IA siga haciéndolo

    • Soy una de esas personas que no llegó a aprender (ni va a aprender) C++ al nivel necesario para escribir código de forma efectiva para ejecución en GPU. Pero a través de Python puedo tener un pipeline directo hacia la GPU. Increíble
    • Las implicaciones para la eficiencia son enormes. No solo para librerías Python como PyTorch, sino para todo lo que corre sobre GPUs de NVIDIA
    • Me gusta ver mejoras de eficiencia. Constantemente escuchamos sobre cuántas plantas nucleares harán falta para alimentar todas las GPU de OpenAI y Google
  • ¿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

    • El modelo PEP es un buen mecanismo para la auto-mejora y la estandarización. Gracias a proyectos como uv y BeeWare, el empaquetado y la distribución pronto dejarán de ser un problema. Estoy seguro de que las mejoras de rendimiento seguirán cada año
  • 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

 
iwi19 2025-04-06

¿La primera velocidad de verdad es así? Está demasiado lento...