Skip to content

English · Español

Fase 24 — Práctica con CUDA y Triton

Requiere: 23 — Fundamentos de arquitectura GPU Enseña: cuda · triton · kernels · shared-memory · tiling Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrito según A12. Los enunciados de teoría y laboratorio son borradores estables. La elección de kernel (por defecto: fused softmax) es la pregunta abierta crítica al abrir la fase.

🇪🇸 Esta es la fase de los kernels. Escribes uno (fused softmax o GEMM) en CUDA C, lo reescribes en Triton, lo comparas con cuBLAS / torch.nn.functional, y entiendes por qué cada versión va a la velocidad que va. Y también — deliberadamente, después de Fase 23 — importas PyTorch por primera vez.


Objetivo

Llevar un kernel desde el estado ingenuo hasta "≥30% de cuBLAS en un tamaño representativo", en tres implementaciones (CUDA C, Triton, referencia del framework). A la vez, introducir PyTorch — el framework que asumen todas las fases siguientes. La introducción es deliberada: en la Fase 24 Borja ya entiende el sustrato (Fases 1, 23), los operadores (todo lo demás) y las matemáticas (Fase 15, 22 en particular). PyTorch se presenta como la herramienta que encaja con el modelo que ya tienes, no como una caja negra mágica.

Orden de lectura

  1. theory/00-motivation.md — por qué una fase separada para kernels; por qué ahora (post-Fase-23).
  2. theory/01-cuda-programming-model.md__global__, blockIdx/threadIdx, lanzamiento de kernel, espacios de memoria, sincronización.
  3. theory/02-from-naive-to-tiled.md — el ejemplo canónico (matmul o softmax — mismas lecciones) de ingenuo → coalesced → tiled a SMEM → usando Tensor Cores.
  4. theory/03-triton.md — qué es Triton, por qué existe, cómo el autotuning cierra la brecha. Comparado con CUDA C escrito a mano.
  5. theory/04-pytorch-as-substrate.md — primera página de teoría de PyTorch del currículo. Tensor vs Storage, dispatch por dispositivo, autograd como constructor de grafo (avance de la Fase 25). Qué es PyTorch y qué no es.
  6. lab/00-hello-cuda.md — vector-add como calentamiento: escribir, compilar, lanzar. Confirmar que la toolchain funciona.
  7. lab/01-naive-kernel.md — primera versión del kernel elegido (fused softmax por defecto). Correcto, lento.
  8. lab/02-tuned-kernel.md — tile, coalescing, SMEM, occupancy. Iterar hasta ≥30% de cuBLAS / F.softmax.
  9. lab/03-triton-and-pytorch.md — el mismo kernel en Triton; port de MiniGPT a PyTorch.

solutions/ está vacío durante la pre-escritura — se poblará al abrir la fase, tras confirmar la elección de kernel.

Definición de Hecho (DoD)

Ver PHASE_24_PLAN.md §6. Brevemente:

  • Un kernel en CUDA C + un kernel en Triton para la misma operación, ambos numéricamente correctos, con la versión de CUDA C alcanzando ≥30% del pico de cuBLAS.
  • Un perfil ncu del kernel tuneado, anotado para identificar el cuello de botella.
  • Un port a PyTorch del MiniGPT de la Fase 17, byte-equivalente a la versión NumPy en fp64.
  • learners/borja/profile.md actualizado para reflejar la interiorización de PyTorch.

Lo que esta fase intencionadamente NO cubre

  • Kernels de Flash-Attention o PagedAttention. Fase 27. El kernel de la Fase 24 es una operación pequeña, entendida en profundidad, no un Flash-Attention desde cero.
  • Internals de PyTorch (__torch_dispatch__, autograd personalizado, comportamiento del allocator). Fase 25.
  • Kernels multi-GPU (NCCL, all-reduce). Fase 35.
  • torch.compile / Inductor. Fase 25 (brevemente) y Fase 33 (en profundidad).
  • TensorRT / nvinfer. Fuera del alcance de todo el currículo — TensorRT es un optimizador de caja negra, choca con el espíritu del anti-objetivo "ni langchain ni llama-index".
  • CUDA Graphs. Fase 33 (serving).
  • La librería transformers. Según CLAUDE.md §0.4: nunca.
  • CUDA antiguo (pre-Ampere). Algunos idioms (sm_60/sm_70) ya no son óptimos. Apuntamos a Ampere/Ada/Hopper.

El alcance de la Fase 24 es: un kernel, tres implementaciones, un perfil ncu, un port a PyTorch. Nada más.


Avance de la siguiente fase: docs/phase-25-pytorch-internals/ — internals del motor de autograd, __torch_dispatch__, ops personalizadas.

Lecturas recomendadas

Opcional — enriquece pero no es necesario para aprobar la fase.