1 of 1

Eje Temático:

Trabajos Estudiantiles

................................

Integración y Despliegue Continuo de Microservicios

con GitHub, Docker y Portainer

Santiago Fritz, José Ramirez Chavez, Paula Ponce, Gabriel Migo, Romina Istvan

Laboratorio de Ingeniería en Sistemas de Información, LINES

Universidad Tecnológica Nacional, Facultad Regional La Plata

{sfritz; ramirezj}@alu.frlp.utn.edu.ar; {mpaulaponce; gmigo; ristvan}@frlp.utn.edu.ar

San Fernando del Valle de Catamarca, Catamarca, Argentina – 7 y 8 de noviembre 2024

En el mundo del desarrollo de Lenguajes de Modelos Grandes (LLMs), la agilidad y la eficiencia son imperativas. Estos sistemas, cada vez más complejos y demandantes de recursos computacionales, requieren arquitecturas que permitan un desarrollo rápido, una escalabilidad flexible y una gestión eficiente de cambios. �Para maximizar los beneficios de esta arquitectura y garantizar un flujo continuo de mejoras, es esencial implementar prácticas de Integración y Despliegue Continuo (CI/CD). La CI/CD no solo permite automatizar el desarrollo y las pruebas, sino que también optimiza la respuesta a los cambios, asegurando la entrega confiable de nuevas versiones del modelo. Herramientas como GitHub Actions, Docker y Portainer juegan un rol clave en esta automatización: GitHub Actions facilita la orquestación de los flujos de trabajo, Docker encapsula cada microservicio en contenedores para un despliegue ágil, y Portainer permite una gestión centralizada de los contenedores.

Este proyecto presenta una solución para el despliegue continuo y la utilización de grandes modelos de lenguaje (LLM) especializados en la generación de código. Utilizando GitHub, Docker y Portainer, se ha creado un pipeline de Integración y Despliegue Continuo (CI/CD) automatizado que permite entrenar y desplegar nuevas versiones del modelo de manera rápida y eficiente. �

Introducción

Desarrollo

Se dispone de una arquitectura de microservicios para sustentar un proyecto de inteligencia artificial, centrado en la generación de texto de alta calidad mediante modelos de lenguaje grandes (LLM) y la técnica de generación aumentada por recuperación (RAG). Esta arquitectura, altamente modular y escalable, permitió construir un sistema capaz de interactuar con una amplia variedad de modelos y bases de datos vectoriales, ofreciendo una gran flexibilidad y adaptabilidad.

En las primeras etapas del proyecto, la implementación de nuevas funcionalidades se realizaba de manera manual, lo que resultaba en un proceso lento y propenso a errores. Cada cambio requería una intervención humana para actualizar el código, reiniciar los servicios y ejecutar pruebas, lo cual ralentizaba significativamente el desarrollo y aumentaba el riesgo de introducir fallos en el sistema.

Para superar estas limitaciones, se adoptó una metodología de integración y despliegue continuo (CI/CD). Esta práctica automatiza el proceso de desarrollo, desde la escritura del código hasta su despliegue en producción. Mediante herramientas como GitHub Actions, Docker y Portainer, se creó un pipeline de CI/CD que construye automáticamente las imágenes de los microservicios, ejecuta pruebas unitarias y de integración, y despliega las nuevas versiones en los entornos correspondientes. El pipeline generado para la aplicación sigue el siguiente listado de actividades (ver Figura 1):

  1. Desarrollo: Los equipos crean código en Python y lo alojan en un repositorio Git.
  2. Construcción y Empaquetado: Al detectar un cambio en el repositorio, GitHub Actions se activa, ejecutando un comando para construir una nueva imagen Docker a partir del código generado.
  3. Almacenamiento: La nueva imagen de Docker es enviada a un registro de contenedores.
  4. Actualización de Metadatos: A la par que la nueva imagen se almacena, se ejecuta una petición a Portainer para obtener información sobre los servicios en ejecución actualmente.
  5. Despliegue: Se obtiene la nueva imagen desde el registro y se actualiza la misma en el servidor productivo, lo cual implica un reinicio del contenedor en cuestión con la nueva versión del código generado.

Figura 1 – Pipeline CI/CD

Resultados Obtenidos

Las tablas siguientes muestran los tiempos promedio empleados en el proceso manual y automatizado en cada etapa para un proceso de implementación de cambios mínimos sobre el contenedor de base de datos:

Actividad

Tiempo Insumido (min)

Total (min)

Conexión al servidor productivo

3:00

3:00

Construcción de imagen

2:10

5:10

Baja de servicios activos

00:15

5:25

Alta de nuevo servicio

02:15

7:35

Tabla 1 – Tiempo Insumido Manualmente

Actividad

Tiempo Insumido (min)

Total (min)

Construcción de imagen

2:10

2:10

Envió de parámetros

0:15

2:25

Pull y despliegue

1:05

3:30

Tabla 2 – Tiempo Insumido Automáticamente

Conclusión

El análisis de los datos presentados revela una disminución considerable en el tiempo requerido para completar el proceso, acercándose a la mitad del tiempo original. Si bien el impacto de esta reducción puede variar según el caso, es evidente que la automatización completa del proceso ha generado beneficios significativos en términos de eficiencia y productividad. La eliminación de la intervención humana no solo ha optimizado los tiempos de ejecución, sino que también ha minimizado la posibilidad de errores, garantizando así resultados más precisos y confiables.