Partage via


Mettre à l’échelle la conversation Azure OpenAI pour Python à l’aide de RAG avec Azure Container Apps

Découvrez comment ajouter l’équilibrage de charge à votre application pour étendre l’application de conversation au-delà des limites de quota relatives aux modèles et aux jetons Azure OpenAI. Cette approche utilise Azure Container Apps pour créer trois points de terminaison Azure OpenAI et un conteneur principal pour diriger le trafic entrant vers l’un de ces trois points de terminaison.

Cet article vous oblige à déployer deux exemples distincts :

  • Application de conversation instantanée

    • Si vous n’avez pas encore déployé l’application de conversation, attendez que l’exemple d’équilibreur de charge soit déployé.

    • Si vous avez déjà déployé l’application de conversation, vous devez modifier la variable d’environnement afin de prendre en charge un point de terminaison personnalisé pour l’équilibreur de charge, puis redéployer l’application.

    • Application de conversation disponible dans ces langages :

  • Application d’équilibreur de charge

Remarque

Cet article utilise un ou plusieurs modèles d’application IA comme base pour les exemples et les conseils de l’article. Les modèles d’application IA vous fournissent des implémentations de référence bien gérées et faciles à déployer qui vous aident à garantir un point de départ de haute qualité pour vos applications IA.

Architecture d’équilibrage de charge d’Azure OpenAI avec Azure Container Apps

La ressource Azure OpenAI étant soumise à des limites de quota spécifiques en termes de jetons et de modèles, une application de conversation qui utilise une seule ressource Azure OpenAI est susceptible de présenter des défaillances lors de conversations.

Diagramme illustrant l’architecture de l’application de conversation instantanée avec la ressource Azure OpenAI mise en surbrillance.

Pour utiliser l’application de conversation sans atteindre ces limites, utilisez une solution à charge équilibrée avec Azure Container Apps. Cette solution expose de manière transparente un point de terminaison unique d’Azure Container Apps à votre serveur d’application de conversation.

Diagramme illustrant l’architecture d’une application de conversation instantanée avec Azure Container Apps devant trois ressources Azure OpenAI.

L’application conteneur Azure se trouve devant un ensemble de ressources Azure OpenAI. L’application conteneur prend en charge deux scénarios : normal et limité. Dans un scénario normal dans lequel le quota de jetons et de modèles est disponible, la ressource Azure OpenAI retourne un code 200 via l’application conteneur et le serveur d’application.

Diagramme illustrant un scénario normal. Le scénario normal montre trois groupes de points de terminaison Azure OpenAI, le premier groupe de deux points de terminaison ayant réussi le trafic.

Lorsqu’une ressource se trouve dans un scénario limité, par exemple en raison de limites de quota, l’application conteneur Azure peut réessayer immédiatement une autre ressource Azure OpenAI pour répondre à la requête d’origine de l’application de conversation.

Diagramme illustrant un scénario de limitation avec un code de réponse 429 et un en-tête de réponse indiquant le nombre de secondes que le client doit attendre avant de réessayer.

Prérequis

Ouvrir l’exemple d’application d’équilibreur local d’applications conteneur

GitHub Codespaces exécute un conteneur de développement géré par GitHub avec Visual Studio Code pour le web comme interface utilisateur. Pour un environnement de développement le plus simple, utilisez GitHub Codespaces pour disposer des outils de développement et des dépendances appropriés préinstallés pour terminer cet article.

Ouvrir ce projet dans GitHub Codespaces

Important

Tous les comptes GitHub peuvent utiliser codespaces pendant jusqu’à 60 heures gratuites chaque mois avec 2 instances principales. Pour plus d’informations, consultez Le stockage mensuel inclus et les heures de cœur GitHub Codespaces.

Déployer l’équilibreur de charge Azure Container Apps

  1. Connectez-vous au produit Azure Developer CLI pour fournir l’authentification dans les étapes d’approvisionnement et de déploiement.

    azd auth login --use-device-code
    
  2. Définissez une variable d’environnement pour utiliser l’authentification Azure CLI dans l’étape postérieure à l’approvisionnement.

    azd config set auth.useAzCliAuth "true"
    
  3. Déployez l’application d’équilibreur de charge.

    azd up
    

    Vous devez sélectionner un abonnement et une région pour le déploiement. Vous n’êtes pas obligé d’utiliser le même abonnement et la même région que l’application de conversation.

  4. Attendez que le déploiement se termine avant de continuer.

Obtenir le point de terminaison de déploiement

  1. Utilisez la commande suivante pour afficher le point de terminaison déployé pour l’application Azure Container.

    azd env get-values
    
  2. Copiez la valeur de CONTAINER_APP_URL. Vous en aurez besoin dans la prochaine section.

Redéployer l’application de conversation avec le point de terminaison de l’équilibreur de charge

Ces opérations sont effectuées sur l’exemple d’application de conversation.

  1. Ouvrez le conteneur de développement de l’exemple d’application de conversation en choisissant l’une des options suivantes.

    Langue Codespaces Visual Studio Code
    .NET Ouvrir dans un GitHub Codespaces Ouvrir dans les conteneurs de développement
    JavaScript Ouvrir dans un GitHub Codespaces Ouvrir dans les conteneurs de développement
    Python Ouvrir dans un GitHub Codespaces Ouvrir dans les conteneurs de développement
  2. Connectez-vous à Azure Developer CLI (AZD).

    azd auth login
    

    Terminez les instructions de connexion.

  3. Créez un environnement AZD avec un nom tel que chat-app.

    azd env new <name>
    
  4. Ajoutez la variable d’environnement suivante, qui indique au back-end de l’application de conversation d’utiliser une URL personnalisée pour les requêtes OpenAI.

    azd env set OPENAI_HOST azure_custom
    
  5. Ajoutez la variable d’environnement suivante, en remplaçant <CONTAINER_APP_URL> par l’URL de la section précédente. Cette action indique au back-end de l’application de conversation la valeur de l’URL personnalisée pour la requête OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Déployez l’application de conversation.

    azd up
    

Vous pouvez désormais utiliser l’application de conversation en toute confiance puisqu’elle est désormais conçue pour s’adapter à de nombreux utilisateurs sans atteindre les quotas.

Diffuser en continu les journaux pour voir les résultats de l’équilibreur de charge

  1. Dans le portail Azure, recherchez votre groupe de ressources.

  2. Dans la liste des ressources du groupe, sélectionnez la ressource de l’application conteneur.

  3. Sélectionnez Monitoring –> Flux de journaux pour afficher le journal.

  4. Utilisez l’application de conversation pour générer du trafic dans le journal.

  5. Recherchez les journaux qui font référence aux ressources Azure OpenAI. Chacune des trois ressources a son identité numérique dans le commentaire de journal commençant par Proxying to https://openai3, où 3 indique la troisième ressource Azure OpenAI.

    Capture d’écran montrant les journaux de diffusion en continu d’Azure Container App avec deux lignes de journal surlignées qui indiquent le commentaire du journal.

  6. À mesure que vous utilisez l’application de conversation, quand l’équilibreur de charge reçoit un état indiquant que la requête a dépassé le quota, l’équilibreur de charge passe automatiquement à une autre ressource.

Configurer le quota de jetons par minute (TPM)

Par défaut, chacune des instances OpenAI dans l’équilibreur de charge est déployée avec une capacité de 30 000 jetons par minute. Vous pouvez utiliser l’application de conversation en toute confiance, grâce à sa capacité à s’adapter à un grand nombre d’utilisateurs sans dépasser les limites du quota. Modifiez cette valeur quand :

  • Vous obtenez des erreurs de capacité de déploiement. Dans ce cas, réduisez cette valeur.
  • Vous prévoyez une capacité plus élevée. Dans ce cas, augmentez la valeur.
  1. Utilisez la commande suivante pour modifier la valeur.

    azd env set OPENAI_CAPACITY 50
    
  2. Redéployez l’équilibreur de charge.

    azd up
    

Nettoyer les ressources

Quand vous avez terminé d’utiliser l’application de conversation et l’équilibreur de charge, nettoyez les ressources. Les ressources Azure créées dans cet article sont facturées dans votre abonnement Azure. Si vous pensez ne plus avoir besoin de ces ressources, supprimez-les pour éviter des frais supplémentaires.

Nettoyer les ressources de l’application de conversation

Revenez à l’article de l’application de conversation pour nettoyer ces ressources.

Nettoyer les ressources de l’équilibreur de charge

Exécutez la commande Azure Developer CLI suivante pour supprimer les ressources Azure et le code source :

azd down --purge --force

Les commutateurs fournissent :

  • purge : vide immédiatement les ressources supprimées. Cela vous permet de réutiliser le TPM Azure OpenAI.
  • force : la suppression se produit de manière silencieuse, sans exiger le consentement de l’utilisateur.

Nettoyer GitHub Codespaces

La suppression de l’environnement GitHub Codespaces vous permet d’optimiser le nombre d’heures gratuites par cœur que vous obtenez pour votre compte.

Important

Pour plus d’informations sur les droits de votre compte GitHub, consultez GitHub Codespaces mensuel inclus stockage et heures principales.

  1. Connectez-vous au tableau de bord GitHub Codespaces (https://github.com/codespaces).

  2. Localisez vos codespaces en cours d’exécution provenant du référentiel GitHub azure-samples/openai-aca-lb.

    Capture d’écran de tous les Codespaces en cours d’exécution, avec leur statut et leurs modèles.

  3. Ouvrez le menu contextuel du codespace, puis sélectionnez Supprimer.

    Capture d’écran du menu contextuel pour un codespace unique avec l’option supprimer mis en surbrillance.

Obtenir de l’aide

Si vous rencontrez des difficultés lors du déploiement de l’équilibreur de charge Gestion des API Azure, consignez votre problème dans la section Issues (Problèmes) du référentiel.

Exemple de code

Les exemples utilisés dans cet article incluent :

Étape suivante