La primera vez que un cliente me preguntó cuándo el script de clasificación que hice en un Jupyter Notebook iba a estar funcionando 24/7 en producción, casi se me cae el alma a los pies. Había entregado un modelo con una métrica brutal, pero replicar ese rendimiento de forma robusta y escalable era otra historia. No era solo “ponerlo en un servidor”; era un cambio de mentalidad radical.## Del prototipo al infierno de la infraestructuraUno de los mayores malentendidos con la IA es pensar que el modelo es el 90% del trabajo. En mi experiencia, el modelo es, con suerte, el 30%. El resto es ingeniería: datos, despliegue, monitorización y, sobre todo, escalabilidad. He visto prototipos brillantes morir en la etapa de producción porque nadie pensó más allá de la pantalla del Jupyter.¿Por qué es tan complicado? Cuando tu modelo vive en un notebook, asumes un entorno controlado: los datos ya están ahí, las librerías instaladas, los recursos disponibles. En producción, nada de eso es cierto:* Tráfico variable: De una inferencia manual a miles por segundo.* Datos en tiempo real: Necesitas pipelines de ingestión robustos.* Dependencias infernales: Las librerías de tu entorno local chocan con las del servidor.* Estado: ¿Cómo mantienes el estado de tu aplicación si se escala horizontalmente?* Errores: ¿Qué pasa si el servicio se cae? ¿Cómo se recupera?## Mis batallas y lecciones aprendidasHe pasado suficientes madrugadas depurando despliegues fallidos como para tener un par de obsesiones. Esto es lo que me funciona para que mis modelos no se queden atascados en la fase de prototipo:### 1. Pensar en el pipeline completo, no solo en el modeloEl modelo es una parte del rompecabezas. Antes de escribir la primera línea de fit(), ya estoy esbozando cómo van a llegar los datos, cómo se van a preprocesar, dónde va a vivir el modelo, y cómo se va a servir. Esto me ayuda a anticipar problemas de integración y a diseñar módulos más reutilizables. Si los datos que usa tu modelo cambian o el preprocesamiento falla, tu modelo, por bueno que sea, no servirá de nada. Por eso es clave tener un buen control de versiones para datos y modelos.### 2. Infraestructura como Código (IaC): Mi salvavidasConfigurar servidores a mano es una receta para el desastre. He estado allí. Perder horas intentando replicar un entorno. Ahora, para cualquier cosa que vaya a producción, uso IaC sin dudarlo. Terraform, Ansible, o incluso scripts bien documentados en un repo. Me aseguro de que el entorno sea reproducible y que escalar sea cuestión de cambiar un número en un archivo, no de sudar la gota gorda.### 3. Contenedores (Docker) y orquestación (Kubernetes)Si no empaquetas tu aplicación y sus dependencias en un contenedor, estás pidiendo problemas. Docker me da la tranquilidad de que mi aplicación correrá igual en mi máquina, en staging y en producción. Para manejar la escalabilidad y la resiliencia, Kubernetes se ha vuelto mi herramienta preferida. Sí, tiene una curva de aprendizaje, pero una vez que lo dominas, la libertad que te da para escalar servicios de inferencia o preprocesamiento es increíble. Es la forma más fiable que he encontrado para que mi modelo sea accesible cuando y como se necesite.### 4. Observabilidad desde el día ceroNo puedes escalar lo que no entiendes. ¿Cuántas peticiones está recibiendo mi modelo? ¿Cuál es su latencia? ¿Hay errores en el preprocesamiento? Sin métricas, logs y trazas, estás volando a ciegas. Me aseguro de instrumentar mi código con Prometheus para métricas y un sistema de logs centralizado. Si tu modelo se va al traste, lo querrás saber antes de que tus usuarios te lo digan. Esto es no negociable para mí.### 5. ¿Microservicios o Monolito? Depende…He peleado esta batalla muchas veces. Para proyectos pequeños, un buen monolito bien estructurado con patrones de diseño es más rápido de desplegar y mantener. Cuando la complejidad crece, o cuando tienes equipos diferentes trabajando en partes distintas del pipeline de IA, los microservicios pueden ser la respuesta. Servicios de inferencia, de preprocesamiento, de gestión de características (feature stores)… separarlos permite escalar cada componente de forma independiente y reducir los puntos de fallo. Eso sí, no caigas en la trampa de los microservicios por moda; hazlo solo cuando los beneficios superen la sobrecarga de gestión.## ¿Cuándo no me complico tanto?Si estoy haciendo una PoC interna para un cliente o un prototipo que sé que no va a tener mucha carga, a veces opto por un simple FastAPI dentro de una VM con gunicorn. ¿Sobreescalarlo todo para 100 usuarios al mes? No, gracias. La sobreingeniería es tan mala como la falta de ingeniería. Mi regla es: **empieza simple, escala cuando lo necesites, pero planifica para ello desde el principio.**Escalar IA no es solo un problema técnico; es un problema de enfoque. Es entender que un modelo por sí solo no resuelve nada. Necesita un hogar robusto, un suministro de datos constante y unos ojos que vigilen su salud. Ignorar esto es condenar tu modelo al cajón de los prototipos olvidados.
Escalabilidad en IA: Por qué mi código de Jupyter notebook nunca llega a producción (y cómo lo evito)
Publicado el