Dominando el Futuro Evaluando Arquitecturas de Datos Generadas por LLM utilizando tecnologías IaC

Dominando el Futuro Evaluación de Arquitecturas de Datos Generadas por LLM utilizando Tecnologías IaC

Evaluar la idoneidad de los LLMs para la generación de infraestructura como código para la provisión, configuración y despliegue de aplicaciones modernas

Foto de ZHENYU LUO en Unsplash

Introducción

En este artículo, abordamos la idoneidad de los LLMs para aprovechar el ciclo de vida de aplicaciones reales, que van desde la provisión de infraestructura hasta la gestión de configuración y el despliegue. El código fuente resultante de este esfuerzo está disponible públicamente en GitHub¹¹. Las soluciones de infraestructura como código (IaC) facilitan la gestión y provisión de infraestructura a través de código en lugar de un proceso manual¹. Estas soluciones se están volviendo comunes, y los principales proveedores de nube han implementado su propia versión de soluciones IaC para interactuar con sus servicios. En este sentido, AWS CloudFormation, Google Cloud Deployment Manager y Azure Resource Manager Templates agilizan la provisión de servicios en la nube, eliminando la necesidad de que las operaciones de TI creen manualmente servidores, bases de datos y redes. Sin embargo, estas múltiples posibilidades introducen el riesgo de bloqueo del proveedor, ya que la definición del IaC requerido para un determinado proveedor de nube no es portable y tendría que traducirse si se requiere un proveedor de nube diferente. En este sentido, herramientas como Terraform² o Pulumi³ proporcionan una abstracción sobre las diversas implementaciones de los diferentes proveedores de nube y facilitan el desarrollo de implementaciones portátiles. De esta manera, se reduce significativamente el riesgo de bloqueo del proveedor y las organizaciones pueden reaccionar de manera dinámica a sus necesidades sin incurrir en costos de implementación significativos. Además de esto, existen numerosos beneficios que las tecnologías IaC ofrecen⁴:

  • Consistencia: permite la automatización de la provisión de infraestructura al permitir despliegues repetibles.
  • Reducción del riesgo: promueve una aproximación menos propensa a errores en la gestión de infraestructura, ya que se minimizan las intervenciones manuales.
  • Optimización de costos: permite identificar recursos innecesarios con mayor facilidad y migrar rápidamente entre proveedores de nube para adaptarse a cambios en la facturación.
  • Mejora de la colaboración: los scripts se pueden integrar en herramientas de control de versiones, lo que promueve la colaboración entre individuos y equipos.

Sin embargo, el ciclo de vida de la aplicación va más allá de la provisión de infraestructura. La siguiente figura muestra el ciclo de vida de la aplicación respaldado por diferentes tecnologías IaC⁵.

El ciclo de vida de la aplicación respaldado por tecnologías de infraestructura como código. | Fuente: Josu Diaz-de-Arcaya et al.⁵

En este escenario, el objetivo de las tecnologías IaC va más allá de la mera provisión de recursos de infraestructura. Después de crear la infraestructura necesaria, la etapa de gestión de configuración garantiza la instalación adecuada de todos los requisitos. Esta etapa suele realizarse con herramientas como ansible⁶, chef⁷ o puppet⁸. Finalmente, el despliegue de la aplicación supervisa la orquestación de la aplicación en los diversos dispositivos de infraestructura.

Comprensión de los LLMs

Los Modelos de Lenguaje Grandes (LLMs) se refieren a una clase de modelos de inteligencia artificial diseñados para comprender y generar texto similar al humano basándose en la entrada proporcionada. Estos modelos son conocidos por su considerable cantidad de parámetros, que les permiten capturar patrones y matices complejos en el lenguaje⁹.

  • Generación de texto: El texto creado por los LLMs puede ser cohesivo y relevante para su contexto. Se emplean para actividades como completar textos, generar material e incluso escribir creativamente.
  • Comprensión del lenguaje: Los LLMs son capaces de comprender y extraer información del texto. Son capaces de realizar análisis de actitud, clasificación de texto y recuperación de información.
  • Traducción: Los LLMs pueden traducir texto de un idioma a otro. Esto es muy beneficioso para aplicaciones de traducción automática.
  • Responder preguntas: Los LLMs pueden responder preguntas basadas en un contexto dado. Se utilizan en chatbots y asistentes virtuales para responder consultas de los usuarios.
  • Resumen de texto: Los LLMs pueden resumir pasajes largos de texto en resúmenes más cortos y coherentes. Esto es útil para condensar información para una rápida comprensión.

Entre las capacidades mencionadas, nos centraremos en la generación de texto. En particular, en su capacidad para producir el código correcto de IaC basado en las indicaciones de entrada, los Modelos de Lenguaje Grandes (LLMs) han avanzado significativamente en el campo del procesamiento del lenguaje natural, pero también han planteado varios desafíos y preocupaciones. Algunos de los problemas clave y preocupaciones asociadas con los LLMs en ese momento incluyen:

  • Prejuicios e imparcialidad: Los LLMs pueden aprender prejuicios presentes en los datos en los que se entrenan, lo que puede llevar a resultados sesgados o injustos.
  • Desinformación y falsedad: Los LLMs pueden generar información falsa o engañosa, lo que puede contribuir a la propagación de desinformación y falsedad en línea. Estos modelos tienen el potencial de crear contenido que parece creíble pero es factualmente incorrecto.
  • Seguridad y privacidad: Los LLMs pueden ser utilizados de manera incorrecta para generar contenido malicioso, como textos deepfake, noticias falsas o correos electrónicos de phishing.

La siguiente tabla muestra una comparación entre varios LLMs¹⁰

Generando IaC con LLMs

Con el fin de probar cómo funcionan actualmente las herramientas LLM en el campo de IaC, se ha diseñado un caso de uso. El objetivo final es construir una API en una máquina virtual utilizando el framework FastAPI que permita al cliente realizar tareas de búsqueda y eliminación en un clúster de Elasticsearch utilizando métodos HTTP. El clúster estará compuesto por tres nodos, cada uno en su propia máquina virtual, y en otra máquina estará Kibana, una herramienta de administración para el clúster que admite visualizaciones. Todo debe estar en la nube de AWS. La siguiente figura muestra esta arquitectura:

Caso de uso diseñado para probar la viabilidad de IaC generado por LLMs

El desafío consiste en completar exitosamente las siguientes tres tareas utilizando herramientas LLM. En este artículo, hemos utilizado ChatGPT de OpenAI.

  1. Código de Terraform para construir una infraestructura con cinco máquinas virtuales en AWS.
  2. Código fuente de la aplicación FastAPI para realizar operaciones de búsqueda y eliminación de documentos a través de los métodos HTTP de la API.
  3. Código de Ansible para la implementación e instalación de un clúster de Elasticsearch en tres nodos, Kibana en otro nodo, y una aplicación FastAPI en el nodo restante.

Tarea #1

Para este desafío, hemos utilizado la siguiente indicación:

Necesito crear, mediante Terraform, cinco máquinas virtuales en un proveedor de nube pública que desees. El propósito de estas máquinas virtuales es el siguiente: Tres de ellas son para implementar un clúster de Elasticsearch, que va a procesar 2G de datos cada día; la otra es para Kibana; y la última es para implementar una aplicación FastAPI. Debes elegir el hardware para cada máquina virtual y el proveedor de nube para cada máquina virtual. Para las variables que no conozcas, utiliza variables como marcadores de posición. Utiliza instancias económicas.

La primera respuesta fue un buen esfuerzo, pero necesitábamos seguir iterando. Por ejemplo, queríamos que todas las variables estuvieran definidas en un archivo separado, lo que dio como resultado la siguiente imagen.

Extracto de código de variables.tf, que contiene las variables a configurar.

De manera similar, nos gustaría conocer las direcciones IP de la implementación, y queremos que esta configuración esté en un archivo separado.

Extracto de código de output.tf, que contiene las direcciones IP de las máquinas virtuales recién provisionadas.

La IA hizo un excelente trabajo al describir las instancias que queríamos, así como al configurarlas con los grupos de seguridad que se requerían.

Extracto de código de main.tf, que contiene las máquinas virtuales a provisionar

También se crearon los recursos necesarios para los grupos de seguridad que queríamos, y se utilizaron marcadores de posición para definir los diversos puertos como variables.

Extracto de código de main.tf, que contiene los grupos de seguridad a utilizar.

En general, ChatGPT hizo un buen trabajo al realizar esta tarea. Sin embargo, nos llevó un tiempo obtener una configuración viable y obtener la configuración de red correcta. Por ejemplo, queríamos conectarnos a cada una de las máquinas virtuales provisionadas, lo que indicamos de la siguiente manera.

Deseo tener acceso ssh a todos ellos desde mi laptop, y la instancia de kibana requiere acceso http y https desde mi laptop.

La indicación anterior produjo un código que casi estaba correcto, ya que la IA se confundió con las políticas de ingreso y salida. Sin embargo, esto fue fácil de detectar y solucionar.

Después de poder acceder a las máquinas virtuales, tuvimos el problema de no poder conectarnos a ellas debido a la falta de permisos. Esto resultó en una conversación más larga, y al final resultó más fácil agregar estas líneas nosotros mismos.

Tarea #2

Para este desafío, hemos utilizado la siguiente indicación:

Necesito crear una aplicación FastAPI. El propósito de esta API es tener métodos para almacenar un solo documento json en un clúster Elasticsearch, almacenar varios documentos y eliminarlos. El clúster Elasticsearch está implementado en 3 nodos y tiene autenticación básica con el usuario “tecnalia” y la contraseña “iac-llm”.

El resultado de esta indicación ha sido notablemente exitoso. La aplicación utiliza el paquete de Python Elasticsearch¹² para interactuar con el clúster Elasticsearch, y es completamente válido. Solo debemos recordar que necesitamos cambiar las direcciones IP de los nodos donde se implementa el clúster. En la siguiente imagen, se ha creado el primer método que tiene el propósito de insertar un solo documento en Elasticsearch.

Fragmento de código para el método de almacenar un solo documento.

Luego, el segundo método se utiliza para realizar una inserción masiva de varios documentos en una sola llamada.

Fragmento de código para el método de almacenar varios documentos.

Finalmente, el último método se puede utilizar para eliminar un solo documento del clúster de Elasticsearch.

Fragmento de código para el método de eliminar documento.

Consideramos que este experimento ha sido muy exitoso, ya que selecciona correctamente una biblioteca adecuada para realizar la tarea. Sin embargo, se necesitan refinamientos manuales adicionales para convertir este código en un software listo para producción.

Tarea #3

Para este desafío, hemos utilizado la siguiente indicación:

Generar código ansible para instalar un clúster de Elasticsearch en tres nodos. Por favor, añadir también un nodo de Kibana conectado al clúster.

Esta indicación hizo un trabajo aceptable al producir los scripts ansible deseados. Hizo un excelente trabajo al organizar el código fuente en varios archivos. Primero, el inventario con detalles sobre todos los nodos. Tenga en cuenta que este archivo debe ajustarse con las direcciones IP correctas generadas en la Tarea #1.

Fragmento de código del inventory.ini

Luego, se muestra en la siguiente figura el script ansible principal para instalar Elasticsearch. Esto representa un fragmento del mismo, el ejemplo completo se puede encontrar en el repositorio¹¹.

Fragmento de código de elasticsearch_playbook.yml

Por otro lado, la configuración necesaria para cada uno de los nodos de Elasticsearch se ha generado de manera conveniente como un archivo Jinja. En este caso, tuvimos que agregar manualmente las configuraciones path.logs y path.data, ya que Elasticsearch no pudo iniciar debido a problemas de permisos.

Fragmento de código de elasticsearch.yml.j2

En el mismo sentido, ChatGPT pudo generar una configuración similar para la instancia de Kibana. Sin embargo, en este caso, separamos manualmente la configuración en un archivo separado por conveniencia. Un fragmento de este archivo se puede ver en la siguiente imagen.

Fragmento de código de kibana_playbook.yml

De manera similar, el siguiente archivo jinja que se refiere a la instancia de Kibana parece estar bien, aunque sería preferible que las direcciones IP fueran parametrizadas.

Fragmento de código de kibana.yml.j2

En general, encontramos que ChatGPT es extremadamente bueno para producir una estructura inicial del proyecto. Sin embargo, todavía se necesitan muchas acciones para convertir esa estructura en una aplicación de nivel de producción. En este sentido, se requiere un amplio conocimiento en las tecnologías utilizadas para ajustar el proyecto.

Conclusiones

Este artículo aborda el uso de LLM para supervisar el ciclo de vida de la aplicación. Se discuten los pros y los contras de este esfuerzo en las líneas siguientes.

Pros

  • El uso de LLM para el soporte de las diversas etapas del ciclo de vida de la aplicación es particularmente beneficioso para iniciar el proyecto, especialmente en tecnologías conocidas.
  • El esqueleto inicial está bien estructurado y proporciona estructuras y metodologías que de otra manera no se habrían utilizado.

Contras

  • Los LLM están sujetos al riesgo de sesgo asociado con el uso de soluciones de IA; en este caso, ChatGPT eligió AWS sobre opciones similares.
  • Pulir el proyecto para que esté listo para producción puede ser problemático, y a veces es más fácil ajustar el código manualmente, lo que requiere un amplio conocimiento de las tecnologías utilizadas.

Agradecimientos

Este trabajo está financiado por el proyecto SIIRSE Elkartek (Sistemas industriales inteligentes robustos, seguros y éticos para la Industria 5.0: Paradigmas avanzados para la especificación, diseño, evaluación y monitoreo) del Gobierno Vasco (ELKARTEK 2022 KK-2022/00007).

Contribución de autoría

La conceptualización, análisis, investigación y escritura son un esfuerzo conjunto de Juan López de Armentia, Ana Torre y Gorka Zárate.

Referencias

  1. ¿Qué es la Infraestructura como Código (IaC)? (2022). https://www.redhat.com/es/topics/automation/what-is-infrastructure-as-code-iac
  2. Terraform de HashiCorp. (s.f.). Consultado el 5 de octubre de 2023, en https://www.terraform.io
  3. Pulumi: Infraestructura como Código Universal (s.f.). Consultado el 5 de octubre de 2023, en https://www.pulumi.com/
  4. Los 7 mayores beneficios de la Infraestructura como Código – DevOps (s.f.). Consultado el 5 de octubre de 2023, en https://duplocloud.com/blog/infrastructure-as-code-benefits/
  5. Díaz-De-Arcaya, J., Lobo, J. L., Alonso, J., Almeida, A., Osaba, E., Benguria, G., Etxaniz, I. y Torre-Bastida, A. I. (2023). IEM: Orquestador del ciclo de vida unificado para despliegues multilingües de IaC Formato de referencia de ACM. https://doi.org/10.1145/3578245.3584938
  6. Ansible es Automatización IT Simple (s.f.). Consultado el 5 de octubre de 2023, en https://www.ansible.com/
  7. Chef Software: Soluciones de Automatización DevOps | Chef (s.f.). Consultado el 5 de octubre de 2023, en https://www.chef.io/
  8. Puppet: Infraestructura y Automatización de IT a Escala | Puppet de Perforce (s.f.). Consultado el 5 de octubre de 2023, en https://www.puppet.com/
  9. Kerner, S. M. (s.f.). ¿Qué son los Modelos de Lenguaje Grandes? | Definición de TechTarget. Consultado el 5 de octubre de 2023, en https://www.techtarget.com/whatis/definition/large-language-model-LLM
  10. Sha, A. (2023). Los 12 mejores Modelos de Lenguaje Grandes (LLMs) en 2023 | Beebom. https://beebom.com/best-large-language-models-llms/
  11. Díaz-de-Arcaya, J., López de Armentia, J. y Zárate, G. (s.f.). iac-llms GitHub. Consultado el 5 de octubre de 2023, en https://github.com/josu-arcaya/iac-llms
  12. Mantenedores de la Biblioteca de Clientes Elásticos (2023). elasticsearch · PyPI. https://pypi.org/project/elasticsearch/

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Desbloqueando la transparencia de la IA Cómo el agrupamiento de características de Anthropic mejora la interpretabilidad de las redes neuronales

En un reciente artículo, “Hacia la monosemanticidad: descomposición de modelos de lenguaje con aprendizaje de d...

Inteligencia Artificial

La actualización de Super Resolución de Video NVIDIA RTX mejora la calidad del video, preserva los detalles y se expande a las GPU de la serie GeForce RTX 20'.

NVIDIA anunció hoy una actualización de RTX Video Super Resolution (VSR) que ofrece una mayor fidelidad gráfica gener...

Inteligencia Artificial

Día de Desarrollo de OpenAI 2023 ¡Cuatro importantes anuncios de la presentación principal del fundador Sam Altman que no puedes perderte!

La primera conferencia para desarrolladores de OpenAI estuvo repleta de asombrosos anuncios de productos. ¿Y sabes qu...

Inteligencia Artificial

Investigadores de la Universidad de Pekín presentan FastServe un sistema de servicio de inferencia distribuida para modelos de lenguaje grandes (LLMs).

Las mejoras en los modelos de lenguaje grandes (LLM) crean oportunidades en diversos campos e inspiran una nueva ola ...

Aprendizaje Automático

Redes Neuronales con Paso de Mensajes Retrasado y Reconfiguración Dinámica

Esta publicación fue coescrita con Francesco Di Giovanni y Ben Gutteridge y se basa en el artículo de B. Gutteridge e...

Inteligencia Artificial

Aprendizaje de Diferencia Temporal y la importancia de la exploración Una guía ilustrada

Recientemente, los algoritmos de Aprendizaje por Reforzamiento (RL) han ganado mucha atención al resolver problemas d...