MÓDULO 15 · MLOPS: PIPELINES CON ZENML · 25 MIN

El stack: la infraestructura como configuración

Un stack es una configuración con nombre que dice dónde y cómo corre tu pipeline: quién lo ejecuta, dónde se guardan los artifacts, quién despliega el modelo. Cambiar de portátil a la nube es cambiar de stack, y el código Python no se entera. Esa es toda la idea — y explica por qué la regla dura del módulo es que nunca haya configuración de infraestructura dentro del código.
01 — Las piezas
Qué compone un stack
ComponenteDe qué respondeEn localEn producción
OrquestadorQuién ejecuta los pasos y en qué ordenTu propio procesoUn orquestador de flujos o Kubernetes
Artifact storeDónde se guardan las salidas de cada pasoUna carpetaAlmacenamiento de objetos en la nube
Model deployerQuién convierte un modelo en un servicioUn servidor localEl servicio de inferencia de tu plataforma

Los tres se registran por separado y se combinan en un stack con nombre. Tener uno para desarrollo y otro para producción es el patrón por defecto, y no es burocracia: es lo que hace que probar en local no escriba en el almacén compartido ni despliegue nada por accidente.

02 — La frontera
Qué va en el código y qué va en el stack

En el código

Lo que hace tu sistema
  • Qué steps hay y qué hace cada uno.
  • Cómo se conectan.
  • Los tipos de entrada y salida.
  • Los parámetros del modelo.
viaja igual a cualquier entorno

En el stack

Dónde corre
  • Qué máquina o servicio ejecuta.
  • Dónde se persisten los artifacts.
  • Credenciales y regiones.
  • Quién despliega y dónde.
cambia por entorno, sin tocar Python

La forma de saber si has cruzado la frontera es una pregunta: ¿esta línea diría algo distinto en el portátil de un compañero? Una ruta absoluta, un nombre de bucket, una URL de servidor o una credencial responden que sí — y todas ellas pertenecen al stack.

El caso que más se repite es la ruta local. Escribir un fichero en ./salida/ desde dentro de un step funciona perfectamente hasta el día que el orquestador ejecuta ese paso en un contenedor efímero, donde esa carpeta no existe y desaparece al terminar. La alternativa no es arreglar la ruta: es devolver el dato como artifact y dejar que el stack decida dónde vive.

// si tu step escribe en una ruta local, no es portable: es local con suerte
03 — El precio
Cuándo esto no compensa

Toda esta estructura tiene un coste fijo —instalar, inicializar, registrar componentes, aprender el vocabulario— que no se amortiza siempre:

Compensa cuando…No compensa cuando…
El proceso tiene etapas claras y se va a repetirEs exploración rápida y desechable
Trabajas en equipo y hay que compartir el flujoEs un script trivial de una función que nunca cambiará
Prevés mover el entrenamiento a la nubeVas a ejecutarlo una sola vez
Hay pasos costosos que el caché puede saltarTodo el proceso tarda segundos

Merece la pena decirlo claro porque el material no lo dice: envolver en un pipeline un análisis exploratorio de media hora es trabajo perdido. La estructura se gana su sitio cuando algo se repite, se comparte o se mueve — y hasta entonces es andamiaje alrededor de un edificio de una planta.

Auditoría Este módulo es, más que ningún otro del curso, una lección de herramienta, y eso lo hace el más frágil ante el paso del tiempo: sus verificaciones se apoyan en comandos concretos de un CLI —levantar el panel local, registrar componentes con banderas cortas, listar modelos desplegados— y en detalles como que el usuario por defecto del panel «suele ser admin sin password» y que el servidor vive «normalmente» en un puerto concreto. Todo eso cambia entre versiones. Los conceptos —step, artifact, caché, linaje, stack— sobreviven y son de casi cualquier orquestador; los comandos, no. ¿Coinciden los del material con lo que devuelve zenml --help en tu instalación? Si no, el concepto sigue valiendo y la receta no.
Para hacer
Buscar la infraestructura escondida en tu código

Abre el código de ML que tengas más a mano y busca, con la pregunta de la sección 02, todo lo que respondería distinto en otra máquina: rutas, nombres de fichero, URLs, credenciales, números de puerto, nombres de bucket.

Haz una lista. Esa lista es, exactamente, tu stack — y su longitud te dice cuánto trabajo hay entre lo que tienes y algo que se pueda ejecutar en otro sitio sin editar una línea de Python.