Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel vous guide tout au long du déploiement d’une application de chatbot basée sur FastAPI intégrée à l’extension sidecar Phi-4 sur Azure App Service. En suivant les étapes, vous allez apprendre à configurer une application web évolutive, à ajouter un side-car alimenté par l’IA pour les capacités conversationnelles améliorées et à tester les fonctionnalités du chatbot.
L’hébergement de votre propre modèle SLM (Small Language Model) offre plusieurs avantages :
- Contrôle total de vos données. Les informations sensibles ne sont pas exposées aux services externes, ce qui est essentiel pour les industries avec des exigences de conformité strictes.
- Les modèles auto-hébergés peuvent être affinés pour répondre à des cas d’usage spécifiques ou à des exigences spécifiques au domaine.
- Latence réseau réduite et temps de réponse plus rapides pour une meilleure expérience utilisateur.
- Contrôle total de l’allocation des ressources, ce qui garantit des performances optimales pour votre application.
Conditions préalables
- Un compte Azure avec un abonnement actif.
- Un compte GitHub.
Déployer l’exemple d’application
Dans le navigateur, accédez à l’exemple de référentiel d’applications.
Démarrez un nouvel espace de code à partir du référentiel.
Connectez-vous avec votre compte Azure :
az login
Ouvrez le terminal dans Codespace et exécutez les commandes suivantes :
cd use_sidecar_extension/fastapiapp az webapp up --sku P3MV3 az webapp config set --startup-file "gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.main:app"
Cette commande de démarrage est une configuration courante pour le déploiement d’applications FastAPI sur Azure App Service. Pour plus d’informations, consultez Démarrage rapide : Déployer une application web Python (Django, Flask ou FastAPI) sur Azure App Service.
Ajouter l’extension side-car Phi-4
Dans cette section, vous allez ajouter l’extension side-car Phi-4 à votre application ASP.NET Core hébergée sur Azure App Service.
- Accédez au portail Azure et accédez à la page de gestion de votre application.
- Dans le menu de gauche, sélectionnez Déploiement>Centre de déploiement.
- Sous l’onglet Conteneurs, sélectionnez Ajouter>une extension Sidecar.
- Dans les options d’extension sidecar, sélectionnez IA : phi-4-q4-gguf (expérimental).
- Fournissez un nom pour l’extension de side-car.
- Sélectionnez Enregistrer pour appliquer la modification.
- Attendez quelques minutes jusqu’à ce que l’extension de side-car se déploie. Continuez à sélectionner Actualiser jusqu’à ce que la colonne État affiche En cours d’exécution.
Cette extension side-car Phi-4 utilise une API d’achèvement de conversation comme OpenAI qui peut répondre à la réponse d’achèvement de conversation à http://localhost:11434/v1/chat/completions
. Pour plus d’informations sur l’interaction avec l’API, consultez :
- Documentation sur OpenAI : création d’une complétion de conversation
- Documentation OpenAI : Streaming
Tester le chatbot
Dans la page de gestion de votre application, dans le menu de gauche, sélectionnez Vue d’ensemble.
Sous Domaine par défaut, sélectionnez l’URL pour ouvrir votre application web dans un navigateur.
Vérifiez que l’application de chatbot est en cours d’exécution et répond aux entrées utilisateur.
Fonctionnement de l’exemple d’application
L’exemple d’application montre comment intégrer un service FastAPI à l’extension sidecar SLM. La SLMService
classe encapsule la logique pour l’envoi de requêtes à l’API SLM et le traitement des réponses diffusées. Cette intégration permet à l’application de générer dynamiquement des réponses conversationnelles.
En regardant dans use_sidecar_extension/fastapiapp/app/services/slm_service.py, vous constatez que :
Le service envoie une requête POST au point de terminaison
http://localhost:11434/v1/chat/completions
SLM.self.api_url = 'http://localhost:11434/v1/chat/completions'
La charge utile POST inclut le message système et l’invite générée à partir du produit sélectionné et de la requête de l’utilisateur.
request_payload = { "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ], "stream": True, "cache_prompt": False, "n_predict": 2048 # Increased token limit to allow longer responses }
La requête POST diffuse la ligne de réponse par ligne. Chaque ligne est analysée pour extraire le contenu généré (ou jeton).
async with httpx.AsyncClient() as client: async with client.stream( "POST", self.api_url, json=request_payload, headers={"Content-Type": "application/json"}, timeout=30.0 ) as response: async for line in response.aiter_lines(): if not line or line == "[DONE]": continue if line.startswith("data: "): line = line.replace("data: ", "").strip() try: json_obj = json.loads(line) if "choices" in json_obj and len(json_obj["choices"]) > 0: delta = json_obj["choices"][0].get("delta", {}) content = delta.get("content") if content: yield content
Questions fréquentes
- Comment le niveau tarifaire affecte-t-il les performances du side-car SLM ?
- Comment utiliser mon propre side-car SLM ?
Comment le niveau tarifaire affecte-t-il les performances du side-car SLM ?
Étant donné que les modèles d’IA consomment des ressources considérables, choisissez le niveau tarifaire qui vous donne suffisamment de processeurs virtuels et de mémoire pour exécuter votre modèle spécifique. Pour cette raison, les extensions de side-car d’IA intégrées s’affichent uniquement lorsque l’application se trouve dans un niveau tarifaire approprié. Si vous créez votre propre conteneur sidecar SLM, vous devez également utiliser un modèle optimisé pour les performances CPU, car les paliers tarifaires App Service sont uniquement basés sur le processeur.
Par exemple, le modèle mini Phi-3 avec une longueur de contexte 4K de Hugging Face est conçu pour s’exécuter avec des ressources limitées et fournit un raisonnement mathématique et logique fort pour de nombreux scénarios courants. Il est également fourni avec une version optimisée pour le processeur. Dans App Service, nous avons testé le modèle sur tous les niveaux Premium et nous l’avons trouvé pour fonctionner correctement dans le niveau P2mv3 ou supérieur. Si vos besoins l’autorisent, vous pouvez l’exécuter à un niveau inférieur.
Comment utiliser mon propre side-car SLM ?
Le dépôt d'exemples contient un exemple de conteneur SLM que vous pouvez utiliser comme sidecar. Il exécute une application FastAPI qui écoute sur le port 8000, comme spécifié dans son Dockerfile. L’application utilise ONNX Runtime pour charger le modèle Phi-3, puis transfère les données HTTP POST au modèle et transmet la réponse du modèle au client. Pour plus d’informations, consultez model_api.py.
Pour générer vous-même l’image sidecar, vous devez installer Docker Desktop localement sur votre ordinateur.
Clonez le référentiel localement.
git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar cd ai-slm-in-app-service-sidecar
Passez au répertoire source de l’image Phi-3 et téléchargez le modèle localement à l’aide de l’interface CLI Huggingface.
cd bring_your_own_slm/src/phi-3-sidecar huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --local-dir ./Phi-3-mini-4k-instruct-onnx
Le Dockerfile est configuré pour copier le modèle à partir de ./Phi-3-mini-4k-instruct-onnx.
Créez l’image Docker. Par exemple:
docker build --tag phi-3 .
Chargez l’image générée dans Azure Container Registry avec Push votre première image vers votre registre de conteneurs Azure à l’aide de l’interface de ligne de commande Docker.
Dans l’onglet Conteneurs du Centre> de déploiement(nouveau), sélectionnez Ajouter> unconteneur personnalisé et configurez le nouveau conteneur comme suit :
- Nom : phi-3
- Source d’image : Azure Container Registry
- Registre : votre registre
- Image : l’image chargée
- Balise : balise d’image souhaitée
- Port : 8000
Sélectionnez Appliquer.
Consultez bring_your_own_slm/src/webapp pour obtenir un exemple d’application qui interagit avec ce conteneur sidecar personnalisé.
Étapes suivantes
Tutoriel : Configurer un conteneur sidecar pour une application Linux dans Azure App Service