Scoring en temps réel des modèles Machine Learning dans Python

Container Registry
Kubernetes Service
Machine Learning
Monitor
Machines Virtuelles

Cette architecture de référence montre comment déployer des modèles Python en tant que services web pour élaborer des prédictions en temps réel avec Azure Kubernetes Service. Les modèles Machine Learning déployés sur Azure Kubernetes conviennent aux déploiements de production à grande échelle. Deux scénarios sont couverts dans cet article : le déploiement de modèles Python standard et les exigences spécifiques du déploiement de modèles Deep Learning. Les deux scénarios utilisent l’architecture illustrée. En outre, deux implémentations de référence pour ces scénarios sont disponibles sur GitHub, une pour les modèles Python standard et l’autre pour les modèles Deep Learning.

Architecture

Diagramme d’architecture pour le scoring en temps réel des modèles Python sur Azure.

Téléchargez un fichier Visio de cette architecture.

Scénario : Correspondance FAQ Stack Overflow

Ce scénario montre comment déployer un modèle de correspondance des questions fréquentes (FAQ) comme un service web pour fournir des prédictions pour les questions de l’utilisateur. Pour ce scénario, la mention « Entrée de données » dans le diagramme d’architecture fait référence aux chaînes de texte contenant les questions de l’utilisateur à faire correspondre avec une liste des questions fréquentes. Ce scénario est conçu pour la bibliothèque de Machine Learning scikit-learn pour Python, mais il peut être étendu à n’importe quel scénario utilisant des modèles Python pour effectuer des prédictions en temps réel.

Ce scénario utilise un sous-ensemble de données de question Stack Overflow qui comprend des questions d’origine marquées comme JavaScript, leurs questions dupliquées et leurs réponses. Il effectue l’apprentissage d’un pipeline scikit-learn pour prédire la probabilité de correspondance d’une question dupliquée avec chacune des questions d’origine. Ces prédictions sont faites en temps réel à l’aide d’un point de terminaison API REST.

Workflow

Le flux d’application pour cette architecture est le suivant :

  1. Le modèle entraîné est inscrit dans le registre des modèles Machine Learning.
  2. Azure Machine Learning crée une image Docker qui inclut le modèle et le script de scoring.
  3. Azure Machine Learning déploie l’image de scoring sur Azure Kubernetes Service (AKS) comme service web.
  4. Le client envoie une requête HTTP POST avec les données encodées de la question.
  5. Le service web créé par Azure Machine Learning extrait la question de la requête.
  6. La question est envoyée au modèle de pipeline scikit-learn pour la personnalisation et le scoring.
  7. Les questions fréquentes correspondantes sont retournées avec leur score au client.

Voici une capture d’écran de l’exemple d’application qui consomme les résultats :

Capture d’écran d’un exemple d’application de correspondance FAQ utilisant un sous-ensemble de données de questions Stack Overflow.

Scénario : Classification d’images avec un réseau neuronal convolutif

Ce scénario montre comment déployer un modèle de réseau de neurones convolutifs (CNN) comme un service web pour fournir des prévisions sur des images. Pour ce scénario, la mention « Entrée de données » dans le diagramme d’architecture fait référence aux fichiers d’image. Les réseaux de neurones convolutifs (CNN) sont efficaces dans la vision par ordinateur pour des tâches telles que la classification d’images et la détection d’objets. Ce scénario est conçu pour les infrastructures TensorFlow, Keras (avec le serveur principal TensorFlow) et PyTorch. Toutefois, il peut être généralisé aux scénarios utilisant des modèles d’apprentissage profond pour effectuer des prédictions en temps réel.

Ce scénario utilise un modèle ResNet-152 préentraîné formé sur un jeu de données ImageNet-1 K (1 000 classes) pour prédire la catégorie (voir la figure ci-dessous) à laquelle appartient une image. Ces prédictions sont faites en temps réel à l’aide d’un point de terminaison API REST.

Exemple de prédictions de classification d’image à l’aide d’un modèle de réseau neuronal convolutif (CNN) en tant que service web.

Workflow

Le flux d’application pour le modèle d’apprentissage profond est comme suit :

  1. Le modèle d’apprentissage profond est inscrit dans le registre des modèles Machine Learning.
  2. Azure Machine Learning crée une image Docker qui inclut le modèle et le script de scoring.
  3. Azure Machine Learning déploie l’image de scoring sur Azure Kubernetes Service (AKS) comme service web.
  4. Le client envoie une requête HTTP POST avec les données encodées de l’image.
  5. Le service web créé par Azure Machine Learning prétraite les données de l’image et les envoie au modèle pour le calcul du score.
  6. Les catégories prédites sont retournées avec leur score au client.

Composants

Cette architecture est constituée des composants suivants.

Azure Machine Learning est un service cloud utilisé pour former, déployer, automatiser et gérer des modèles Machine Learning, le tout à l’échelle étendue fournie par le cloud. Dans cette architecture, il est utilisé pour gérer le déploiement de modèles ainsi que pour l’authentification, le routage et l’équilibrage de charge du service web.

Machine virtuelle La machine virtuelle est affichée comme un exemple d’appareil (local ou dans le cloud) pouvant envoyer une requête HTTP.

Azure Kubernetes Service (AKS) est utilisé pour déployer l’application au sein d’un cluster Kubernetes. AKS simplifie le déploiement et les opérations de Kubernetes. Le cluster peut être configuré à l’aide de machines virtuelles compatibles processeur uniquement pour des modèles Python standards ou des machines virtuelles compatibles GPU pour les modèles d’apprentissage profond.

Azure Container Registry permet le stockage des images pour tous les types de déploiements de conteneurs Docker, notamment DC/OS, Docker Swarm et Kubernetes. Les images de scoring sont déployées en tant que conteneurs sur Azure Kubernetes Service et utilisées pour exécuter le script de scoring. L’image utilisée ici est créée par Machine Learning à partir du modèle entraîné et du script de scoring, puis elle est envoyée à Azure Container Registry.

Considérations

Ces considérations implémentent les piliers d’Azure Well-Architected Framework qui est un ensemble de principes directeurs qui permettent d’améliorer la qualité d’une charge de travail. Pour plus d'informations, consultez Microsoft Azure Well-Architected Framework.

Efficacité des performances

L’efficacité des performances est la capacité de votre charge de travail à s’adapter à la demande des utilisateurs de façon efficace. Pour plus d’informations, consultez Vue d’ensemble du pilier d’efficacité des performances.

Pour les architectures de scoring en temps réel, les performances de débit constituent un facteur important. Pour les modèles Python standard, les processeurs sont suffisants pour gérer la charge de travail.

Toutefois pour les charges de travail d’apprentissage profond, où la vitesse constitue un goulot d’étranglement, les GPU offrent généralement de meilleures performancespar rapport aux processeurs. Pour faire correspondre les performances de GPU en utilisant des processeurs, un cluster disposant d’un grand nombre de processeurs est généralement nécessaire.

Vous pouvez utiliser des processeurs pour cette architecture dans les deux cas, mais pour les modèles Deep Learning, les GPU offrent des débits supérieurs par rapport à un cluster de processeurs d’un coût similaire. AKS prend en charge l’utilisation de GPU, qui est l’un des avantages de l’utilisation d’AKS pour cette architecture. En outre, les déploiements d’apprentissage profond utilisent généralement modèles comportant un grand nombre de paramètres. L’utilisation des GPU empêche la contention de ressources entre le modèle et le service web, ce qui constitue un problème dans les déploiements constitués uniquement de processeurs.

Extensibilité

Pour les modèles Python standard, où le cluster AKS est provisionné avec des machines virtuelles pourvues seulement de processeurs, faites attention lors du scale-out du nombre de pods. L’objectif est d’utiliser pleinement le cluster. L’extensibilité dépend des requêtes du processeur et des limites définies pour les pods. Machine Learning via Kubernetes prend également en charge la mise à l’échelle automatique des pods en fonction de l’utilisation du processeur ou d’autres métriques. Le dispositif de mise à l’échelle automatique de cluster peut mettre à l’échelle les nœuds d’agent en fonction des pods en attente.

Pour des scénarios d’apprentissage profond, à l’aide de machines virtuelles compatibles GPU, les limites de ressources sur les pods sont telles qu’un GPU est attribué à un pod. Selon le type de machine virtuelle utilisé, vous devez mettre à l’échelle les nœuds du cluster pour répondre à la demande du service. Vous pouvez faire cela facilement à l’aide d’Azure CLI et de kubectl.

Surveillance et journalisation

Supervision AKS

Pour visualiser les performances de AKS, utilisez la fonctionnalité Azure Monitor Container Insights. Cela collecte des métriques sur la mémoire et le processeur à partir des contrôleurs, des nœuds et des conteneurs qui sont disponibles dans Kubernetes via l’API Metrics.

Lors du déploiement de votre application, surveillez le cluster AKS pour vous assurer qu’il fonctionne comme prévu, tous les nœuds sont opérationnels, et tous les pods sont en cours d’exécution. Bien que vous puissiez utiliser l’outil en ligne de commande kubectl pour récupérer l’état du pod, Kubernetes comprend également un tableau de bord web pour la surveillance de l’état du cluster et la gestion de base.

Capture d’écran du tableau de bord Kubernetes pour la surveillance de base de l’état et de la gestion du cluster.

Pour afficher l’état global du cluster et des nœuds, accédez à la section Nœuds du tableau de bord Kubernetes. Si un nœud est inactif ou a échoué, vous pouvez afficher les journaux d’activité d’erreurs à partir de cette page. De même, accédez aux sections Pods et Déploiements pour plus d’informations sur le nombre de pods et l’état de votre déploiement.

Journaux d’activité AKS

AKS enregistre automatiquement tous les stdout/stderr au sein des journaux d’activité des pods dans le cluster. Utilisez kubectl pour les voir, de même que les événements et les journaux d’activité au niveau du nœud. Pour plus d’informations, consultez les étapes de déploiement.

Utilisez Azure Monitor Container Insights pour collecter des métriques et des journaux d’activité par l’intermédiaire d’un format conteneur de l’agent Log Analytics pour Linux, stocké dans votre espace de travail Log Analytics.

Sécurité

La sécurité fournit des garanties contre les attaques délibérées, et contre l’utilisation abusive de vos données et systèmes importants. Pour plus d’informations, consultez Vue d’ensemble du pilier Sécurité.

Utilisez Microsoft Defender pour le cloud pour obtenir une vue centralisée de l’état de sécurité de vos ressources Azure. Defender pour le cloud surveille les problèmes potentiels de sécurité et fournit une image complète de l’intégrité de la sécurité de votre déploiement, même s’il ne surveille pas les nœuds d’agent AKS. Defender pour le cloud est configuré par abonnement Azure. Activez la collecte des données de sécurité comme décrit dans Activer Defender pour le cloud sur vos abonnements. Une fois la collecte de données activée, Defender pour le cloud analyse automatiquement les machines virtuelles créées dans le cadre de cet abonnement.

Opérations. Pour vous connecter à un cluster AKS à l’aide de votre jeton d’authentification Azure Active Directory (Azure AD), configurez AKS pour utiliser Azure AD pour l’authentification utilisateur. Les administrateurs de cluster peuvent aussi configurer le contrôle d’accès en fonction du rôle Kubernetes (RBAC Kubernetes) en se basant sur l’identité de l’utilisateur ou son appartenance à un groupe d’annuaire.

Utilisez le contrôle RBAC Azure pour contrôler l’accès aux ressources Azure que vous déployez. Le contrôle RBAC Azure vous permet d’attribuer des rôles d’autorisation aux membres de votre équipe DevOps. Un utilisateur peut être affecté à plusieurs rôles, et vous pouvez créer des rôles personnalisés pour d’autres autorisations plus affinées.

HTTPS. Comme meilleure pratique de sécurité, l’application doit appliquer le protocole HTTPS et rediriger les requêtes HTTP. Utilisez un contrôleur d’entrée pour déployer un proxy inverse qui arrête le protocole SSL et redirige les requêtes HTTP. Pour plus d’informations, consultez Créer un contrôleur d’entrée HTTPS dans Azure Kubernetes Service (AKS).

Authentification. Cette solution ne restreint pas l’accès aux points de terminaison. Pour déployer l’architecture dans un environnement d’entreprise, sécurisez les points de terminaison via des clés API et ajoutez une forme d’authentification utilisateur à l’application cliente.

Registre de conteneurs. Cette solution utilise Azure Container Registry pour stocker l’image Docker. Le code dont dépend l’application, ainsi que le modèle, sont contenus dans cette image. Les applications d’entreprise doivent utiliser un registre privé pour se prémunir contre l’exécution de code malveillant et pour mieux éviter que les informations contenues dans le conteneur soient compromises.

Protection DDOS. Envisagez d’activer Azure DDoS Network Protection. Bien que la protection DDoS soit activée sur la plateforme Azure, DDoS Network Protection offre des capacités d’atténuation des risques spécifiquement adaptées aux ressources de réseau virtuel Azure.

Journalisation. Utilisez les meilleures pratiques avant de stocker des données de journal, comme le nettoyage des mots de passe utilisateur et d’autres informations pouvant être utilisées pour commettre une usurpation de sécurité.

Optimisation des coûts

L’optimisation des coûts consiste à examiner les moyens de réduire les dépenses inutiles et d’améliorer l’efficacité opérationnelle. Pour plus d’informations, consultez Vue d’ensemble du pilier d’optimisation des coûts.

Utiliser la calculatrice de prix Azure pour estimer les coûts. Voici quelques autres éléments à prendre en compte :

Pour plus d’informations, consultez l’article de Microsoft Azure Well-Architected Framework sur les Principes d'optimisation des coûts.

Azure Machine Learning

Dans cette architecture de référence, une grande partie du coût est déterminée par les ressources de calcul. À des fins d’expérimentation et de formation, Azure Machine Learning est gratuit. Vous êtes uniquement facturé pour le calcul utilisé par le service web. Utilisez la calculatrice de prix Azure pour estimer les coûts de calcul.

Azure Container Registry

Azure Container Registry offre un niveau De base, un niveau Standard et un niveau Premium. Choisissez un niveau en fonction du stockage dont vous avez besoin. Choisissez Premium si vous avez besoin de la géoréplication ou si vous avez amélioré le débit pour les commandes docker pull sur les nœuds simultanés. En outre, des frais de mise en réseau standard s’appliquent. Pour plus d’informations, consultez la tarification Azure Container Registry.

Azure Kubernetes Service

Vous payez uniquement pour les instances de machines virtuelles, le stockage et les ressources réseau consommées par votre cluster Kubernetes. Pour estimer le coût des ressources requises, reportez-vous à la Calculatrice de services conteneurs.

Pour plus d’informations, consultez l’article de Microsoft Azure Well-Architected Framework sur les Principes d'optimisation des coûts.

DevOps

Dans cette architecture, les images de scoring sont créées par le modèle Machine Learning et déployées en tant que conteneurs sur AKS. Vous pouvez intégrer la totalité de l’architecture dans un pipeline de mise en production à des fins de gestion des modèles et d’opérationnalisation. Le pipeline peut inclure des tâches DevOps de test de validité des données, la formation du modèle sur différentes cibles de calcul, la gestion des versions de modèle, le déploiement de modèle en tant que service web en temps réel, le déploiement intermédiaire vers les environnements de production/AQ, les tests d’intégration et fonctionnels. L’architecture de référence MLOps (opérationnalisation de Machine Learning) pour les modèles Python à l’aide d’Azure Machine Learning montre comment implémenter une intégration continue (CI), une livraison continue (CD) et un pipeline de reformation pour une application IA à l’aide d’Azure DevOps et de d’Azure Machine Learning.

Déployer ce scénario

Pour déployer cette architecture de référence, suivez les étapes décrites dans les dépôts GitHub :

Contributeurs

Cet article est géré par Microsoft. Il a été écrit à l’origine par les contributeurs suivants.

Auteurs principaux :

Pour afficher les profils LinkedIn non publics, connectez-vous à LinkedIn.

Étapes suivantes

Lire la documentation du produit :

Essayez ces parcours d’apprentissage :