LLMOps con el flujo de avisos y Azure DevOps

Las operaciones de lenguaje de gran tamaño, o LLMOps, se han convertido en la piedra angular de la ingeniería de solicitud eficiente y del desarrollo e implementación de aplicaciones basadas en LLM. A medida que la demanda de aplicaciones basadas en LLM sigue aumentando, las organizaciones se encuentran con la necesidad de un proceso cohesivo y racionalizado para administrar su ciclo de vida de extremo a otro.

Azure Machine Learning le permite la integración con Azure DevOps para automatizar el ciclo de vida de desarrollo de aplicaciones con LLM mediante el flujo de avisos.

El flujo de avisos de Azure Machine Learning proporciona un enfoque simplificado y estructurado para desarrollar aplicaciones infundidas por LLM. Su proceso y ciclo de vida bien definidos le guían por el proceso de creación, prueba, optimización e implementación de flujos, que culmina en la creación de soluciones LLM totalmente funcionales.

Características del flujo de avisos de LLMOps

LLMOps con flujo de avisos es una "plantilla y una guía de LLMOps" para ayudarle a crear aplicaciones infundidas con LLM mediante el flujo de avisos. Ofrece las siguientes características:

  • Hospedaje de código centralizado: este repositorio es compatible con el hospedaje de código para múltiples flujos basados en el flujo de avisos, proporcionando un único repositorio para todos sus flujos. Piense en esta plataforma como un único repositorio donde reside todo el código de flujo de avisos. Es como una biblioteca para los flujos, lo que facilita la búsqueda, el acceso y la colaboración en diferentes proyectos.

  • Administración del ciclo de vida: cada flujo disfruta de su propio ciclo de vida, lo que permite realizar transiciones fluidas desde la experimentación local hasta la implementación de producción. Screenshot of pipeline.

  • Experimentación de variantes e hiperparámetros: experimente con múltiples variantes e hiperparámetros, evaluando las variantes de flujo con facilidad. Las variantes y los hiperparámetros son como ingredientes en una receta. Esta plataforma permite experimentar con diferentes combinaciones de variantes en varios nodos de un flujo.

  • Múltiples destinos de implementación: el repositorio admite la implementación de flujos en Azure App Service, Kubernetes, Azure y los procesos administrados a través de la configuración, asegurando que sus flujos puedan escalarse según sea necesario. También genera imágenes de Docker fusionadas con el tiempo de ejecución de Flow y los flujos para implementación para cualquier plataforma de destino y sistema operativo compatible con Docker. Screenshot of endpoints.

  • Implementación A/B: implemente sin problemas implementaciones A/B, lo que le permitirá comparar diferentes versiones de flujo sin esfuerzo. Al igual que en las pruebas tradicionales de A/B para sitios web, esta plataforma facilita la implementación de A/B para el flujo de avisos. Esto significa que puede comparar sin esfuerzo diferentes versiones de un flujo en una configuración real para determinar cuál es el mejor rendimiento. Screenshot of deployments.

  • Relaciones de conjuntos de datos/flujos de varios a varios: admita múltiples conjuntos de datos para cada norma y flujo de evaluación, asegurando la versatilidad en la prueba y evaluación de flujos. La plataforma está diseñada para dar cabida a varios conjuntos de datos para cada flujo.

  • Registro de datos condicionales y modelos: la plataforma crea una nueva versión para el conjunto de datos en el recurso de datos de Azure Machine Learning y fluye en el registro de modelos solo cuando hay un cambio en ellos, no en caso contrario.

  • Informes completos: genere informes detallados para cada configuración de variante, lo que le permite tomar decisiones informadas. Proporciona una recopilación detallada de métricas, experimentos y variantes en masa para todas las ejecuciones y experimentos, habilitando la toma de decisiones basadas en datos tanto en archivos csv como HTML. Screenshot of flow variants report.Screenshot of metrics report.

Otras características para la personalización:

  • Ofrece BYOF (traiga sus propios flujos). Una plataforma completa para desarrollar varios casos de uso relacionados con aplicaciones infundidas de LLM.

  • Ofrece desarrollo basado en la configuración. No es necesario escribir un extenso código repetitivo.

  • Ofrece ejecución tanto de la experimentación de avisos como de la evaluación a nivel regional y en la nube.

  • Proporciona cuadernos para la evaluación local de los avisos. Proporciona una biblioteca de funciones para la experimentación local.

  • Pruebas de puntos de conexión dentro de la canalización después de la implementación para comprobar su disponibilidad y preparación.

  • Proporciona un "Human-in-loop" opcional para validar las métricas de aviso antes de la implementación.

LLMOps con flujo de avisos proporciona funcionalidades tanto para aplicaciones complejas como para aplicaciones integradas en LLM complejas. Es completamente personalizable para las necesidades de la aplicación.

Fases de LLMOps

El ciclo de vida consta de cuatro fases distintas:

  • Inicialización: definir claramente el objetivo empresarial, recopilar muestras de datos relevantes, establecer una estructura básica de avisos y crear un flujo que mejore sus capacidades.

  • Experimentación: aplicar el flujo a los datos de ejemplo, evaluar el rendimiento del mensaje y afinar el flujo según sea necesario. Iterar continuamente hasta estar satisfecho con los resultados.

  • Evaluación y refinamiento: realizar pruebas comparativas del rendimiento del flujo mediante un conjunto de datos mayor, evaluar la eficacia del mensaje y realizar refinamientos en consecuencia. Avance a la siguiente fase si los resultados cumplen los estándares deseados.

  • Implementación: optimizar el flujo para mejorar la eficiencia y la eficacia, implementar en un entorno de producción, incluida la implementación de A/B, supervisar su rendimiento, recopilar comentarios de los usuarios y usar esta información para mejorar aún más el flujo.

Al adherirse a esta metodología estructurada, el flujo de avisos le permite desarrollar con confianza, probar rigurosamente, ajustar e implementar flujos, lo que conduce a la creación de aplicaciones de inteligencia artificial sólidas y sofisticadas.

La plantilla de flujo de avisos de LLMOps formaliza esta metodología estructurada mediante el enfoque code-first y le ayuda a crear aplicaciones infundidas con LLM mediante el flujo de avisos mediante herramientas y procesos relevantes para el flujo de avisos. Ofrece una variedad de características, como hosting de código centralizado, administración del ciclo de vida, experimentación de hiperparámetros, implementación de A/B, informes para todas las ejecuciones y experimentos, etc.

El repositorio de este artículo está disponible en LLMOps con la plantilla de flujo de avisos

Flujo de proceso de LLMOps

Screenshot of LLMOps prompt flow process.

  1. Esta es la fase de inicialización. Aquí se desarrollan flujos, los datos se preparan y mantienen y se actualizan los archivos de configuración relacionados con LLMOps.
  2. Después del desarrollo local mediante Visual Studio Code junto con la extensión de flujo de avisos, se genera una solicitud de incorporación de cambios desde la rama de características a la rama de desarrollo. Esto da como resultado la ejecución de la canalización de validación de compilación. También ejecuta los flujos de experimentación.
  3. La solicitud de incorporación de cambios se aprueba manualmente y el código se combina con la rama de desarrollo
  4. Una vez que la solicitud de incorporación de cambios se combina con la rama de desarrollo, se ejecuta la canalización de CI para el entorno de desarrollo. Ejecuta los flujos de experimentación y evaluación en secuencia y registra los flujos en Azure Machine Learning Registry, aparte de otros pasos de la canalización.
  5. Después de completar la ejecución de la canalización de CI, un desencadenador de CD garantiza la ejecución de la canalización de CD que implementa el flujo estándar desde Azure Machine Learning Registry como un punto de conexión en línea de Azure Machine Learning y ejecuta pruebas de integración y humo en el flujo implementado.
  6. Se crea una rama de versión a partir de la rama de desarrollo o se genera una solicitud de incorporación de cambios desde la rama de desarrollo hasta la rama de versión.
  7. La solicitud de cambios se aprueba manualmente y el código se combina con la rama de versión. Una vez que la solicitud de cambios se combina con la rama de versión, se ejecuta la canalización de CI para el entorno de producción. Ejecuta los flujos de experimentación y evaluación en secuencia y registra los flujos en Azure Machine Learning Registry, aparte de otros pasos de la canalización.
  8. Después de completar la ejecución de la canalización de CI, un desencadenador de CD garantiza la ejecución de la canalización de CD que implementa el flujo estándar desde Azure Machine Learning Registry como un punto de conexión en línea de Azure Machine Learning y ejecuta pruebas de integración y humo en el flujo implementado.

A partir de aquí, puede obtener LLMOps con flujo de avisos siguiendo los ejemplos de un extremo a otro que le proporcionamos, que le ayudará a desarrollar aplicaciones basadas en LLM usando flujo de avisos y Azure DevOps. Su objetivo principal es proporcionar asistencia en el desarrollo de estas aplicaciones, aprovechando las funcionalidades de flujo de avisos y LLMOps.

Sugerencia

Se recomienda comprender cómo integrar LLMOps con el flujo de avisos.

Importante

El flujo de solicitudes está actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin contrato de nivel de servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Requisitos previos

  • Suscripción a Azure. Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar. Pruebe la versión gratuita o de pago de Azure Machine Learning.
  • Un área de trabajo de Azure Machine Learning.
  • Git que se ejecuta en la máquina local.
  • Una organización en Azure DevOps. La organización de Azure DevOps ayuda a colaborar, planear y realizar un seguimiento de su trabajo y defectos de código, problemas y a configurar la integración continua y la implementación.
  • La extensión de Terraform para Azure DevOps si usa Azure DevOps + Terraform para poner en marcha la infraestructura.

Nota

Se requiere la versión 2.27 de Git o posterior. Para obtener más información sobre cómo instalar el comando Git, consulte https://git-scm.com/downloads y seleccione el sistema operativo

Importante

Los comandos de la CLI de este artículo se probaron mediante Bash. Si usa un shell diferente, es posible que encuentre errores.

Configuración del flujo de avisos

El flujo de avisos usa el recurso de conexiones para conectarse a puntos de conexión como Azure OpenAI, OpenAI o Azure AI Search y usa el entorno de ejecución para la ejecución de los flujos. Estos recursos se deben crear antes de ejecutar los flujos en el flujo de avisos.

Configuración de conexiones para el flujo de avisos

Las conexiones se pueden crear a través de la interfaz de usuario del portal de flujo de avisos o mediante la API de REST. Siga las instrucciones para crear conexiones para el flujo de avisos.

Haga clic en el vínculo para obtener más información sobre conexiones.

Nota:

Los flujos de ejemplo usan la conexión "aoai" y debe crearse una conexión llamada "aoai" para ejecutarlos.

Configuración del proceso y el runtime para el flujo de avisos

Runtime se puede crear a través de la interfaz de usuario del portal de flujo de avisos o mediante la API de REST. Siga las instrucciones para configurar el proceso y el runtime para el flujo de avisos.

Haga clic en el vínculo para obtener más información sobre el runtime.

Nota:

Se debe usar el mismo nombre de runtime en el archivo LLMOps_config.json que se explica más adelante.

Configuración de la entidad de servicio

Una entidad de servicio de Azure es una identidad de seguridad que las aplicaciones, los servicios y las herramientas de automatización usan para acceder a los recursos de Azure. Representa una aplicación o servicio que necesita autenticarse con Azure y acceder a los recursos en su nombre. Siga las instrucciones para crear una entidad de servicio en Azure.

Esta entidad de servicio se usa más adelante para configurar la conexión de Azure DevOps Service y Azure DevOps para autenticarse y conectarse a los servicios de Azure. Los trabajos ejecutados en el flujo de avisos para ambos experiment and evaluation runs están bajo la identidad de esta entidad de servicio. Además, tanto compute como runtime se crean con la misma entidad de servicio.

Sugerencia

La configuración proporciona permisos owner a la entidad de servicio.

  • Esto se debe a que la canalización de CD proporciona automáticamente acceso al punto de conexión de Azure Machine Learning recién aprovisionado al área de trabajo de Azure Machine Learning para leer la información de las conexiones.
  • También lo agrega a la directiva del almacén de claves asociada al área de trabajo de Azure Machine Learning con permisos secretos get y list.

El permiso de propietario se puede cambiar a permisos de nivel contributor cambiando el código YAML de la canalización y quitando el paso relacionado con los permisos.

Configurar Azure DevOps

Hay varios pasos que se deben realizar para configurar el proceso de LLMOps mediante el repositorio de Azure DevOps.

Creación de un proyecto de Azure DevOps

Siga las instrucciones para crear un nuevo proyecto de Azure DevOps mediante la interfaz de usuario de Azure DevOps.

Configuración de la autenticación entre Azure DevOps y Azure

Siga las instrucciones para usar la entidad de servicio creada anteriormente y configurar la autenticación entre Azure DevOps y los servicios de Azure.

Este paso configura una nueva conexión de servicio de Azure DevOps que almacena la información de la entidad de servicio. Las canalizaciones del proyecto pueden leer la información de conexión mediante el nombre de la conexión. Esto ayuda a configurar los pasos de canalización de Azure DevOps para conectarse automáticamente a Azure.

Creación de un grupo de variables de Azure DevOps

Siga las instrucciones para crear un nuevo grupo de variables y agregar una variable relacionada con la conexión del servicio Azure DevOps.

El nombre de la entidad de seguridad de servicio está disponible automáticamente como variable de entorno para las canalizaciones.

Configuración del repositorio y las canalizaciones de Azure DevOps

Este repositorio usa dos ramas: main y development para promociones de código y ejecución de canalizaciones en lugar de cambios en el código. Siga las instrucciones para configurar su propio repositorio local y remoto para usar código de este repositorio.

Los pasos implican clonar main y development branches desde el repositorio y asociar el código para hacer referencia al nuevo repositorio de Azure DevOps. Aparte de la migración de código, las canalizaciones, tanto las de PR como las de desarrollo, se configuran de forma que se ejecutan automáticamente en función de los desencadenadores de creación y combinación de PR.

La directiva de rama para la rama de desarrollo también debe configurarse para ejecutar la canalización de PR para cualquier solicitud de incorporación de cambios generada en la rama de desarrollo desde una rama de características. La canalización de desarrollo se ejecuta cuando la solicitud de incorporación de cambios se combina con la rama de desarrollo. La canalización de desarrollo consta de fases de CI y CD.

También hay humanos en el bucle implementado dentro de las canalizaciones. Una vez ejecutada la fase de CI en la canalización dev, sigue la fase de CD después de la aprobación manual. La aprobación debe producirse desde la interfaz de usuario de ejecución de compilación de canalización de Azure DevOps. El tiempo de espera predeterminado es de 60 minutos después del cual se rechazará la canalización y la fase de CD no se ejecutará. La aprobación manual de la ejecución provocará la ejecución de los pasos de CD de la canalización. La aprobación manual está configurada para enviar notificaciones a "replace@youremail.com". Debe reemplazarse por un identificador de correo electrónico adecuado.

Prueba de las canalizaciones

Siga las instrucciones mencionadas en para probar las canalizaciones.

Los pasos son:

  1. Genere una solicitud de PR (solicitud de cambios) de una rama de características a una rama de desarrollo.
  2. La canalización de PR debe ejecutarse automáticamente como resultado de la configuración de la directiva de rama.
  3. A continuación, la solicitud de PR se combina con la rama de desarrollo.
  4. Se ejecuta la canalización "dev" asociada. Esto dará lugar a la ejecución completa de CI y CD y dará como resultado el aprovisionamiento o la actualización de puntos de conexión de Azure Machine Learning existentes.

Los resultados de la prueba deben ser similares a los que se muestran aquí.

Ejecución local

Para aprovechar las funcionalidades de la ejecución local, siga estos pasos de instalación:

  1. Clone el repositorio: empiece por clonar el repositorio de la plantilla desde su repositorio de GitHub.
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. Configurar archivo env: cree un archivo .env a nivel de la carpeta principal y proporcione información para los elementos mencionados. Agregue tantos nombres de conexión como sea necesario. Todos los ejemplos de flujo de este repositorio usan la conexión AzureOpenAI denominada aoai. Agregue una línea aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"} con valores actualizados para api_key y api_base. Si se usan conexiones adicionales con nombres diferentes en los flujos, se deben agregar en consecuencia. Actualmente, se admite el flujo con AzureOpenAI como proveedor.

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. Prepare la conda local o el entorno virtual para instalar las dependencias.

python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv

  1. Traiga o escriba los flujos en la plantilla en función de la documentación aquí.

  2. Escriba scripts de Python similares a los ejemplos proporcionados en la carpeta local_execution.

Pasos siguientes