Partager via


Déployer une application qui utilise OpenAI sur Azure Kubernetes Service (AKS)

Dans cet article, vous apprenez à déployer une application qui utilise Azure OpenAI ou OpenAI sur AKS. Avec OpenAI, vous pouvez facilement adapter différents modèles IA, tels que la génération de contenu, la synthèse, la recherche sémantique et le langage naturel à la génération de code, pour vos tâches spécifiques. Vous commencez par déployer un cluster AKS dans votre abonnement Azure. Ensuite, vous déployez votre service OpenAI et l’exemple d’application.

L’exemple d’application native sur le cloud est représentatif des implémentations réelles. La solution multiconteneur est composée d’applications écrites dans plusieurs langages et infrastructures, dont :

  • Golang avec Gin
  • Rust avec Actix-Web
  • JavaScript avec Vue.js et Fastify
  • Python avec FastAPI

Ces applications fournissent des serveurs frontaux pour les clients et les administrateurs de magasin, des API REST pour l’envoi de données à la file d’attente de messages RabbitMQ et à la base de données MongoDB, ainsi que des applications console pour simuler le trafic.

Notes

Nous déconseillons l’exécution de conteneurs avec état, tels que MongoDB et Rabbit MQ, sans stockage persistant pour la production. Nous l’utilisons ici par souci de simplicité, mais nous vous recommandons d’utiliser des services gérés, tels qu’Azure CosmosDB ou Azure Service Bus.

Pour accéder au codebase GitHub pour l’exemple d’application, consultez Démonstration d’AKS Store.

Avant de commencer

  • Vous devez avoir un compte Azure avec un abonnement actif. Si vous n’en avez pas un, créez un compte gratuitement.
  • Pour cette version de démonstration, vous pouvez utiliser le service Azure OpenAI ou le service OpenAI.

Prérequis

Créer un groupe de ressources

Un groupe de ressources Azure est un groupe logique dans lequel vous déployez et gérez des ressources Azure. Lorsque vous créez un groupe de ressources, vous êtes invité à spécifier un emplacement. Cet emplacement est l'emplacement de stockage des métadonnées de votre groupe de ressources et l'endroit où vos ressources s'exécutent dans Azure si vous ne spécifiez pas une autre région lors de la création de la ressource.

L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement eastus.

  • Créez un groupe de ressources avec la commande az group create.

    az group create --name myResourceGroup --location eastus
    

    L’exemple de sortie suivant montre la création réussie du groupe de ressources :

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Créer un cluster AKS

L’exemple suivant crée un cluster nommé myAKSCluster dans myResourceGroup.

  • Créez un cluster AKS avec la commande az aks create.

    az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
    

    Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster.

Se connecter au cluster

Pour gérer un cluster Kubernetes, vous utilisez kubectl, le client de ligne de commande Kubernetes. Si vous utilisez Azure Cloud Shell, kubectl est déjà installé.

  1. Installez kubectl localement avec la commande az aks install-cli.

    az aks install-cli
    

    Remarque

    Si votre système Linux nécessite des autorisations élevées, vous pouvez utiliser la commande sudo az aks install-cli.

  2. Configurez kubectl afin de vous connecter à votre cluster Kubernetes avec la commande az aks get-credentials.

    Cette commande exécute les opérations suivantes :

    • Cette étape télécharge les informations d’identification et configure l’interface de ligne de commande Kubernetes pour leur utilisation.
    • ~/.kube/config, l’emplacement par défaut du fichier de configuration Kubernetes. Spécifiez un autre emplacement pour votre fichier de configuration Kubernetes à l’aide de l’argument --file.
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Pour vérifier la connexion à votre cluster, exécutez la commande kubectl get. Cette commande renvoie la liste des nœuds de cluster.

    kubectl get nodes
    

    L’exemple de sortie suivant montre les nœuds créés au cours des étapes précédentes. Assurez-vous que l’état du nœud est Prêt.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Remarque

Pour les clusters privés, les nœuds peuvent être inaccessibles si vous essayez de vous y connecter via l’IP publique. Pour résoudre ce problème, vous devez créer un point de terminaison dans le même réseau virtuel que le cluster à partir duquel la connexion doit être établie. Suivez les instructions pour Créer un cluster AKS privé, puis connectez-vous à celui-ci.

Déployer l’application

Diagramme d’architecture de la version de démonstration d’AKS.

Le manifeste de l’application AKS Store inclut les déploiements et services Kubernetes suivants :

  • Service de produit : affiche les informations sur le produit.
  • Service de commande : passe des commandes.
  • Service Makeline : traite les commandes de la file d’attente et termine les commandes.
  • Vitrine : application web permettant aux clients d’afficher les produits et de passer des commandes.
  • Administrateur de magasin : application web permettant aux employés du magasin d’afficher les commandes dans la file d’attente et de gérer les informations sur le produit.
  • Client virtuel : simule la création de commandes sur une base planifiée.
  • Virtual Worker : simule l’achèvement des commandes sur une base planifiée.
  • Mongo DB : instance NoSQL pour les données persistantes.
  • Rabbit MQ : file d’attente de messages pour une file d’attente de commandes.

Remarque

Nous déconseillons l’exécution de conteneurs avec état, tels que MongoDB et Rabbit MQ, sans stockage persistant pour la production. Nous l’utilisons ici par souci de simplicité, mais nous vous recommandons d’utiliser des services gérés, tels qu’Azure CosmosDB ou Azure Service Bus.

  1. Passez en revue le manifeste YAML de l’application.

  2. Déployez l’application à l’aide de la commande kubectl apply et spécifiez le nom de votre manifeste YAML.

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

    L’exemple de sortie suivant montre les déploiements et services créés :

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

Déployer OpenAI

Vous pouvez utiliser Azure OpenAI ou OpenAI et exécuter votre application sur AKS.

  1. Activez Azure OpenAI sur votre abonnement Azure en remplissant le formulaire Demander l’accès au service Azure OpenAI.
  2. Dans le portail Azure, créez un instance Azure OpenAI.
  3. Sélectionnez l’instance Azure OpenAI que vous avez créée.
  4. Sélectionnez Clés et points de terminaison pour générer une clé.
  5. Sélectionnez Déploiements de modèles, puis Déploiements managés pour ouvrir Azure OpenAI Studio.
  6. Créez un nouveau déploiement à l’aide du modèle gpt-35-turbo.

Pour plus d’informations sur la création d’un déploiement dans Azure OpenAI, consultez Bien démarrer avec la génération de texte à l’aide d’Azure OpenAI Service.

Déployer le service IA

Maintenant que l’application est déployée, vous pouvez déployer le microservice Python qui utilise OpenAI pour générer automatiquement des descriptions des nouveaux produits ajoutés au catalogue du magasin.

  1. Créez un fichier nommé ai-service.yaml et copiez-y le manifeste suivant :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI 
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME 
              value: ""
            - name: AZURE_OPENAI_ENDPOINT 
              value: ""
            - name: OPENAI_API_KEY 
              value: ""
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 5001
        targetPort: 5001
      selector:
        app: ai-service
    
  2. Définissez la variable d’environnement USE_AZURE_OPENAI sur "True".

  3. Obtenez le nom de votre déploiement Azure OpenAI à partir d’Azure OpenAI Studio et renseignez la valeur AZURE_OPENAI_DEPLOYMENT_NAME.

  4. Obtenez votre point de terminaison Azure OpenAI et votre clé API Azure OpenAI à partir du portail Azure en sélectionnant Clés et point de terminaison dans le panneau gauche de la ressource. Mettez à jour AZURE_OPENAI_ENDPOINT et OPENAI_API_KEY dans le YAML en conséquence.

  5. Déployez l’application à l’aide de la commande kubectl apply et spécifiez le nom de votre manifeste YAML.

    kubectl apply -f ai-service.yaml
    

    L’exemple de sortie suivant montre les déploiements et services créés :

      deployment.apps/ai-service created
      service/ai-service created
    

Remarque

L’ajout direct d’informations sensibles, telles que des clés API, à vos fichiers manifestes Kubernetes n’est pas sécurisé et peut être accidentellement validée dans des référentiels de code. Nous les avons ajoutées ici pour plus de simplicité. Pour les charges de travail de production, utilisez l’identité managée pour vous authentifier auprès du service Azure OpenAI à la place, ou stockez vos secrets dans Azure Key Vault.

Test de l’application

  1. Vérifiez l’état des pods déployés à l’aide de la commande kubectl get pods.

    kubectl get pods
    

    Assurez-vous que tous les pods sont en cours d’exécution avant de passer à l’étape suivante.

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. Obtenez l’adresse IP de l’application web d’administration du magasin et de l’application web de vitrine à l’aide de la commande kubectl get service.

    kubectl get service store-admin
    

    L’application expose le site Administrateur de magasin à Internet via un équilibreur de charge public approvisionné par le service Kubernetes. L’exécution de ce processus peut prendre plusieurs minutes. ADRESSE IP EXTERNE affiche initialement en attente, jusqu’à ce que le service arrive et affiche l’adresse IP.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m    
    

    Répétez la même étape pour le service nommé store-front.

  3. Ouvrez un navigateur web et accédez à l’adresse IP externe de votre service. Dans l’exemple présenté ici, ouvrez 40.64.86.161 pour afficher l’administrateur de magasin dans le navigateur. Répétez la même étape pour Vitrine.

  4. Dans Administrateur de magasin, sélectionnez l’onglet Produits, puis sélectionnez Ajouter des produits.

  5. Lorsque « ai-service » s’exécute correctement, le bouton Demander à OpenAI doit s’afficher en regard du champ de description. Renseignez le nom, le prix et les mots clés, puis générez une description du produit en sélectionnant Demander à OpenAI>Enregistrer le produit.

    Capture d’écran de l’utilisation d’OpenAI pour générer une description de produit.

  6. Vous pouvez maintenant voir le nouveau produit que vous avez créé dans l’administrateur de magasin utilisé par les vendeurs. Sur l’image, vous pouvez voir que Jungle Monkey Chew Toy est ajouté.

    Capture d’écran du nouveau produit sur la page d’administration du magasin.

  7. Vous pouvez également voir le nouveau produit que vous avez créé sur la vitrine utilisée par les acheteurs. Sur l’image, vous pouvez voir que Jungle Monkey Chew Toy est ajouté. N’oubliez pas d’obtenir l’adresse IP de la vitrine à l’aide de la commande kubectl get service.

    Capture d’écran du nouveau produit sur la page de la vitrine.

Étapes suivantes

Maintenant que vous avez ajouté la fonctionnalité OpenAI à une application AKS, vous pouvez sécuriser l’accès à Azure OpenAI à partir d’Azure Kubernetes Service (AKS).

Pour en savoir plus sur les cas d’usage de l’IA générative, consultez les ressources suivantes :