Integración del flujo de avisos con DevOps para aplicaciones basadas en LLM
El flujo de avisos de Azure Machine Learning es un método fácil de usar e iterar flujos para el desarrollo de aplicaciones basadas en modelos de lenguaje grande (LLM). El flujo de avisos proporciona un SDK y la CLI, una extensión de Visual Studio Code y una interfaz de usuario de creación de flujo. Estas herramientas facilitan el desarrollo de flujo local, la ejecución de flujo local y la ejecución de evaluación, y la transición de flujos entre entornos de área de trabajo locales y en la nube.
Puede combinar la experiencia de flujo de avisos y las funcionalidades de código con operaciones de desarrollador (DevOps) para mejorar los flujos de trabajo de desarrollo de aplicaciones basados en LLM. Este artículo se centra en la integración del flujo de avisos y DevOps para aplicaciones basadas en LLM de Azure Machine Learning.
En el diagrama siguiente se muestra la interacción del desarrollo del flujo de avisos local y basado en la nube con DevOps.
Requisitos previos
Un área de trabajo de Azure Machine Learning. Para crear uno, consulte Creación de recursos para empezar.
Un entorno de Python local con el SDK de Python de Azure Machine Learning v2 instalado, creado siguiendo las instrucciones de Introducción.
Nota:
Este entorno es independiente del entorno que usa la sesión de proceso para ejecutar el flujo, que se define como parte del flujo. Para más información, consulte Administrar la sesión de proceso del flujo de avisos en Estudio de Azure Machine Learning.
Visual Studio Code con las extensiones de Python y Flujo de avisos instaladas.
Use una experiencia "code-first" en el flujo de avisos
El desarrollo de aplicaciones basadas en LLM suele seguir un proceso estandarizado de ingeniería de aplicaciones que incluye repositorios de código fuente y canalizaciones de integración continua/implementación continua (CI/CD). Este proceso promueve el desarrollo simplificado, el control de versiones y la colaboración entre los miembros del equipo.
La integración de DevOps con la experiencia de código de flujo de avisos ofrece a los desarrolladores de código un proceso de iteración de GenAIOps o LLMOps más eficaz, con las siguientes características y ventajas clave:
Flujo de versiones en el repositorio de código. Puede definir archivos de flujo en formato YAML y permanecen alineados con los archivos de origen referenciados en la misma estructura de carpetas.
Integración de la ejecución del flujo con la canalización CI/CD. Pueden integrar el flujo de avisos perfectamente en su proceso de entrega y canalización de CI/CD utilizando la CLI o el SDK de flujo de avisos para desencadenar ejecuciones de flujo automáticamente.
Transición fluida entre local y en la nube. Puede exportar fácilmente su carpeta de flujo a su repositorio de código local o ascendente para el control de versiones, el desarrollo local y el uso compartido. También puede importar sin esfuerzo la carpeta de flujo en Azure Machine Learning para crear, probar e implementar más mediante recursos en la nube.
Acceder al código de flujo de avisos
Cada flujo de avisos tiene una estructura de carpetas de flujo que contiene archivos de código esenciales que definen el flujo. La estructura de carpetas organiza su flujo, facilitando transiciones más fluidas entre la local y la nube.
Azure Machine Learning proporciona un sistema de archivos compartido para todos los usuarios del área de trabajo. Al crear un flujo, se genera automáticamente una carpeta de flujo correspondiente y se almacena en el directorio Users/<username>/promptflow.
Trabajar con archivos de código de flujo
Una vez creado un flujo en el Estudio de Azure Machine Learning, puede ver, editar y administrar los archivos de flujo en la sección Archivos de la página de creación de flujos. Cualquier modificación realizada en los archivos se refleja directamente en el recurso compartido de archivos.
La carpeta de flujo de un flujo basado en LLM contiene los siguientes archivos clave.
flow.dag.yaml es el archivo de definición de flujo principal en formato YAML. Este archivo es integral para la creación y la definición del flujo de avisos. El archivo incluye información sobre las entradas, salidas, nodos, herramientas y variantes que usa el flujo.
Los archivos de código fuente administrados por el usuario en formato Python (.py) o Jinja 2 (.jinja2) configuran las herramientas y nodos del flujo. La herramienta Python usa archivos de Python para definir la lógica personalizada de Python. La herramienta de avisos y la herramienta LLM usan archivos Jinja 2 para definir el contexto del aviso.
Los archivos que no son de origen, como los archivos de utilidad y de datos, se pueden incluir en la carpeta de flujo junto con los archivos de origen.
Para ver y editar el código sin procesar del flow.dag.yaml y los archivos de código fuente en el editor de archivos, active el Modo de archivo sin formato.
Como alternativa, puede acceder y editar todas las carpetas y archivos de flujo desde la página de Notebooks del Estudio de Azure Machine Learning.
Descarga y comprobación del código de flujo de avisos
Para comprobar el flujo en el repositorio de código, exporte la carpeta de flujo del Estudio de Azure Machine Learning a la máquina local. Seleccione el icono de descarga de la sección Archivos de la página de creación de flujo para descargar un paquete ZIP que contenga todos los archivos de flujo. A continuación, puede comprobar ese archivo en el repositorio de código o descomprimirlo para trabajar con los archivos localmente.
Para obtener más información sobre la integración de DevOps con Azure Machine Learning, consulte Integración de Git para Azure Machine Learning.
Desarrollo y prueba localmente
A medida que perfecciona y ajusta el flujo o las indicaciones durante el desarrollo iterativo, puede llevar a cabo múltiples iteraciones localmente dentro de su repositorio de código. La versión comunitaria de VS Code, la extensión Flujo de avisos de VS Code y el SDK local y CLI de flujo de avisos facilitan el desarrollo y las pruebas puramente locales sin vinculación a Azure.
Trabajar localmente le permite realizar y probar cambios rápidamente, sin necesidad de actualizar cada vez el repositorio principal de código. Para obtener más detalles e instrucciones sobre el uso de las versiones locales, consulte la comunidad GitHub de flujo de avisos.
Uso de la extensión de flujo de avisos de VS Code
Al usar la extensión Flujo de avisos de VS Code, puede crear fácilmente el flujo localmente desde el editor de VS Code con una experiencia de interfaz de usuario similar a la de la nube.
Para editar archivos localmente en VS Code con la extensión de flujo de avisos:
En VS Code con la extensión de flujo de avisos habilitada, abra una carpeta de flujo de avisos.
Abra el archivo flow.dag.yaml y seleccione el vínculo del editor visual en la parte superior del archivo.
Utilice el editor visual de flujo de avisos para realizar los cambios en su flujo, como ajustar los avisos en las variantes o agregar más nodos.
Para probar el flujo, seleccione el icono Ejecutar en la parte superior del editor visual o, para probar cualquier nodo, seleccione el icono Ejecutar en la parte superior del nodo.
Usar del SDK y la CLI de flujo de avisos
Si prefiere trabajar directamente en el código o usar Jupyter, PyCharm, Visual Studio u otro entorno de desarrollo integrado (IDE), puede modificar directamente el código YAML en el archivo flow.dag.yaml.
A continuación, puede desencadenar una sola ejecución de flujo para las pruebas mediante la CLI o el SDK de flujo de avisos en el terminal de la siguiente manera.
Para desencadenar una ejecución desde el directorio de trabajo, ejecute el código siguiente:
pf flow test --flow <directory-name>
Los valores devueltos son los registros y salidas de prueba.
Enviar ejecuciones a la nube desde un repositorio local
Una vez que esté satisfecho con los resultados de las pruebas locales, puede usar la CLI o el SDK del flujo de avisos para enviar ejecuciones a la nube desde el repositorio local. El siguiente procedimiento y código se basan en el proyecto de demostración de clasificación web en GitHub. Puede clonar el repositorio del proyecto o descargar el código de flujo de avisos en la máquina local.
Instalación del SDK de flujo de avisos
Instale el SDK o la CLI del flujo de avisos de Azure mediante la ejecución de pip install promptflow[azure] promptflow-tools
.
Si usa el proyecto de demostración, obtenga el SDK y otros paquetes necesarios mediante la instalación de requirements.txt conpip install -r <path>/requirements.txt
.
Conectarse al área de trabajo de Azure Machine Learning
az login
Carga del flujo y creación de una ejecución
Prepare el archivo run.yml para definir la configuración de esta ejecución de flujo en la nube.
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path-to-flow>
data: <path-to-flow>/<data-file>.jsonl
column_mapping:
url: ${data.url}
# Define cloud compute resource
resources:
instance_type: <compute-type>
# If using compute instance compute type, also specify instance name
# compute: <compute-instance-name>
# Specify connections
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
Puede especificar la conexión y el nombre de implementación para cada herramienta del flujo que requiere una conexión. Si no especifica el nombre de la conexión y la implementación, la herramienta utiliza la única conexión e implementación del archivo flow.dag.yaml. Use el código siguiente para dar formato a conexiones:
...
connections:
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
...
Cree la ejecución.
pfazure run create --file run.yml
Cree una ejecución de flujo de evaluación
Prepare el archivo run_evaluation.yml para definir la configuración de esta ejecución de flujo de evaluación en la nube.
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path-to-flow>
data: <path-to-flow>/<data-file>.jsonl
run: <id-of-base-flow-run>
column_mapping:
<input-name>: ${data.<column-from-test-dataset>}
<input-name>: ${run.outputs.<column-from-run-output>}
resources:
instance_type: <compute-type>
compute: <compute_instance_name>
connections:
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
Cree la ejecución de evaluación.
pfazure run create --file run_evaluation.yml
Visualización de los resultados de las ejecuciones
El envío de la ejecución del flujo a la nube devuelve la dirección URL de la nube de la ejecución. Puede abrir la dirección URL para ver los resultados de la ejecución en el Estudio de Azure Machine Learning. También puede ejecutar los siguientes comandos de la CLI o SDK para ver los resultados de la ejecución.
Transmisión de los registros
pfazure run stream --name <run-name>
Ver resultados de la ejecución
pfazure run show-details --name <run-name>
Ver las métricas de ejecución de la evaluación
pfazure run show-metrics --name <evaluation-run-name>
Integración con DevOps
Una combinación de un entorno de desarrollo local y un sistema de control de versiones, como Git, suele ser lo más eficaz para el desarrollo iterativo. Puede realizar modificaciones y probar el código localmente y, a continuación, confirmar los cambios en Git. Este proceso crea un registro continuo de los cambios y ofrece la posibilidad de revertir a versiones anteriores si es necesario.
Cuando necesite compartir flujos en distintos entornos, puede insertarlos en un repositorio de código basado en la nube, como GitHub o Azure Repos. Esta estrategia le permite acceder a la versión más reciente del código desde cualquier ubicación y proporciona herramientas para la colaboración y la administración de código.
Al seguir estos procedimientos, los equipos pueden crear un entorno de colaboración sin problemas, eficiente y productivo para el desarrollo de flujo de avisos.
Para obtener un ejemplo sobre canalizaciones de LLMOps de un extremo a otro que ejecuta flujos de clasificación web, vea Configuración de GenAIOps de un extremo a otro con Flujo de avisos y GitHub y el proyecto de demostración de clasificación web de GitHub.
El flujo de activación se ejecuta en la canalizaciones de CI
Una vez que desarrolle y pruebe con éxito su flujo, y lo registre como versión inicial, estará listo para las siguientes iteraciones de ajuste y prueba. En esta fase, puede desencadenar ejecuciones de flujo, incluidas las pruebas por lotes y las ejecuciones de evaluación, mediante la CLI de flujo de avisos para automatizar los pasos de su canalización de CI.
A lo largo del ciclo de vida de las iteraciones de flujo, puede usar la CLI para automatizar las siguientes operaciones:
- Ejecución del flujo de avisos después de una solicitud de cambios
- Ejecución de la evaluación del flujo de solicitud para asegurarse de que los resultados son de alta calidad
- Registro de modelos de flujo de avisos
- Implementación de modelos de flujo de avisos
Usar la interfaz de usuario del estudio para el desarrollo continuo
En cualquier momento del desarrollo de flujos, puede volver a la interfaz de usuario del Estudio de Azure Machine Learning y usar recursos y experiencias en la nube para realizar cambios en el flujo.
Para seguir desarrollando y trabajando con la versión más actualizada de los archivos de flujo, puede acceder al terminal de la página de Notebook y extraer los últimos archivos de flujo de su repositorio. O bien, puede importar directamente una carpeta de flujo local como un nuevo flujo de borrador para realizar la transición sin problemas entre el desarrollo local y en la nube.
Implementación del flujo como punto de conexión en línea
El último paso para ir a la producción es implementar el flujo como un punto de conexión en línea en Azure Machine Learning. Este proceso le permite integrar su flujo en su aplicación y hacer que esté disponible para su uso. Para obtener más información sobre cómo implementar el flujo, consulte Implementación de flujos en el punto de conexión en línea administrado de Azure Machine Learning para la inferencia en tiempo real.
Colaboración en el desarrollo de flujos
La colaboración entre los miembros del equipo suele ser esencial al desarrollar una aplicación basada en LLM con flujo de avisos. Los miembros del equipo pueden crear y probar el mismo flujo, trabajando en diferentes facetas del flujo o realizando cambios iterativos y mejoras simultáneamente. Esta colaboración requiere un enfoque eficaz y simplificado para compartir código, realizar el seguimiento de modificaciones, administrar versiones e integrar cambios en el proyecto final.
El SDK o la CLI del flujo de avisos y la extensión Flujo de avisos de VS Code facilitan la colaboración sencilla en el desarrollo de flujos basados en código dentro de un repositorio de código fuente. Puede usar un sistema de control de código fuente basado en la nube, como GitHub o Azure Repos, para realizar el seguimiento de los cambios, administrar versiones e integrar estas modificaciones en el proyecto final.
Seguir el procedimiento recomendado para el desarrollo colaborativo
Configure un repositorio de código centralizado.
El primer paso de este proceso de colaboración implica el uso de un repositorio de código como base para el código del proyecto, que incluye el código de flujo de avisos. Este repositorio centralizado permite una organización eficaz, el seguimiento de cambios y la colaboración entre los miembros del equipo.
Cree y pruebe un solo flujo localmente en VS Code con la extensión Flujo de avisos.
Una vez configurado el repositorio, los miembros del equipo pueden usar VS Code con la extensión de Flujo de avisos para la creación local y las pruebas de entrada únicas del flujo. El entorno de desarrollo integrado estandarizado promueve la colaboración entre varios miembros que trabajan en distintos aspectos del flujo.
Use la CLI o el SDK de
pfazure
para enviar ejecuciones por lotes y ejecuciones de evaluación desde flujos locales a la nube.Después del desarrollo y las pruebas locales, los miembros del equipo pueden usar la CLI o el SDK del flujo de avisos para enviar y evaluar las ejecuciones por lotes y evaluación a la nube. Este proceso permite el uso de proceso en la nube, el almacenamiento de resultados persistentes, la creación de puntos de conexión para implementaciones y la administración eficaz en la interfaz de usuario de Studio.
Vea y administre los resultados de ejecución en la interfaz de usuario del área de trabajo del Estudio de Azure Machine Learning.
Después de enviar ejecuciones a la nube, los miembros del equipo pueden acceder a la interfaz de usuario de Studio para ver los resultados y administrar experimentos de forma eficaz. El área de trabajo en la nube proporciona una ubicación centralizada para recopilar y administrar el historial de ejecución, los registros, las instantáneas, los resultados completos y las entradas y salidas del nivel de instancia.
Use la lista Ejecución que registra todo el historial de ejecuciones para comparar fácilmente los resultados de diferentes ejecuciones, lo que ayuda en el análisis de calidad y los ajustes necesarios.
Siga usando el desarrollo iterativo local.
Después de analizar los resultados de los experimentos, los miembros del equipo pueden volver al entorno local y al repositorio de código para obtener más desarrollo y ajuste, y enviar iterativamente ejecuciones posteriores a la nube. Este enfoque iterativo garantiza una mejora coherente hasta que el equipo esté satisfecho con la calidad para producción.
Use la implementación de un solo paso en producción en Studio.
Una vez que el equipo está totalmente seguro de la calidad del flujo, se puede implementar sin problemas como punto de conexión en línea en un entorno en la nube sólido. La implementación como punto de conexión en línea se puede basar en una instantánea de ejecución, lo que permite ofrecer servicios estables y seguros, realizar un seguimiento adicional del uso y la asignación de recursos y realizar la supervisión de registros en la nube.
El Asistente para implementación del Estudio de Azure Machine Learning ayuda a configurar fácilmente la implementación.