| Componente | De qué responde | En local | En producción |
|---|---|---|---|
| Orquestador | Quién ejecuta los pasos y en qué orden | Tu propio proceso | Un orquestador de flujos o Kubernetes |
| Artifact store | Dónde se guardan las salidas de cada paso | Una carpeta | Almacenamiento de objetos en la nube |
| Model deployer | Quién convierte un modelo en un servicio | Un servidor local | El 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.
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.
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 repetir | Es exploración rápida y desechable |
| Trabajas en equipo y hay que compartir el flujo | Es un script trivial de una función que nunca cambiará |
| Prevés mover el entrenamiento a la nube | Vas a ejecutarlo una sola vez |
| Hay pasos costosos que el caché puede saltar | Todo 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.
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.
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.