NVIDIA CUDA es la te­c­no­lo­gía que permite utilizar las tarjetas gráficas no solo para procesar imágenes, sino también para ejecutar a gran velocidad cálculos cie­n­tí­fi­cos y re­la­cio­na­dos con la IA. Sin CUDA y otros eco­si­s­te­mas de ace­le­ra­ción similares, muchos de los avances actuales en IA ge­ne­ra­ti­va serían di­fí­ci­l­me­n­te posibles con el mismo nivel de velocidad y es­ca­la­bi­li­dad.

Resumen

Lo más im­po­r­ta­n­te en pocas líneas:

  • CUDA es la pla­ta­fo­r­ma pro­pie­ta­ria de NVIDIA para apro­ve­char la potencia de cálculo de las GPU de NVIDIA en cálculos de propósito general (GPGPU).
  • La jerarquía de CUDA divide un cálculo grande en threads, blocks y grids; los streaming mu­l­ti­pro­ce­s­so­rs ejecutan esos threads en grupos de 32, de­no­mi­na­dos warps.
  • Para la IA y los LLM, CUDA aporta la pa­ra­le­li­za­ción masiva que hace viables el en­tre­na­mie­n­to y la in­fe­re­n­cia.
  • Desde la ar­qui­te­c­tu­ra Volta, los Tensor Cores aceleran además las ope­ra­cio­nes ma­tri­cia­les, y bi­blio­te­cas es­pe­cia­li­za­das permiten escalar entre varias GPU.
  • El eco­si­s­te­ma de bi­blio­te­cas como cuBLAS, cuDNN, NCCL, TensorRT y cuFFT, junto con he­rra­mie­n­tas como el CUDA Toolkit, NVCC y Nsight, hace que la mayoría de los de­sa­rro­lla­do­res apenas tenga que programar CUDA di­re­c­ta­me­n­te.
  • Fra­me­wo­r­ks como PyTorch y Te­n­so­r­Flow se apoyan en CUDA en segundo plano, por lo que CUDA sigue siendo la base técnica de los sistemas de IA actuales.
IONOS CLOUD GPU VM
Máximo re­n­di­mie­n­to de la IA con Cloud GPU VM
  • GPUs NVIDIA H200 para máxima potencia de cálculo
  • Re­n­di­mie­n­to ga­ra­n­ti­za­do gracias a núcleos de CPU to­ta­l­me­n­te dedicados
  • Alo­ja­mie­n­to 100% en Europa para la máxima seguridad de los datos y cu­m­pli­mie­n­to de la RGPD
  • Modelo de precios sencillo y ca­l­cu­la­ble con precio fijo por hora

¿Qué es CUDA?

El acrónimo CUDA si­g­ni­fi­ca­ba ori­gi­na­l­me­n­te “Compute Unified Device Ar­chi­te­c­tu­re”, pero hoy NVIDIA utiliza CUDA como nombre propio de su pla­ta­fo­r­ma pro­pie­ta­ria de co­mpu­tación paralela. La pla­ta­fo­r­ma permite a los de­sa­rro­lla­do­res apro­ve­char la potencia de cálculo de las GPU de NVIDIA para realizar cálculos de propósito general. Este uso de las GPU más allá del pro­ce­sa­mie­n­to gráfico se conoce como General-Purpose GPU Computing (GPGPU).

A di­fe­re­n­cia de una CPU, que está op­ti­mi­za­da para ejecutar un número reducido de tareas complejas, una GPU cuenta con miles de unidades de cálculo capaces de realizar muchas ope­ra­cio­nes similares al mismo tiempo. Por eso, resulta es­pe­cia­l­me­n­te adecuada para tareas altamente paralelas. CUDA pro­po­r­cio­na las in­te­r­fa­ces de pro­gra­ma­ción, los co­m­pi­la­do­res y los entornos de ejecución ne­ce­sa­rios para que el software pueda apro­ve­char este pa­ra­le­li­s­mo.

CUDA puede uti­li­zar­se con lenguajes como C++, Python o Fortran. Los cálculos que deben eje­cu­tar­se en la GPU se definen mediante funciones de­no­mi­na­das kernels, mientras que la CPU se encarga de controlar la ejecución del programa. CUDA pro­po­r­cio­na API y funciones en tiempo de ejecución para tra­n­s­fe­rir datos entre la memoria de la CPU y la GPU y facilita la gestión de la memoria mediante funciones como Unified Memory.

Con el tiempo, CUDA ha pasado de ser una pla­ta­fo­r­ma para de­sa­rro­lla­do­res a co­n­ve­r­ti­r­se en un completo eco­si­s­te­ma de software. He­rra­mie­n­tas conocidas como PyTorch, Te­n­so­r­Flow o NVIDIA RAPIDS utilizan CUDA para acelerar los cálculos en GPU de NVIDIA. De este modo, es posible apro­ve­char la ace­le­ra­ción por GPU sin tener que programar cada operación di­re­c­ta­me­n­te con CUDA.

Nota

CUDA está es­tre­cha­me­n­te ligada al hardware de NVIDIA. Como pla­ta­fo­r­ma pro­pie­ta­ria, solo es co­m­pa­ti­ble con las GPU de NVIDIA que admiten CUDA. Por tanto, las apli­ca­cio­nes que utilizan CUDA di­re­c­ta­me­n­te no pueden eje­cu­tar­se sin más en GPU de otros fa­bri­ca­n­tes como AMD o Intel. Esta estrecha in­te­gra­ción entre hardware y software es una de las razones del alto re­n­di­mie­n­to y la amplia difusión de CUDA en ámbitos como la IA y la co­mpu­tación de alto re­n­di­mie­n­to.

Fu­n­da­me­n­tos técnicos: la jerarquía de CUDA

El concepto central de CUDA es la división de un cálculo grande en muchas tareas pequeñas. En lugar de ejecutar una operación de forma se­cue­n­cial, el trabajo se di­s­tri­bu­ye entre numerosas unidades de ejecución que pueden pro­ce­sar­lo en paralelo. Esta es­tru­c­tu­ra se organiza mediante la jerarquía de CUDA.

La unidad más pequeña es un thread (hilo de ejecución). Los threads ejecutan el mismo código de kernel, pero trabajan con datos di­fe­re­n­tes y, en caso de bi­fu­r­ca­cio­nes, pueden seguir rutas de ejecución distintas. Por ejemplo, cada thread puede procesar un único elemento de una matriz.

Varios threads se agrupan en un block (bloque). Los threads de un mismo block pueden co­mu­ni­car­se entre sí y compartir una zona de memoria rápida de­no­mi­na­da shared memory (memoria co­m­pa­r­ti­da). Esto permite coordinar de forma eficiente el trabajo dentro del block.

Varios blocks forman a su vez un grid (cua­drí­cu­la). Cada llamada a un kernel inicia un grid compuesto por uno o varios blocks. El entorno de ejecución de CUDA di­s­tri­bu­ye au­to­má­ti­ca­me­n­te estos blocks entre las unidades de cálculo di­s­po­ni­bles de la GPU.

A nivel de hardware, los blocks se ejecutan en los streaming mu­l­ti­pro­ce­s­so­rs (SM), las unidades de pro­ce­sa­mie­n­to de la GPU. Cada SM puede procesar varios blocks al mismo tiempo, lo que permite apro­ve­char de forma eficiente el hardware di­s­po­ni­ble. Dentro de un SM, los threads se organizan además en grupos de 32 de­no­mi­na­dos warps. Estos warps se pla­ni­fi­can co­n­ju­n­ta­me­n­te y, cuando siguen la misma ruta de ejecución, sus threads ejecutan las in­s­tru­c­cio­nes de forma coor­di­na­da. Esta or­ga­ni­za­ción co­n­tri­bu­ye al alto re­n­di­mie­n­to que pueden alcanzar las apli­ca­cio­nes CUDA.

Re­le­va­n­cia para la IA y los LLM

Gran parte de los avances en el ámbito de la IA se basa en modelos de apre­n­di­za­je profundo que requieren enormes ca­n­ti­da­des de ope­ra­cio­nes ma­te­má­ti­cas. El en­tre­na­mie­n­to y la in­fe­re­n­cia de modelos de lenguaje de gran tamaño (LLM) requieren, entre otros procesos, mu­l­ti­pli­ca­cio­nes de matrices y ope­ra­cio­nes con vectores y tensores. Las GPU están es­pe­cia­l­me­n­te indicadas para este tipo de tareas altamente paralelas, y NVIDIA CUDA permite apro­ve­char su capacidad de pro­ce­sa­mie­n­to.

CUDA no solo permite apro­ve­char la potencia de cálculo de las GPU de NVIDIA, sino que también pro­po­r­cio­na la base de software para numerosos fra­me­wo­r­ks y apli­ca­cio­nes de IA. De este modo, los de­sa­rro­lla­do­res pueden entrenar modelos complejos sin tener que im­ple­me­n­tar por sí mismos cada operación de GPU.

Pa­ra­le­li­za­ción masiva para redes neu­ro­na­les

Las redes neu­ro­na­les pueden tener millones o incluso miles de millones de pa­rá­me­tros. Durante el en­tre­na­mie­n­to deben rea­li­zar­se enormes ca­n­ti­da­des de ope­ra­cio­nes ma­te­má­ti­cas. Muchos de estos cálculos pueden eje­cu­tar­se en paralelo, y ahí reside una de las pri­n­ci­pa­les ventajas de CUDA y las GPU. En lugar de depender de unos pocos núcleos de CPU, numerosos núcleos de GPU pueden trabajar si­mu­l­tá­nea­me­n­te en los cálculos. De este modo, ope­ra­cio­nes como las mu­l­ti­pli­ca­cio­nes de matrices, las funciones de ac­ti­va­ción y el cálculo de gra­die­n­tes pueden ace­le­rar­se co­n­si­de­ra­ble­me­n­te, lo que reduce de forma si­g­ni­fi­ca­ti­va el tiempo necesario para entrenar modelos de IA.

Tensor Cores y ace­le­ra­ción de IA

Desde la ar­qui­te­c­tu­ra Volta, NVIDIA integra unidades de cálculo es­pe­cia­li­za­das de­no­mi­na­das Tensor Cores. Estas unidades se han de­sa­rro­lla­do es­pe­cí­fi­ca­me­n­te para acelerar ope­ra­cio­nes ma­tri­cia­les uti­li­za­das, entre otros ámbitos, en cargas de trabajo de IA. CUDA permite que las bi­blio­te­cas de software apro­ve­chen este hardware. En muchos casos, los de­sa­rro­lla­do­res no necesitan acceder di­re­c­ta­me­n­te a los Tensor Cores. En su lugar, fra­me­wo­r­ks como PyTorch o Te­n­so­r­Flow utilizan las bi­blio­te­cas de CUDA co­rre­s­po­n­die­n­tes. Los Tensor Cores de­sem­pe­ñan un papel es­pe­cia­l­me­n­te im­po­r­ta­n­te en el apre­n­di­za­je profundo, la IA ge­ne­ra­ti­va y los LLM, donde pueden acelerar co­n­si­de­ra­ble­me­n­te de­te­r­mi­na­das ope­ra­cio­nes.

Nota

Con el CUDA Toolkit 13.0 se eli­mi­na­ron la co­m­pi­la­ción an­ti­ci­pa­da (offline) y la co­m­pa­ti­bi­li­dad de las bi­blio­te­cas para las ar­qui­te­c­tu­ras Maxwell, Pascal y Volta. Para estas ar­qui­te­c­tu­ras, la serie CUDA 12.x sigue siendo relevante.

Escalado con varias GPU

Los LLM de mayor tamaño pueden requerir más memoria y capacidad de pro­ce­sa­mie­n­to de las que ofrece una sola GPU. Por eso, los modelos con cientos de miles de millones de pa­rá­me­tros pueden di­s­tri­bui­r­se entre varias GPU. NVIDIA CUDA pro­po­r­cio­na la base para este tipo de escalado. Bi­blio­te­cas es­pe­cí­fi­cas permiten una co­mu­ni­ca­ción eficiente entre varias GPU dentro de un mismo servidor o incluso entre clústeres de GPU. De este modo, los conjuntos de datos, los modelos y los cálculos pueden re­pa­r­ti­r­se entre múltiples ace­le­ra­do­res.

Base de numerosos fra­me­wo­r­ks de IA

La mayoría de los de­sa­rro­lla­do­res no trabajan di­re­c­ta­me­n­te con código CUDA. En su lugar, utilizan fra­me­wo­r­ks como PyTorch o Te­n­so­r­Flow, que recurren a CUDA y sus bi­blio­te­cas para ejecutar numerosos cálculos en GPU de NVIDIA. Así, es posible apro­ve­char la ace­le­ra­ción mediante GPU sin tener que ocuparse di­re­c­ta­me­n­te de los detalles del hardware.

CUDA sigue siendo, por tanto, una parte fu­n­da­me­n­tal del eco­si­s­te­ma de software para IA en GPU de NVIDIA. Cuando, por ejemplo, un tensor de PyTorch se traslada a una GPU de NVIDIA co­m­pa­ti­ble con CUDA, las ope­ra­cio­nes co­rre­s­po­n­die­n­tes pueden eje­cu­tar­se mediante bi­blio­te­cas y kernels de CUDA.

El eco­si­s­te­ma CUDA: bi­blio­te­cas y he­rra­mie­n­tas

CUDA no se limita a una interfaz de pro­gra­ma­ción. A lo largo de los años, NVIDIA ha de­sa­rro­lla­do un amplio eco­si­s­te­ma de bi­blio­te­cas, he­rra­mie­n­tas de de­sa­rro­llo y so­lu­cio­nes de op­ti­mi­za­ción. Este eco­si­s­te­ma es una de las razones de la amplia adopción de NVIDIA CUDA en el ámbito de la IA. En muchos casos, los de­sa­rro­lla­do­res ya no necesitan escribir di­re­c­ta­me­n­te código CUDA, sino que pueden recurrir a bi­blio­te­cas es­pe­cia­li­za­das op­ti­mi­za­das para las GPU de NVIDIA. De este modo, es posible obtener un alto re­n­di­mie­n­to sin tener que optimizar ma­nua­l­me­n­te cada operación para la GPU.

Bi­blio­te­cas CUDA im­po­r­ta­n­tes

Un co­m­po­ne­n­te clave del eco­si­s­te­ma CUDA son las bi­blio­te­cas es­pe­cia­li­za­das, que pro­po­r­cio­nan ope­ra­cio­nes de cálculo ha­bi­tua­les ya op­ti­mi­za­das para GPU co­m­pa­ti­bles con CUDA y facilitan co­n­si­de­ra­ble­me­n­te el de­sa­rro­llo. Entre las más im­po­r­ta­n­tes se en­cue­n­tran:

  • cuBLAS: cuBLAS significa CUDA Basic Linear Algebra Su­brou­ti­nes y es una im­ple­me­n­ta­ción de BLAS op­ti­mi­za­da para GPU. Ofrece funciones para mu­l­ti­pli­ca­cio­nes de matrices, ope­ra­cio­nes con vectores y otras tareas ha­bi­tua­les de álgebra lineal.
  • cuDNN: cuDNN significa CUDA Deep Neural Network Library. Esta bi­blio­te­ca pro­po­r­cio­na im­ple­me­n­ta­cio­nes op­ti­mi­za­das para redes neu­ro­na­les y se utiliza con fra­me­wo­r­ks como PyTorch y Te­n­so­r­Flow.
  • NCCL: NCCL (NVIDIA Co­lle­c­ti­ve Co­m­mu­ni­ca­tio­ns Library) facilita la co­mu­ni­ca­ción entre varias GPU. Permite in­te­r­ca­m­biar rá­pi­da­me­n­te pa­rá­me­tros y re­su­l­ta­dos in­te­r­me­dios durante el en­tre­na­mie­n­to de modelos de gran tamaño y desempeña un papel im­po­r­ta­n­te en el en­tre­na­mie­n­to di­s­tri­bui­do de LLM.
  • TensorRT: TensorRT se utiliza para optimizar y acelerar la in­fe­re­n­cia de modelos de IA ya en­tre­na­dos. Analiza y optimiza los modelos para mejorar su ejecución en GPU de NVIDIA.
  • cuFFT: cuFFT permite realizar tra­n­s­fo­r­ma­das de Fourier ace­le­ra­das por GPU. Se utiliza, entre otros ámbitos, en apli­ca­cio­nes cie­n­tí­fi­cas, pro­ce­sa­mie­n­to de señales y si­mu­la­cio­nes.

He­rra­mie­n­tas CUDA im­po­r­ta­n­tes

Además de las bi­blio­te­cas, el eco­si­s­te­ma CUDA incluye distintas he­rra­mie­n­tas de de­sa­rro­llo y análisis que ayudan a crear, depurar y optimizar apli­ca­cio­nes ace­le­ra­das por GPU:

  • CUDA Toolkit: el CUDA Toolkit co­n­s­ti­tu­ye la base del de­sa­rro­llo con CUDA. Incluye co­m­pi­la­do­res, bi­blio­te­cas, co­m­po­ne­n­tes de tiempo de ejecución y do­cu­me­n­ta­ción.
  • NVCC: NVCC es el co­m­pi­la­dor de CUDA de NVIDIA. Compila el código CUDA y gestiona la co­m­pi­la­ción de las partes del programa de­s­ti­na­das a la CPU y a la GPU. Se utiliza pri­n­ci­pa­l­me­n­te para de­sa­rro­llar apli­ca­cio­nes CUDA propias.
  • Nsight Systems: Nsight Systems es una he­rra­mie­n­ta de análisis del re­n­di­mie­n­to de apli­ca­cio­nes. Permite estudiar la in­ter­ac­ción entre la CPU, la GPU y otros recursos del sistema durante la ejecución para ide­n­ti­fi­car cuellos de botella y po­si­bi­li­da­des de op­ti­mi­za­ción.
  • Nsight Compute: Nsight Compute permite analizar en detalle kernels in­di­vi­dua­les de CUDA. Entre otros aspectos, permite examinar los accesos a memoria y el uso de los recursos de la GPU para detectar posibles mejoras de re­n­di­mie­n­to.
  • CUDA-GDB: CUDA-GDB amplía el depurador GNU GDB con funciones es­pe­cí­fi­cas para depurar apli­ca­cio­nes CUDA. Permite analizar la ejecución y detectar errores en el código que se ejecuta en la GPU.
Nota

El CUDA Toolkit puede in­s­ta­lar­se en Ubuntu 24.04 mediante los re­po­si­to­rios de paquetes oficiales de NVIDIA. También existen paquetes de in­s­ta­la­ción locales y un in­s­ta­la­dor Runfile para casos de uso es­pe­cí­fi­cos. Para la mayoría de los usuarios, la in­s­ta­la­ción mediante el gestor de paquetes facilita la gestión de los co­m­po­ne­n­tes de CUDA y sus po­s­te­rio­res ac­tua­li­za­cio­nes.

Co­n­clu­sión

CUDA ha pasado de ser una pla­ta­fo­r­ma para programar GPU a co­n­ve­r­ti­r­se en una parte fu­n­da­me­n­tal del eco­si­s­te­ma de co­mpu­tación acelerada de NVIDIA. Su ar­qui­te­c­tu­ra permite apro­ve­char el pro­ce­sa­mie­n­to paralelo de las GPU de NVIDIA co­m­pa­ti­bles con CUDA y co­n­s­ti­tu­ye la base técnica de numerosas apli­ca­cio­nes de IA, apre­n­di­za­je profundo y co­mpu­tación de alto re­n­di­mie­n­to. Es­pe­cia­l­me­n­te en ámbitos como los modelos de lenguaje de gran tamaño y la IA ge­ne­ra­ti­va, CUDA desempeña un papel clave en la in­ter­ac­ción entre el software y el hardware. Conocer los fu­n­da­me­n­tos de NVIDIA CUDA ayuda a entender cómo se entrenan y ejecutan muchos de los sistemas de IA actuales.

Ir al menú principal