Skip to content

English · Español

Fase 25 — Interioridades de PyTorch

Requiere: 08 — Autograd tensorial desde cero · 24 — CUDA y Triton hands-on Enseña: dispatcher · autograd-graph · torch-compile · custom-ops Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrita según A12. La teoría y los enunciados del laboratorio son borradores estables. La fijación de versión de torch es la cuestión abierta crítica al abrir la fase.

Esta es la fase donde se abre la caja negra. PyTorch presentado en Fase 24 como herramienta; aquí desmontamos los engranajes: el dispatcher (tabla de routing), el motor de autograd (captura de grafo + recorrido inverso), torch.compile / Inductor (captura + lowering + Triton/C++), y un survey de torch.distributed (DDP, FSDP, tensor/pipeline parallel) — todo aplicado al nn.Linear(64, 600) del LM head del grammar MiniGPT.


Objetivo

Coger el port a PyTorch de la Fase 17/24 — concretamente el nn.Linear(64, 600) del LM head sobre el vocabulario de gramática §A13 — y desmontar el comportamiento del framework alrededor de él. Al final de la fase, Borja podrá trazar un forward a través del dispatcher, recorrer el grafo de autograd a mano, registrar una operación personalizada con backward, leer la salida de Inductor de torch.compile y distinguir los principales patrones distribuidos sin implementarlos aún.

Esta es una fase con mucha teoría y experimentos prácticos, no un módulo nuevo. La Fase 26 (src/miniquant/) es la siguiente fase de módulo.

Orden de lectura

  1. theory/00-motivation.md — por qué una fase separada para las interioridades del framework; el principio de "ninguna caja mágica" que cierra la introducción de la Fase 24.
  2. theory/01-dispatcher-and-aten.md — el dispatcher como una búsqueda en tabla; aten como biblioteca de kernels de backend; cómo torch.matmul se convierte en una llamada a cuBLAS.
  3. theory/02-autograd-engine.md — captura de grafo en el forward, recorrido inverso en el backward, cadena grad_fn recorrida explícitamente para linear(x, W, b).
  4. theory/03-compile-and-distributed.md — pipeline de captura de torch.compile (Dynamo → AOTAutograd → Inductor); survey de distributed (DDP/FSDP/TP/PP) — sólo conceptos.
  5. lab/00-dispatcher-trace.md — instrumentar una llamada linear(x, W, b) y registrar cada decisión de dispatch.
  6. lab/01-autograd-by-hand.md — derivar gradientes para nn.Linear(64, 600) a mano, casar con autograd de PyTorch a 1e-7.
  7. lab/02-custom-op.md — registrar el softmax de Triton de la Fase 24 como torch.library.custom_op con backward; verificar con gradcheck y torch.compile.
  8. lab/03-compile-and-distributed.md — ejecutar torch.compile sobre grammar MiniGPT; volcar salida de Inductor; redactar el survey distribuido de 1 página.

Definition of Done

Ver PHASE_25_PLAN.md §6. Brevemente:

  • Los gradientes derivados a mano para nn.Linear(64, 600) coinciden con .backward() de PyTorch a 1e-7.
  • El softmax de Triton registrado como custom op pasa gradcheck y funciona bajo torch.compile.
  • Se identifica y se explica un kernel generado por Inductor del forward del grammar MiniGPT.
  • README de 1 página de survey distribuido distingue DDP/FSDP/TP/PP.

Lo que esta fase intencionadamente NO cubre

  • Implementación de entrenamiento distribuido. La Fase 35 construye DDP / FSDP de verdad.
  • TorchScript. Captura de grafo heredada, reemplazada por torch.compile. Mencionada en teoría 03 sólo como contexto histórico.
  • Scripting con JIT de ops personalizadas. Era de TorchScript; no es el camino moderno.
  • Registro de kernels aten personalizados (C++ / TORCH_LIBRARY). Mencionado; el laboratorio usa la API torch.library.custom_op del lado de Python.
  • CUDA Graphs. Fase 33 (serving).
  • Exportación TensorRT, ONNX, OpenVINO. Fuera del alcance del currículo.
  • Inmersión en functorch / torch.func. Mencionado como la API de "transformación funcional"; la Fase 38 puede revisitarlo.
  • Cuantización. Fase 26.
  • Librería transformers. Según CLAUDE.md §0.4: no antes de la Fase 24, y no se usa aquí — usamos PyTorch puro.

El alcance de la Fase 25 es: un operador desmontado de cuatro formas (traza del dispatcher, autograd derivado a mano, registro de custom op, captura de compile). La sección distribuida es un survey, no una construcción.


Vista previa de la siguiente fase: docs/phase-26-quantization/src/miniquant/, cuantización de pesos int8 / int4, post-entrenamiento y entrenamiento consciente de cuantización. El grammar MiniGPT se cuantiza a int8 y se compara al nivel de precisión de predicción de prompts §A13.

Lecturas recomendadas

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