Architecture et conception de prédiction de la valeur du client avec Kubeflow Pipelines

Ce document est le premier d'une série de deux documents expliquant comment utiliser Kubeflow Pipelines pour orchestrer l'entraînement, le déploiement et l'inférence des modèles prédictifs de la valeur du client (CLV). Ce document décrit l'architecture et les modèles de conception permettant de mettre en œuvre des pipelines d'entraînement et d'inférence CLV. Un tutoriel associé montre comment déployer, utiliser et personnaliser les exemples de code de pipeline dans le dépôt GitHub d'accompagnement.

Pour obtenir une présentation générale de l'utilisation de Kubeflow Pipelines pour concevoir, orchestrer et automatiser un système de machine learning (ML) intégré, et pour configurer l'intégration continue/déploiement continu (CI/CD, continuous integration/continuous deployment) à l'aide de Cloud Build, consultez la page Architecture des pipelines de ML et CI/CD avec Kubeflow et Cloud Build

Présentation

Ce document répond à deux objectifs :

  • Illustrer des modèles d'architecture et de conception pour Kubeflow Pipelines qui orchestrent les services de ML et d'analyse de données gérés par Google Cloud.
  • Fournir un kit de démarrage pour opérationnaliser l'entraînement, le déploiement et l'évaluation des modèles prédictifs de CLV.

Le type d'architecture et de conception abordé dans ce document représente un cas d'utilisation commercial dans lequel vous devez fréquemment affiner et réentraîner un modèle prédictif. Étant donné qu'un flux constant de nouvelles transactions de vente est au cœur des données d'entraînement, vous devez maintenir les modèles à jour en fonction de l'évolution des tendances d'achat. L'automatisation des processus d'entraînement et de déploiement est alors essentielle.

Ce document s'appuie sur les techniques de prétraitement et de modélisation des données décrites dans la série Prédire la valeur du client avec AI Platform. Cette série peut vous aider à mieux comprendre les concepts de CLV et les approches algorithmiques.

Ce document est destiné aux data scientists et aux ingénieurs en machine learning. Dans ce document et dans le tutoriel associé, nous partons du principe que vous maîtrisez les principes de base des services Google Cloud suivants :

Kubeflow Pipelines est un composant clé du projet Kubeflow. Le projet Kubeflow est une plate-forme Open Source Kubernetes native permettant de développer, d'orchestrer, de déployer et d'exécuter des charges de travail de ML évolutives et portables. Pour plus d'informations sur Kubeflow Pipelines, consultez la documentation de Kubeflow.

Kubeflow Pipelines est généralement installé dans le cadre d'une installation Kubeflow. Vous pouvez également installer Kubeflow Pipelines sous la forme d'un ensemble de services autonome sans dépendances à d'autres composants Kubeflow.

Kubeflow Pipelines peut être hébergé sur diverses distribution Kubernetes. Ce document traite de l'exécution de Kubeflow Pipelines sur GKE.

Kubeflow Pipelines en tant qu'orchestrateur

Ce document illustre un modèle d'architecture dans lequel vous utilisez Kubeflow Pipelines comme orchestrateur pour les services de ML et d'analyse de données gérés par Google Cloud. Dans ce cas, Kubeflow Pipelines n'exécute que le workflow et n'effectue aucun autre calcul sur un cluster Kubernetes d'hébergement.

Le schéma suivant illustre l'architecture de premier niveau de la solution CLV décrite dans ce document.

Présentation des principaux composants Kubeflow Pipelines et Google Cloud pour la solution CLV

Les services Kubeflow Pipelines sont hébergés sur GKE. Les pipelines décrits ici et dans le tutoriel sont créés dans Kubeflow Pipelines. Ces pipelines interagissent avec Cloud Storage, BigQuery et AutoML Tables via un ensemble de composants Kubeflow Pipelines qui encapsulent les API Cloud respectives. Vous faites appel à Container Registry pour gérer les images de conteneur des composants utilisés par les pipelines.

La solution GitHub associée comprend deux exemples de pipelines :

  • Le pipeline d'entraînement et de déploiement
  • Le pipeline de prédiction par lot

Les deux pipelines suivent un flux de traitement, d'entraînement et d'évaluation des données semblable à celui décrit dans la section Prédire la valeur du client avec AutoML Tables. Dans ce processus, vous effectuez les opérations suivantes :

  • Nettoyage des données et extraction de caractéristiques avec BigQuery.
  • Entraînement, déploiement et évaluation de modèles avec AutoML Tables.

Workflow d'entraînement et de déploiement

Le pipeline d'entraînement et de déploiement exploite les données historiques des transactions de vente pour entraîner et éventuellement déployer un modèle de régression ML. Le modèle est entraîné pour prédire la valeur des futurs achats d'un client en fonction de son historique d'achats. Pour en savoir plus sur la modélisation pour la prédiction CLV, consultez la section Prédire la valeur du client avec AI Platform : Introduction.

Le schéma suivant montre le workflow exécuté par le pipeline

Composants du workflow d'entraînement et de déploiement

Dans ce workflow, vous effectuez les opérations suivantes :

  1. Chargement de l'historique des transactions de vente depuis Cloud Storage vers une table de préproduction BigQuery. Si les données se trouvent déjà dans BigQuery, cette étape est ignorée.
  2. Préparation d'une requête BigQuery. La requête est générée à partir d'un modèle de requête et des arguments d'exécution transmis au pipeline.
  3. Exécution d'une requête BigQuery pour créer des caractéristiques à partir des données historiques des transactions de vente. Les caractéristiques extraites sont stockées dans une table BigQuery.
  4. Importation des caractéristiques dans un ensemble de données AutoML.
  5. Déclenchement de l'entraînement du modèle AutoML.
  6. Une fois l'entraînement terminé, vous récupérez les métriques d'évaluation du modèle.
  7. Comparaison des performances du modèle avec le seuil de performances.
  8. Si le modèle atteint ou dépasse le seuil de performances, vous le déployez pour les prédictions en ligne.

Pour en savoir plus sur la conception et l'utilisation du pipeline d'entraînement, consultez la documentation du dépôt GitHub d'accompagnement pour cette solution.

Workflow de prédiction par lot

Le pipeline suit les mêmes étapes de prétraitement et d'extraction de caractéristiques que le pipeline d'entraînement. Vous utilisez la méthode batchPredict d'AutoML Tables pour les prédictions par lot.

Le schéma suivant montre le workflow exécuté par le pipeline

Workflow de pipeline pour les étapes de prétraitement et d'ingénierie

  1. Chargement de l'historique des transactions de vente depuis Cloud Storage vers une table de préproduction BigQuery. Si les données se trouvent déjà dans BigQuery, cette étape est ignorée.
  2. Préparation d'une requête BigQuery. La requête est générée à partir d'un modèle de requête et des arguments d'exécution transmis au pipeline.
  3. Exécution d'une requête BigQuery pour créer des caractéristiques à partir des données historiques des transactions de vente. Les caractéristiques extraites sont stockées dans une table BigQuery.
  4. Appel de la méthode batchPredict d'AutoML Tables pour évaluer les données. La méthode batchPredict d'AutoML Tables stocke les prédictions obtenues dans Cloud Storage ou BigQuery.

Modèles de conception Kubeflow Pipelines

Les pipelines présentés dans ce document sont simples à gérer, à déployer et à personnaliser.

Utiliser des composants Kubeflow Pipelines génériques ou spécifiques à un pipeline

En général, vous pouvez classer les composants Kubeflow en deux types :

  • Composants génériques Un composant générique possède une fonctionnalité qui n'est pas spécifique à un workflow mis en œuvre par un pipeline donné. Par exemple, un composant qui envoie une tâche BigQuery est un composant générique. Comme le composant ne contient pas de logique spécifique à un pipeline donné, vous pouvez le réutiliser dans plusieurs scénarios.
  • Composants spécifiques au pipeline. Un composant spécifique à un pipeline est généralement un composant d'aide dont les fonctionnalités sont spécifiques à un pipeline donné ou à un groupe de pipelines connexes (par exemple, un composant qui calcule et consigne une métrique de performances personnalisée spécifique à un workflow d'entraînement). Il n'est pas facile de réutiliser un composant spécifique à un pipeline.

Vous pouvez développer, créer, déployer et gérer des composants génériques indépendamment des pipelines qui les utilisent.

En règle générale, le développement, la création et le déploiement d'un composant spécifique à un pipeline sont étroitement liés au cycle de vie du pipeline consommateur. L'utilisation de composants Python légers est un moyen pratique et courant de mettre en œuvre des composants spécifiques à un pipeline.

Les pipelines utilisent des composants à la fois génériques et spécifiques au pipeline.

Pour exécuter des tâches de prétraitement des données et d'extraction de caractéristiques, les pipelines utilisent le composant BigQuery fourni avec la distribution Kubeflow Pipelines. Le composant traite une requête BigQuery arbitraire et stocke les résultats dans une table BigQuery ou un blob Cloud Storage.

Pour l'entraînement, le déploiement et l'inférence de modèle, les pipelines utilisent un ensemble de composants AutoML Tables personnalisés fournis dans les exemples de code GitHub. Les composants AutoML Tables encapsulent un sous-ensemble d'API AutoML Tables.

Les pipelines utilisent également les composants d'aide suivants qui sont mis en œuvre en tant que composants Python légers :

  • Composant Load transactions. Le composant Load transactions charge les données de l'historique des transactions de vente d'un ensemble de fichiers CSV stocké dans Cloud Storage vers une table de préproduction dans BigQuery.
  • Composant Prepare query. Le composant Prepare query (un bon exemple de composant spécifique à un pipeline) génère un modèle de requête SQL BigQuery. Cependant, BigQuery ne permet pas le paramétrage des identifiants, des noms de colonne ou des noms de table. Pour éviter de coder en dur ces parties de la requête de prétraitement et d'extraction de caractéristiques, Prepare query remplace les espaces réservés dans le modèle de requête par les valeurs transmises au composant en tant que paramètres d'exécution.

Pour en savoir plus sur la conception et l'utilisation des composants utilisés dans les pipelines, consultez la documentation de cette solution sur GitHub.

Gérer les paramètres du pipeline

La gestion des paramètres de configuration est un aspect essentiel de la conception du pipeline. Nous vous déconseillons de coder en dur ces paramètres directement dans un langage spécifique à un domaine (DSL, domain-specific language). Les paramètres codés en dur peuvent entraîner des problèmes lorsque vous déployez des pipelines dans différents environnements.

Par exemple, les noms et les emplacements des images de conteneur pour les composants utilisés par un pipeline peuvent être différents dans les environnements de développement, de préproduction et de production. De même, les URL des éléments utilisés par les composants (tels que le modèle de requête utilisé par le composant Prepare query) peuvent varier d'un environnement à l'autre.

La solution GitHub associée illustre l'une des approches de la gestion des paramètres. Dans la solution, un seul fichier de configuration YAML gère l'ensemble des paramètres du pipeline. Le fichier de paramètres comporte deux sections : argument_defaults et compiler_settings.

Dans la section argument_defaults, vous définissez les valeurs par défaut des arguments d'exécution des pipelines. Dans la section compiler_settings, vous définissez les paramètres qui contrôlent la façon dont le compilateur DSL convertit le code DSL Python au format YAML obtenu. Un paramètre de compilateur peut, par exemple, être une option qui détermine si un pipeline doit être compilé pour utiliser le compte de service utilisateur spécifique ou le compte de service Compute Engine par défaut lorsque le pipeline accède aux services gérés par Google Cloud.

Lors de la compilation, le fichier de paramètres est fusionné avec le code DSL des pipelines.

Visualiser les résultats d'un pipeline exécuté dans le tableau de bord Kubeflow Pipelines

La plate-forme Kubeflow Pipelines intègre la compatibilité avec la journalisation et la visualisation des artefacts pour vous aider à suivre, comprendre, évaluer et comparer une série d'exécutions. Cette compatibilité est particulièrement importante lorsque vous gérez un nombre potentiellement élevé d'exécutions pendant les phases d'expérimentation et d'entraînement du cycle de vie du ML.

Le tableau de bord Kubeflow Pipelines accepte deux types de visualisations :

  • Métriques de pipeline Une métrique de pipeline est une métrique scalaire affichée sous forme de visualisation dans la page Exécutions d'un test particulier dans le tableau de bord Kubeflow Pipelines. L'objectif principal d'une métrique de pipeline est de fournir un aperçu rapide des performances d'une exécution et de pouvoir comparer plusieurs exécutions.
  • Visionneuses de sortie. Les visionneuses de sortie permettent de consigner et d'afficher des informations plus complètes sur une exécution. Dans le tableau de bord Kubeflow Pipelines, vous trouverez les artefacts d'un composant donné dans la section Artefacts du volet des tâches et le résumé de toutes les sorties dans le volet Résultat d'exécution correspondant à une exécution.

Actuellement, le tableau de bord Kubeflow Pipelines accepte les types de visionneuses de sortie suivants :

  • Matrice de confusion
  • Courbe ROC
  • TensorBoard
  • Application Web
  • Table
  • Markdown

Les trois dernières visionneuses sont flexibles, car elles vous permettent de capturer et de visualiser des informations arbitraires.

Un composant de pipeline peut utiliser les visionneuses de sortie du tableau de bord Kubeflow Pipelines en écrivant leurs métadonnées dans un fichier JSON. Les métadonnées doivent être conformes au schéma décrit dans la documentation de Kubeflow Pipelines.

La plupart des composants génériques distribués avec Kubeflow Pipelines génèrent des métadonnées qui décrivent leurs actions. Nous vous recommandons vivement d'inclure tous les composants personnalisés développés dans le cadre de la solution Kubeflow Pipelines avec la génération de métadonnées.

Si vous devez capturer des informations qui ne sont pas générées automatiquement par les composants prédéfinis utilisés par votre pipeline, vous pouvez utiliser l'infrastructure flexible des composants Python légers pour générer des artefacts supplémentaires.

Les composants AutoML Tables montrent comment utiliser les artefacts du tableau de bord Kubeflow Pipelines pour suivre les résultats des appels d'API AutoML Tables.

Le composant log_evalutation_metrics récupère les dernières métriques d'évaluation d'un modèle AutoML donné et les délivre en sortie sous la forme d'un artefact Markdown.

Le composant consigne également la métrique principale spécifiée en tant qu'argument d'entrée sous forme de métrique de pipeline.

Automatisation de la création et du déploiement

Les pipelines de production peuvent devenir complexes. Ils peuvent effectuer les opérations suivantes :

  • Utiliser différents composants issus de différentes sources. Par exemple, ils peuvent utiliser des composants génériques Kubeflow Pipelines prédéfinis et des composants personnalisés développés pour une solution donnée.
  • Utiliser des ressources et des éléments externes. Par exemple, ils peuvent utiliser des scripts et des modèles SQL, des scripts PySpark ou des modèles de visionneuse de sortie.
  • Nécessiter des valeurs différentes des valeurs par défaut pour les paramètres d'exécution ou de compilation, ou les deux, en fonction de l'environnement d'exécution cible. Par exemple, pour certains environnements, vous devrez peut-être compiler un pipeline pour utiliser un compte de service personnalisé, tandis que pour d'autres environnements, le pipeline utilisera le compte Compute Engine par défaut.

Dans tous les cas, sauf les plus simples, il n'est pas possible de gérer la création et le déploiement de solutions Kubeflow Pipelines à l'aide de guides de compilation ou d'instructions manuelles détaillées. L'automatisation des processus de compilation et de déploiement est essentielle. Lorsqu'elle est combinée à une gestion flexible des paramètres de configuration, comme décrit dans la section Gérer les paramètres de pipeline, l'automatisation de la compilation constitue la base d'une gestion des configurations Kubeflow Pipelines fiable, reproductible et contrôlable.

Les exemples de code du dépôt GitHub associé illustrent l'une des approches d'automatisation du processus de compilation : utiliser Cloud Build. Dans ce scénario, Cloud Build effectue les étapes suivantes :

  1. Crée l'image de base pour les composants Python légers.
  2. Crée l'image qui héberge les composants AutoML Tables.
  3. Déploie les images dans le registre de conteneurs de votre projet.
  4. Compile les pipelines.
  5. Déploie les pipelines compilés sur Cloud Storage.
  6. Déploie les artefacts des pipelines sur Cloud Storage.
  7. Copie l'exemple d'ensemble de données utilisé par le tutoriel dans Cloud Storage.

Pour une description plus détaillée du processus de compilation, consultez le dépôt GitHub de la solution.

Étapes suivantes