Partager via


GenAIOps avec un flux d’invites et Azure DevOps

À mesure que la demande d’applications basées sur les LLM augmente, les organisations ont besoin d’un processus cohérent et rationalisé pour gérer le cycle de vie de bout en bout de ces applications. Generative Artificial Intelligence Operations (GenAIOps), parfois appelé LLMOps, est une pierre angulaire de l’ingénierie d’invite efficace ainsi que du développement et du déploiement d’applications basées sur les LLM.

Cet article montre comment Azure Machine Learning vous permet d’intégrer à Azure DevOps afin d’automatiser le cycle de vie du développement d’applications basées sur des LLM avec un flux d’invite. Le flux d’invite offre une approche simplifiée et structurée pour le développement d’applications basées sur des LLM. Son processus et son cycle de vie bien définis vous guident tout au long du processus de création, de test, d’optimisation et de déploiement de flux, ce qui aboutit à la création de solutions basées sur des LLM entièrement fonctionnelles.

Fonctionnalités du flux d’invite GenAIOps

GenAIOps avec flux d’invite utilise un modèle et des conseils GenAIOps pour vous aider à créer des applications basées sur des LLM au moyen d’un flux d’invite. GenAIOps avec flux d’invite dispose de fonctionnalités pour les applications basées sur des LLM simples ou complexes, et est personnalisable en fonction des besoins de l’application.

GenAIOps avec la plateforme de flux d’invite fournit les fonctionnalités suivantes :

  • Hébergement de code centralisé. Le référentiel prend en charge l’hébergement de code pour plusieurs flux d’invite, et constitue un référentiel unique pour tous vos flux. Ce référentiel s’apparente à une bibliothèque pour vos flux. Il facilite la recherche, l’accès et la collaboration sur différents projets.

  • Gestion du cycle de vie. Chaque flux a son propre cycle de vie, ce qui offre une transition fluide de l’expérimentation locale au déploiement de production.

  • Expérimentation de variantes et d’hyperparamètres. Les variantes et les hyperparamètres sont comme des ingrédients dans une recette. La plateforme vous permet d’expérimenter différentes combinaisons de variantes sur plusieurs nœuds dans un flux. Vous pouvez expérimenter plusieurs variantes et hyperparamètres afin d’évaluer facilement des variantes de flux.

  • Cibles de déploiement multiples. La plateforme génère des images Docker alimentées avec votre flux et votre session de calcul pour le déploiement sur n’importe quelle plateforme cible et système d’exploitation qui prend en charge Docker. Vous pouvez déployer des flux sur Azure App Services, Kubernetes et des calculs managés Azure, et les configurer pour une mise à l’échelle en fonction des besoins.

  • Déploiement A/B. GenAIOps avec flux d’invite implémente en toute transparence les déploiements A/B, ce qui vous permet de comparer facilement différentes versions de flux. La plateforme facilite le déploiement A/B pour le flux d’invite tout comme dans les tests A/B traditionnels de sites web. Vous pouvez facilement comparer différentes versions d’un flux dans un paramètre réel pour identifier la version offrant les performances optimales.

  • Relations de jeu de données à flux plusieurs à plusieurs. GenAIOps avec flux d’invite prend en charge plusieurs jeux de données pour chaque flux standard et d’évaluation, offrant ainsi une polyvalence dans les tests de flux et l’évaluation.

  • Données conditionnelles et inscription de modèle. La plateforme inscrit une nouvelle version du jeu de données pour la ressource de données Azure Machine Learning et les flux dans le registre de modèle uniquement en cas de modification du jeu de données.

  • Rapports complets. GenAIOps avec flux d’invite génère des rapports détaillés pour chaque configuration de variante, ce qui vous permet de prendre des décisions éclairées. La plateforme fournit une collection de métriques détaillées, des expériences et des exécutions en bloc de variantes pour toutes les exécutions et expériences, ce qui permet de prendre des décisions pilotées par les données pour les fichiers CSV et HTML.

GenAIOps avec flux d’invite fournit les autres fonctionnalités suivantes pour la personnalisation :

  • Bring-your-own-flows (BYOF) fournit une plateforme complète pour développer plusieurs cas d’usage liés aux applications basées sur des LLM.
  • Grâce au développement basé sur la configuration, il n’est pas nécessaire d’écrire de longs blocs de code réutilisable.
  • L’expérimentation et l’évaluation de requête s’exécutent à la fois localement et dans le cloud.
  • Des notebooks pour l’évaluation locale des requêtes fournissent une bibliothèque de fonctions pour l’expérimentation locale.
  • Les tests de point de terminaison dans le pipeline après le déploiement vérifient la disponibilité et la préparation des points de terminaison.
  • Un processus d’intervention humaine dans la boucle facultatif (HITL, Human-in-the-Loop) valide les métriques de requête avant le déploiement.

Phases de GenAIOps

Le cycle de vie GenAIOps comprend quatre phases distinctes :

  • Initialisation. Définir clairement l’objectif métier, collecter des exemples de données pertinents, établir une structure de requête de base et créer un flux qui améliore ses capacités.

  • Expérimentation. Appliquer le flux à des exemples de données, évaluer les performances de la requête et affiner le flux en fonction des besoins. Itérer de façon continue jusqu’à ce que les résultats soient satisfaisants.

  • Évaluation et affinement. Établir un point de référence des performances du flux en utilisant un jeu de données plus grand, évaluer l’efficacité de la requête et effectuer les affinements nécessaires. Passer à l’étape suivante si les résultats répondent aux standards souhaités.

  • Déploiement. Optimiser l’efficacité du flux, le déployer dans un environnement de production, y compris le déploiement A/B, surveiller ses performances, recueillir des commentaires des utilisateurs, et utiliser ces informations pour améliorer davantage le flux.

En adhérant à cette méthodologie structurée, les flux d’invites vous permettent de développer en confiance, de tester rigoureusement, d’optimiser et de déployer des flux, ce qui aboutit à la création d’applications d’IA robustes et sophistiquées.

Le modèle de flux d’invite GenAIOps formalise cette méthodologie structurée en appliquant une approche code-first, et vous aide à créer des applications basées sur des LLM à l’aide d’outils et de processus de flux d’invite et de fonctionnalités de flux d’invite GenAIOps. Ce modèle est disponible à la page Modèle GenAIOps avec flux d’invite.

Flux de processus GenAIOps

Capture d’écran du processus de flux d’invites GenAIOps.

  1. Lors de la phase d’initialisation, vous développez des flux, préparez et organisez les données, et mettez à jour les fichiers de configuration associés à GenAIOps.
  2. Après le développement local à l’aide de Visual Studio Code avec l’extension Flux d’invite, vous déclenchez une demande de tirage (pull request) de la branche de fonctionnalité vers la branche de développement, ce qui exécute le pipeline de validation de build et les flux d’expérimentation.
  3. La demande de tirage est approuvée manuellement et le code est fusionné dans la branche de développement.
  4. Une fois la demande de tirage fusionnée dans la branche de développement, le pipeline d’intégration continue (CI) pour l’environnement de développement s’exécute. Le pipeline CI exécute les flux d’expérimentation et d’évaluation en séquence, et inscrit les flux dans Azure Machine Learning Registry en dehors des autres étapes du pipeline.
  5. Une fois l’exécution du pipeline CI terminée, un déclencheur de déploiement continu (CD) exécute le pipeline CD, qui déploie le flux standard à partir d’Azure Machine Learning Registry en tant que point de terminaison en ligne Azure Machine Learning. Le pipeline exécute ensuite des tests d’intégration et de détection de fumée sur le flux déployé.
  6. Une branche de mise en production est créée à partir de la branche de développement, ou une demande de tirage est déclenchée de la branche de développement vers la branche de mise en production.
  7. La demande de tirage est approuvée manuellement et le code est fusionné à la branche de mise en production. Une fois la demande de tirage fusionnée dans la branche de mise en production, le pipeline CI pour l’environnement de production est exécuté. Le pipeline exécute les flux d’expérimentation et d’évaluation en séquence, et inscrit les flux dans Azure Machine Learning Registry en dehors des autres étapes du pipeline.
  8. Une fois l’exécution du pipeline CI terminée, un déclencheur CD exécute le pipeline CD, qui déploie le flux standard à partir d’Azure Machine Learning Registry en tant que point de terminaison en ligne Azure Machine Learning. Le pipeline exécute ensuite des tests d’intégration et de détection de fumée sur le flux déployé.

Créer un flux d’invite GenAIOps

Le reste de cet article montre comment utiliser GenAIOps avec flux d’invite en suivant l’exemple de bout en bout fourni dans le dépôt de modèles GenAIOps avec flux d’invite, afin de vous aider à créer des applications basées sur des LLM à l’aide du flux d’invite et d’Azure DevOps. L’objectif principal est de fournir une assistance au développement de ces applications en tirant parti des fonctionnalités du flux d’invite et de GenAIOps.

Prérequis

Remarque

Si vous utilisez Azure DevOps et Terraform pour faire tourner l’infrastructure, il faut que l’extension Terraform pour Azure DevOps soit installée.

Configurer une connexion de flux d’invite

Le flux d’invite utilise une ressource de connexion pour se connecter aux points de terminaison Azure OpenAI, OpenAI ou Recherche Azure AI. Vous pouvez créer une connexion via l’interface utilisateur du portail de flux d’invite ou à l’aide de l’API REST. Pour plus d’informations, consultez Connexions dans le flux d’invite.

Pour créer la connexion, suivez les instructions fournies dans Configuration des connexions pour le flux d’invite. Les exemples de flux utilisent une connexion appelée aoai. Donnez donc ce nom à votre connexion.

Configurer une session de calcul

Le flux d’invite utilise une session de calcul pour exécuter le flux. Créez et démarrez la session de calcul avant d’exécuter le flux d’invite.

Configurer le dépôt Azure Repos

Pour créer un dépôt dupliqué dans votre organisation Azure DevOps, suivez les instructions de la page Configurer le dépôt GitHub. Ce dépôt utilise deux branches, main et development, pour les promotions de code et l’exécution du pipeline.

Pour créer un référentiel local, suivez les instructions fournies dans Cloner le référentiel. Ce clone vous aide à créer une branche de fonctionnalités à partir de la branche de développement, et à incorporer des modifications.

Configurer un principal de service Azure

Un principal de service Azure est une identité de sécurité utilisée par les applications, les services et les outils d’automatisation pour accéder à des ressources Azure. L’application ou le service s’authentifie auprès d’Azure pour accéder aux ressources en votre nom.

Créez un principal de service en suivant les instructions fournies dans Créer un principal de service Azure. Vous utilisez ce principal de service pour configurer la connexion Azure DevOps Services et pour permettre à Azure DevOps Services de s’authentifier et de se connecter aux services Azure. Les travaux d’expérience et d’évaluation de flux d’invite s’exécutent tous deux sous l’identité du principal de service.

L’installation fournit au principal de service des autorisations de Propriétaire afin que le pipeline CD puisse fournir automatiquement au point de terminaison Azure Machine Learning nouvellement approvisionné un accès à l’espace de travail Azure Machine Learning pour la lecture des informations de connexion. Le pipeline ajoute également le point de terminaison à la stratégie de coffre de clés associée à l’espace de travail Azure Machine Learning avec des autorisations de secret get et list. Vous pouvez remplacer les autorisations de Propriétaire par des autorisations de niveau Contributeur en modifiant le code YAML du pipeline pour supprimer l’étape associée aux autorisations.

Créer un nouveau projet Azure DevOps

Pour créer un projet dans l’interface utilisateur Azure DevOps, suivez les instructions de la page Créer un projet Azure DevOps.

Configurer l’authentification entre Azure DevOps et Azure

Cette étape configure une nouvelle connexion du service Azure DevOps qui stocke les informations du principal de service. Les pipelines de projet peuvent lire les informations de connexion en utilisant le nom de connexion pour se connecter automatiquement à Azure. Pour utiliser le principal de service que vous avez créé pour configurer l’authentification entre Azure DevOps et les services Azure, suivez les instructions de configuration fournies dans Configurer l’authentification avec Azure et Azure DevOps.

Créer un groupe de variables Azure DevOps

Pour créer un groupe de variables et ajouter une variable liée à la connexion de service Azure DevOps, suivez les instructions de la page Créer un groupe de variables Azure DevOps. Le nom du principal de service est ensuite disponible automatiquement pour les pipelines en tant que variable d’environnement.

Configurer Azure Repos et Azure Pipelines

L’exemple de dépôt utilise deux branches, main et development, pour les promotions de code et l’exécution du pipeline. Pour configurer vos propres dépôts locaux et distants afin qu’ils utilisent le code de l’exemple de dépôt, suivez les instructions fournies dans Configurer des dépôts locaux et distants Azure DevOps.

Vous clonez les branches main et development à partir de l’exemple de dépôt, et associez le code pour faire référence au nouveau dépôt Azure Repos. Les pipelines de demande de tirage et de développement sont tous deux configurés pour s’exécuter automatiquement en fonction des déclencheurs de création et de fusion de demande de tirage.

La stratégie de branche pour la branche development est configurée pour exécuter le pipeline de demande de tirage pour toute demande de tirage déclenchée sur la branche de développement à partir d’une branche de fonctionnalité. Le pipeline dev s’exécute lorsque la demande de tirage fusionne vers la branche de développement, et se compose à la fois de phases CI et CD.

Un processus d’intervention humaine dans la boucle est également implémenté dans les pipelines. Après que la phase CI dans le pipeline dev a été exécutée, la phase CD suit une fois l’approbation manuelle fournie dans l’interface utilisateur d’exécution de build Azure Pipelines.

La durée d’attente par défaut de l’approbation est de 60 minutes, après quoi le pipeline est rejeté et la phase CD ne s’exécute pas. L’approbation manuelle de l’exécution exécute les étapes CD du pipeline.

L’approbation manuelle dans l’exemple de pipeline est configurée pour envoyer des notifications à replace@youremail.com. Remplacez l’espace réservé par une adresse e-mail appropriée.

Tester le pipeline

Pour tester les pipelines, suivez les instructions fournies dans Tester les pipelines. Le processus de complet comprend les étapes suivantes :

  1. Vous déclenchez une demande de tirage d’une branche de fonctionnalité vers la branche de développement.
  2. Le pipeline de demande de tirage s’exécute automatiquement en raison de la configuration de la stratégie de branche.
  3. La demande de tirage est fusionnée dans la branche de développement.
  4. Le pipeline dev associé s’exécute, ce qui entraîne l’exécution et l’approvisionnement complets de CI et CD ou la mise à jour des points de terminaison Azure Machine Learning.

Les sorties doivent ressembler aux exemples fournis dans Exemple de scénario de déploiement, d’évaluation et d’exécution de requête.

Utiliser l’exécution locale

Pour utiliser les fonctionnalités d’exécution locale, effectuez les étapes suivantes.

  1. Clonez le référentiel comme suit :

    git clone https://github.com/microsoft/genaiops-promptflow-template.git
    
  2. Créez un fichier .env au niveau du dossier supérieur. Ajoutez des lignes pour chaque connexion, en mettant à jour les valeurs des espaces réservés. Les exemples de l’exemple de référentiel utilisent la connexion AzureOpenAI nommée aoai et la version d’API 2024-02-01.

    aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"}
    <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
    
  3. Préparez l’environnement local conda ou virtuel pour installer les dépendances.

    python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
    
  4. Apportez ou écrivez vos flux dans le modèle en fonction des instructions fournies dans Guide pratique pour intégrer de nouveaux flux.

  5. Écrivez dans le dossier local_execution des scripts Python similaires aux exemples fournis.