En el episodio de hoy hablamos del entrenamiento incremental, una técnica de Machine Learning que marca la diferencia entre las empresas que saben hacer IA a escala y las que no y cómo lo está utilizando LinkedIn.
Hay dos cosas en Machine Learning que distinguen claramente a las personas sin experiencia de las que saben de lo que va el tema.
La primera es el uso de Notebooks.
Los notebooks de Jupyter son fantásticos para experimentar y prototipar, pero no son la herramienta adecuada para sistemas en producción. Si quieres profundizar en esto, te recomiendo escuchar el episodio 94 del podcast donde hablo precisamente de por qué los notebooks no son profesionales.
La segunda es creer que un modelo se entrena una vez y pasa bastante tiempo hasta que es necesario volverlo a entrenar. Esta idea no puede estar más alejada de la realidad en sistemas a escala como LinkedIn.
Y es precisamente de esta segunda señal de la que vamos a hablar hoy.
Imaginemos que trabajas en LinkedIn y te han encargado crear un modelo de machine learning que recomienda ofertas de trabajo a los usuarios.
La forma tradicional de entrenar estos modelos es lo que se llama "cold start" o entrenamiento desde cero. Seguro que te suena el proceso:
Este enfoque tradicional tiene varios problemillas importantes:
Aquí es donde entra el concepto del entrenamiento incremental que usan en LinkedIn.
La idea es súper simple en teoría: en lugar de entrenar desde cero cada vez, cogemos el modelo ya entrenado y simplemente lo actualizamos con los datos más recientes.
Es como actualizar una aplicación en tu móvil. No borras la app y la instalas desde cero cada vez, simplemente descargas lo nuevo y lo añades a lo que ya tienes.
Con esta estrategia, LinkedIn ha conseguido:
Más allá del ahorro de costes y la velocidad, el entrenamiento incremental ofrece:
Pero... y aquí viene lo interesante... implementar esto en producción no es tan sencillo como suena.
Hay un montón de desafíos al intentar hacer esto a escala. Vamos a ver los más importantes:
Este es uno de mis favoritos porque es súper sutil pero muy importante.
En un sistema de entrenamiento incremental continuo, los datos llegan en flujo constante desde plataformas de mensajería como Kafka. El problema es que las librerías de deep learning como PyTorch o TensorFlow están diseñadas para leer datos en batches estáticos, como archivos CSV o Parquet.
Por lo tanto:
LinkedIn resolvió esto generando los datos de entrenamiento casi en tiempo real.
Cada vez que alguien interactúa con una publicación o con una oferta de trabajo, registran exactamente las features que se usaron en ese momento para hacer la recomendación.
Después, esas interacciones se procesan con Apache Flink, un motor de stream processing que les permite unir, transformar y escalar todos esos eventos en paralelo, manteniendo la latencia bajísima incluso con millones de usuarios activos.
Los números son impresionantes: procesan entre 30,000 y 35,000 eventos por segundo con una latencia de menos de 5 milisegundos.
Cuando se pasa de un entrenamiento puntual a uno continuo, el sistema nunca se detiene. Ya no es un notebook que lanzas cuando quieres probar algo, sino una cadena automatizada que está entrenando modelos nuevos cada poco tiempo.
Cualquier pequeño fallo —un bug en una librería, un checkpoint corrupto— puede tirar abajo el flujo completo si no está bien controlado.
En los entrenamientos tradicionales, los ingenieros de IA usan sus propios bucles de entrenamiento y librerías personalizadas sin problema. Pero en un entorno incremental, donde el modelo se reentrena de forma programada o continua, hace falta algo mucho más robusto.
LinkedIn resuelve esto mediante dos estrategias:
¿Qué son estos grafos estáticos? Son una representación fija y predefinida de todas las operaciones que ejecuta un modelo de machine learning: las entradas, las transformaciones intermedias, el cálculo de la función de pérdida, el backpropagation y la actualización del optimizador.
En lugar de ejecutar el código línea a línea como haríamos en un notebook, se construye una especie de mapa completo del flujo de cálculo antes de empezar a entrenar.
Ese grafo describe todo lo que el modelo hará, y luego puede ejecutarse muchas veces sin necesidad de interpretar de nuevo el código Python.
Esto les permite:
Pensad que si cada ingeniero pudiera subir su propio script de Python con dependencias distintas, sería una pesadilla operativa con versiones incompatibles, errores difíciles de rastrear y tiempos de respuesta lentos ante fallos.
Como estos modelos están siempre aprendiendo, hay que llevar un control total del estado.
El sistema debe guardar no solo el checkpoint con los pesos del modelo, sino también:
Si algo falla (por ejemplo, un checkpoint corrupto), el pipeline puede retroceder al último estado sano y reanudar el entrenamiento desde ahí, sin perder datos ni duplicar trabajo.
Ahora que entendemos los problemas, vamos a ver cómo LinkedIn integra todas las piezas del sistema.
Procesan entre 30,000 y 35,000 eventos por segundo con una latencia de menos de 5 milisegundos.
Estos eventos pasan por un pipeline que:
Ingestan estos datos en streaming y los convierten al formato que necesitan PyTorch o TensorFlow, resolviendo el problema de incompatibilidad entre datos en flujo continuo y librerías de deep learning.
El entrenamiento en sí ocurre en Kubernetes, usando OpenConnect, que es su plataforma de pipelines de IA construida internamente.
Los modelos entrenados se:
Es como una máquina perfectamente engrasada donde cada pieza hace su trabajo y se comunica con las demás.
Después de todo este trabajo para implementar el entrenamiento de modelos incremental, ¿les mereció la pena a LinkedIn?
Los números hablan por sí solos:
Puede que estos porcentajes no parezcan enormes, pero estamos hablando de LinkedIn, con cientos de millones de usuarios. Un 2% de mejora son millones de interacciones adicionales y muchos euros en valor.
Vale, y ahora la pregunta del millón: ¿qué podemos aprender nosotros de esto si no trabajamos en LinkedIn?
Yo creo que hay varias lecciones importantes:
Implementar algo que funciona en un notebook de Jupyter y llevarlo a producción son dos mundos completamente diferentes.
LinkedIn tuvo que reconstruir gran parte de su stack de datos para hacer esto posible. No es solo cuestión de copiar código de un tutorial.
En un mundo que cambia rápido, tener un modelo que se entrena una vez a la semana te deja atrás de la competencia.
Los usuarios cambian, las tendencias evolucionan, el mercado se mueve. Tu modelo necesita adaptarse a esa velocidad o quedarse obsoleto.
Los sistemas en producción fallan. Siempre.
Tener mecanismos para recuperarse rápidamente es tan importante como que funcionen bien cuando todo va bien.
Los checkpoints, la tolerancia a fallos, la capacidad de retomar desde el último estado válido... todo esto no es opcional cuando operas a escala.
LinkedIn no podría mantener estos sistemas si cada equipo hiciera las cosas a su manera.
Necesitaron crear abstracciones y herramientas comunes que todos usan, garantizando consistencia, mantenibilidad y escalabilidad.
Para que quede todo claro, aquí tienes una tabla comparativa:
| Aspecto | Entrenamiento Tradicional | Entrenamiento Incremental |
|---|---|---|
| Coste | Alto (re-procesa todo) | Bajo (9x más económico) |
| Velocidad | Lento (horas/días) | Rápido (actualización cada hora) |
| Frescura | Modelo desfasado | Modelo actualizado constantemente |
| Tolerancia a fallos | Baja (empezar desde cero) | Alta (checkpoints intermedios) |
| Complejidad | Media | Alta (requiere arquitectura robusta) |
| Consistencia | Riesgo de desfase | Datos en tiempo real |
Y puedes leer el artículo original en el blog de ingeniería de LinkedIn
Espero que te guste el episodio.
Si es así, no olvides dejar un «Me gusta» y algún comentario al episodio en Ivoox o una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Youtube o donde quiera que escuches el podcast.
Recuerda que si tienes cualquier duda o pregunta puedes contactar conmigo a través del formulario de contacto o podemos seguir la conversación en LinkedIn.
Muchas gracias por estar ahí y te espero en el próximo episodio de Un Podcast Ninja sobre Big Data.