English · Español
Fase 24 — Práctica con CUDA y Triton¶
Requiere: 23 — Fundamentos de arquitectura GPU Enseña:
cuda·triton·kernels·shared-memory·tilingSalta 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¶
theory/00-motivation.md— por qué una fase separada para kernels; por qué ahora (post-Fase-23).theory/01-cuda-programming-model.md—__global__,blockIdx/threadIdx, lanzamiento de kernel, espacios de memoria, sincronización.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.theory/03-triton.md— qué es Triton, por qué existe, cómo el autotuning cierra la brecha. Comparado con CUDA C escrito a mano.theory/04-pytorch-as-substrate.md— primera página de teoría de PyTorch del currículo.TensorvsStorage, dispatch por dispositivo, autograd como constructor de grafo (avance de la Fase 25). Qué es PyTorch y qué no es.lab/00-hello-cuda.md— vector-add como calentamiento: escribir, compilar, lanzar. Confirmar que la toolchain funciona.lab/01-naive-kernel.md— primera versión del kernel elegido (fused softmax por defecto). Correcto, lento.lab/02-tuned-kernel.md— tile, coalescing, SMEM, occupancy. Iterar hasta ≥30% de cuBLAS /F.softmax.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
ncudel 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.mdactualizado 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únCLAUDE.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.
- 📄 Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations — Tillet, Kung, Cox · 2019. el lenguaje en el que escribes tu primer kernel.