Guide de l'utilisateur de TFX

Introduction

TFX est une plate-forme de machine learning de production Google basée sur TensorFlow. Elle fournit un framework de configuration et des bibliothèques partagées pour intégrer les composants courants nécessaires à la définition, au lancement et au contrôle de votre système de machine learning.

Installation

Python PyPI

pip install tfx

À propos de TFX

TFX est une plate-forme qui permet de créer et de gérer des workflows de ML dans un environnement de production. TFX fournit les éléments suivants :

  • Une boîte à outils pour la création de pipelines de ML. Les pipelines TFX vous permettent d'orchestrer votre workflow de ML sur plusieurs plates-formes, comme Apache Airflow, Apache Beam et Kubeflow Pipelines.

    En savoir plus sur les pipelines TFX

  • Un ensemble de composants standards que vous pouvez utiliser dans le cadre d'un pipeline ou dans votre script d'entraînement de ML. Les composants standards TFX fournissent des fonctionnalités éprouvées pour vous aider à créer facilement un processus de ML.

    En savoir plus sur les composants standards TFX

  • Bibliothèques fournissant les fonctionnalités de base pour un grand nombre de composants standards. Vous pouvez utiliser les bibliothèques TFX pour ajouter ces fonctionnalités à vos propres composants personnalisés ou les utiliser séparément.

    En savoir plus sur les bibliothèques TFX

TFX est une boîte à outils de machine learning de production Google basée sur TensorFlow. Elle fournit un framework de configuration et des bibliothèques partagées pour intégrer les composants courants nécessaires à la définition, au lancement et au contrôle de votre système de machine learning.

Composants standards de TFX

Un pipeline TFX est une séquence de composants qui implémentent un pipeline de ML conçu spécialement pour les tâches de machine learning hautes performances et évolutives. Ces tâches incluent la modélisation, l'entraînement, la diffusion d'inférences et la gestion de déploiements vers des cibles en ligne, mobiles natives et JavaScript.

Un pipeline TFX comprend généralement les composants suivants :

  • ExampleGen est le composant d'entrée initial d'un pipeline. Il ingère et divise éventuellement l'ensemble de données d'entrée.

  • StatisticsGen calcule les statistiques de l'ensemble de données.

  • SchemaGen examine les statistiques et crée un schéma de données.

  • ExampleValidator recherche les anomalies et les valeurs manquantes dans l'ensemble de données.

  • Transform effectue une extraction de caractéristiques sur l'ensemble de données.

  • Trainer entraîne le modèle.

  • Tuner règle les hyperparamètres du modèle.

  • Evaluator effectue une analyse approfondie des résultats de l'entraînement et vous aide à valider vos modèles exportés, en veillant à ce que leurs performances soient suffisantes pour la mise en production.

  • InfraValidator vérifie que le modèle peut effectivement être diffusé à partir de l'infrastructure et empêche la mise en production d'un modèle incorrect.

  • Pusher déploie le modèle sur une infrastructure d'inférence.

  • BulkInferrer effectue un traitement par lot sur un modèle avec des requêtes d'inférence sans libellé.

Ce diagramme illustre le flux de données entre ces composants :

Flux de composants

Bibliothèques TFX

TFX comprend des bibliothèques et des composants de pipeline. Ce diagramme illustre les relations entre les bibliothèques TFX et les composants de pipeline :

Bibliothèques et composants

TFX fournit plusieurs packages Python qui sont les bibliothèques utilisées pour créer des composants de pipeline. Vous utiliserez ces bibliothèques pour créer les composants de vos pipelines, de sorte que votre code porte sur les aspects uniques de votre pipeline.

Les bibliothèques TFX comprennent les éléments suivants :

  • TensorFlow Data Validation (TFDV) est une bibliothèque permettant d'analyser et de valider les données de machine learning. Elle est conçue pour offrir une haute évolutivité, et pour fonctionner correctement avec TensorFlow et TFX. La bibliothèque TFDV comprend les fonctionnalités et/ou éléments ci-dessous :

    • Calcul évolutif des statistiques récapitulatives des données d'entraînement et de test.
    • Intégration dans un lecteur pour les statistiques et les distributions de données, ainsi que pour une comparaison par attribut des paires d'ensembles de données (Facets).

    • Génération automatisée de schémas de données pour décrire les attentes relatives aux données, telles que les valeurs, les plages et les vocabulaires requis.

    • Un lecteur de schémas pour vous aider à inspecter le schéma.

    • Détection des anomalies, telles que des caractéristiques manquantes, des valeurs hors plage ou des types de caractéristiques incorrects, pour n'en citer que quelques-unes.

    • Un lecteur d'anomalies pour vous permettre d'afficher les caractéristiques qui présentent des anomalies et d'obtenir davantage d'informations afin de les corriger.

  • TensorFlow Transform (TFT) est une bibliothèque destinée au prétraitement des données avec TensorFlow. TensorFlow Transform est utile pour les données nécessitant un passage complet :

    • Normalisation d'une valeur d'entrée en fonction de la moyenne et de l'écart type.
    • Conversion de chaînes en entiers en générant un vocabulaire sur toutes les valeurs d'entrée.
    • Conversion des nombres à virgule flottante en entiers en les affectant à des buckets en fonction de la distribution des données observées.
  • TensorFlow est utilisé pour l'entraînement de modèles avec TXF. Il ingère les données d'entraînement et le code de modélisation, puis crée un résultat SavedModel. Il intègre également un pipeline d'extraction de caractéristiques créé par TensorFlow Transform pour le prétraitement des données d'entrée.

    KerasTuner permet de régler les hyperparamètres pour le modèle.

  • TensorFlow Model Analysis (TFMA) est une bibliothèque permettant d'évaluer des modèles TensorFlow. Elle est utilisée avec TensorFlow pour créer un modèle EvalSavedModel, qui devient la base de son analyse. Elle permet aux utilisateurs d'évaluer leurs modèles de manière distribuée sur de grandes quantités de données, en utilisant les mêmes métriques que celles définies dans leur application d'entraînement. Ces métriques peuvent être calculées sur différentes tranches de données et visualisées dans des notebooks Jupyter.

  • TensorFlow Metadata (TFMD) fournit des représentations standards de métadonnées qui s'avèrent utiles pour entraîner des modèles de machine learning avec TensorFlow. Les métadonnées peuvent être produites manuellement ou automatiquement lors de l'analyse des données d'entrée. Elles peuvent être utilisées pour la validation, l'exploration et la transformation des données. Les formats de sérialisation des métadonnées sont les suivants :

    • Schéma décrivant des données tabulaires (tf.Examples, par exemple).
    • Ensemble de statistiques récapitulatives sur ces ensembles de données.
  • ML Metadata (MLMD) est une bibliothèque permettant d'enregistrer et de récupérer les métadonnées associées aux workflows pour les data scientists et les développeurs ML. Le plus souvent, les métadonnées font appel à des représentations TFMD. MLMD gère la persistance à l'aide de SQL-Lite, de MySQL et d'autres datastores du même type.

Technologies d'assistance

Obligatoire

  • Apache Beam est un modèle unifié Open Source permettant de définir des pipelines de traitement parallèle des données par lots et en streaming. Pour mettre en œuvre des pipelines avec parallélisme des données, le système utilise Apache Beam. Le pipeline est ensuite exécuté par l'un des backends de traitement distribué compatibles d'Apache Beam, dont Apache Flink, Apache Spark et Google Cloud Dataflow.

Facultatif

Les outils d'orchestration tels qu'Apache Airflow et Kubeflow facilitent la configuration, l'exploitation, la surveillance et la maintenance d'un pipeline de ML.

  • Apache Airflow est une plate-forme qui permet de créer, de planifier et de surveiller des workflows de manière automatisée. TFX utilise Airflow pour créer des workflows en tant que graphes de tâches orientés acycliques. Le programmeur Airflow exécute les tâches sur un tableau de nœuds de calcul tout en suivant les dépendances spécifiées. Grâce aux puissants utilitaires de ligne de commande, exécuter des opérations chirurgicales complexes sur des graphes orientés acycliques est un jeu d'enfant. L'interface utilisateur enrichie facilite la visualisation des pipelines exécutés en mode de production, le suivi de leur progression et la résolution des problèmes lorsque cela s'avère nécessaire. Lorsque les workflows sont définis sous la forme de code, la maintenance, la gestion des versions, les tests et la collaboration s'en trouvent facilités.

  • Kubeflow vise à simplifier le déploiement des workflows de machine learning (ML) sur Kubernetes, et à les rendre portables et évolutifs. L'objectif n'est pas de recréer d'autres services, mais bien de proposer un outil permettant de déployer facilement les meilleurs systèmes Open Source pour le machine learning sur diverses infrastructures. Les services Kubeflow Pipelines permettent de composer et d'exécuter sur Kubeflow des workflows reproductibles intégrés à des expériences basées sur des notebooks et sur des tests. Les services Kubeflow Pipelines sur Kubernetes comprennent l'espace de stockage Metadata hébergé, un moteur d'orchestration basé sur des conteneurs, un serveur de notebooks et une interface utilisateur pour permettre aux utilisateurs de développer, d'exécuter et de gérer des pipelines de ML complexes à grande échelle. Le SDK Kubeflow Pipelines permet de créer et de partager des composants et la composition de pipelines de manière automatisée.

Portabilité et interopérabilité

TFX est conçu pour pouvoir être porté sur plusieurs environnements et frameworks d'orchestration, dont Apache Airflow, Apache Beam et Kubeflow. Il peut également être porté sur différentes plates-formes informatiques, y compris sur site, et sur des plates-formes cloud telles que Google Cloud Platform (GCP). TFX interagit avec plusieurs services GCP gérés, tels que Cloud AI Platform dans le cadre de l'entraînement et de la prédiction, et Cloud Dataflow pour le traitement distribué des données pour d'autres aspects du cycle de vie du machine learning.

Modèle ou SavedModel

Modèle

Un modèle est le résultat du processus d'entraînement. Il s'agit de l'enregistrement sérialisé des pondérations apprises au cours du processus d'entraînement. Ces pondérations peuvent ensuite être utilisées pour calculer des prédictions pour de nouveaux exemples d'entrée. Dans le cas de TFX et de TensorFlow, le terme "modèle" fait référence aux points de contrôle contenant les pondérations apprises jusqu'à ce stade.

Notez que "modèle" peut également faire référence à la définition du graphe de calcul TensorFlow (c'est-à-dire un fichier Python) qui exprime la méthode de calcul d'une prédiction. Les deux sens peuvent être utilisés de façon interchangeable en fonction du contexte.

SavedModel

  • Qu'est-ce qu'un SavedModel ? Il s'agit d'une sérialisation d'un modèle TensorFlow. Ce modèle est récupérable, indépendant du langage, hermétique et universel.
  • Pourquoi est-il important ? Il permet aux systèmes de niveau supérieur de produire, de consommer et de transformer des modèles TensorFlow à l'aide d'une seule abstraction.

SavedModel est le format de sérialisation recommandé pour diffuser un modèle TensorFlow en production, ou pour exporter un modèle entraîné pour une application JavaScript ou mobile native. Par exemple, pour transformer un modèle en service REST afin d'effectuer des prédictions, vous pouvez le sérialiser en tant que SavedModel et le diffuser à l'aide de TensorFlow Serving. Pour en savoir plus, consultez la section Diffuser un modèle TensorFlow.

Schéma

Certains composants TFX utilisent une description de vos données d'entrée appelée schéma, qui est une instance de schema.proto. Un schéma est un type de tampon de protocole, plus communément appelé "protobuf". Le schéma peut spécifier des types de données pour les valeurs de caractéristiques, des plages de valeurs autorisées, ainsi que d'autres propriétés. Il peut également indiquer si une caractéristique doit être présente dans tous les exemples. L'un des avantages de TensorFlow Data Validation (TFDV) réside dans la génération automatique d'un schéma en déduisant des types, des catégories et des plages à partir des données d'entraînement.

Voici un extrait d'un tampon de protocole de schéma :

...
feature {
  name: "age"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
feature {
  name: "capital-gain"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
...

Le schéma est utilisé par les composants suivants :

  • TensorFlow Data Validation
  • TensorFlow Transform

Dans un pipeline TFX classique, TensorFlow Data Validation génère un schéma qui est utilisé par les autres composants.

Développer avec TFX

TFX propose une plate-forme puissante pour chaque phase d'un projet de machine learning, de la recherche à l'expérimentation en passant par le développement sur votre machine locale et le déploiement. Afin d'éviter la duplication de code et d'éliminer tout risque de décalage d'entraînement/de diffusion, il est vivement conseillé de mettre en œuvre votre pipeline TFX pour l'entraînement de modèle et le déploiement de modèles entraînés. Vous êtes également invité à utiliser les composants Transform qui tirent parti de la bibliothèque TensorFlow Transform pour l'entraînement et l'inférence. Ce faisant, vous utiliserez le même code de prétraitement et d'analyse de manière cohérente, et vous éviterez les différences entre les données d'entraînement et les données fournies aux modèles entraînés lors de la production. En outre, vous ne devrez écrire ce code qu'une seule fois, ce qui constitue un avantage non négligeable.

Exploration, visualisation et nettoyage des données

Exploration, visualisation et nettoyage des données

Les pipelines TFX commencent généralement par un composant ExampleGen qui accepte les données d'entrée et les formate sous la forme de tampons tf.Examples. Bien souvent, cette opération est effectuée après que les données ont été divisées en ensembles de données d'entraînement et d'évaluation, de sorte qu'il y ait en fait deux copies de composants ExampleGen : une pour l'entraînement et une pour l'évaluation. S'en suivent généralement un composant StatisticsGen et un composant SchemaGen, lesquels examinent vos données, et déduisent des statistiques et un schéma de données. Le schéma et les statistiques sont utilisées par un composant ExampleValidator qui recherche des anomalies, des valeurs manquantes et des types incorrects dans vos données. Tous ces composants tirent parti des fonctionnalités de la bibliothèque TensorFlow Data Validation.

TensorFlow Data Validation (TFDV) est un outil qui s'avère particulièrement utile lorsque vous procédez à l'exploration initiale, à la visualisation et au nettoyage de votre ensemble de données. TFDV examine vos données et en déduit les types, les catégories et les plages, puis il identifie automatiquement les anomalies et les valeurs manquantes. Il fournit également des outils de visualisation qui peuvent vous aider à examiner et à comprendre votre ensemble de données. Une fois votre pipeline terminé, vous pouvez lire les métadonnées de MLMD et utiliser les outils de visualisation de TFDV dans un notebook Jupyter afin d'analyser vos données.

Après la phase initiale d'entraînement et de déploiement du modèle, TDFV peut être utilisé pour surveiller les nouvelles données issues des requêtes d'inférence adressées à vos modèles déployés, et pour détecter des anomalies et/ou une dérive. Cela s'avère particulièrement utile pour les données de séries temporelles qui varient au fil du temps en raison des tendances ou de la saisonnalité. C'est également le cas lorsque des problèmes de données se produisent ou lorsqu'un nouvel entraînement des modèles doit être effectué avec de nouvelles données.

Visualisation des données

Une fois la première exécution de vos données effectuée via la section de votre pipeline qui utilise TFDV (il s'agit généralement de StatisticsGen, SchemaGen et ExampleValidator), vous pouvez visualiser les résultats dans un notebook de type Jupyter. Pour des exécutions supplémentaires, vous pouvez comparer ces résultats à mesure que vous effectuez des ajustements, jusqu'à ce que vos données soient optimales pour votre modèle et votre application.

Vous devez interroger la bibliothèque ML Metadata (MLMD) afin de localiser les résultats des exécutions de ces composants, puis utiliser l'API de compatibilité avec la visualisation dans TFDV pour créer les visualisations dans votre notebook. Cela inclut tfdv.load_statistics() et tfdv.visualize_statistics(). Cette visualisation vous permet de mieux comprendre les caractéristiques de votre ensemble de données et de les modifier si nécessaire.

Développer et entraîner des modèles

Extraction de caractéristiques

Un pipeline TFX classique comprend un composant Transform qui effectue l'extraction de caractéristiques en tirant parti des fonctionnalités de la bibliothèque TensorFlow Transform (TFT). Un composant Transform utilise le schéma créé par un composant SchemaGen, et applique des transformations de données pour créer, combiner et transformer les caractéristiques qui seront utilisées pour l'entraînement de votre modèle. Le nettoyage des valeurs manquantes et la conversion des types doivent également être effectués dans le composant Transform s'il est possible que ces éléments soient également présents dans les données envoyées pour les requêtes d'inférence. Vous devez tenir compte de quelques points importants lors de la conception du code TensorFlow en vue de l'entraînement dans TFX.

Modélisation et entraînement

Un modèle SavedModel est le résultat d'un composant Transform. Il est importé et utilisé dans votre code de modélisation dans TensorFlow, lors de l'exécution d'un composant Trainer. Ce SavedModel contient toutes les transformations d'ingénierie de données qui ont été créées dans le composant Transform, de sorte que des transformations identiques soient effectuées avec le même code au cours de l'entraînement et de l'inférence. Vous pouvez utiliser vos données d'entraînement et d'évaluation, et entraîner votre modèle, en utilisant le code de modélisation avec le SavedModel du composant Transform.

Dans la dernière section de votre code de modélisation, vous devez enregistrer votre modèle sous la forme d'un SavedModel et d'un EvalSavedModel. Pour l'enregistrer en tant que modèle EvalSavedModel, vous devez importer et appliquer la bibliothèque TensorFlow Model Analysis (TFMA) dans votre composant Trainer.

import tensorflow_model_analysis as tfma
...

tfma.export.export_eval_savedmodel(
        estimator=estimator,
        export_dir_base=eval_model_dir,
        eval_input_receiver_fn=receiver_fn)

Un composant Tuner facultatif peut être ajouté avant le composant Trainer pour régler les hyperparamètres (par exemple, le nombre de couches) du modèle. Avec l'espace de recherche des hyperparamètres et le modèle donnés, l'algorithme de réglage trouvera les meilleurs hyperparamètres en fonction de l'objectif.

Analyser et comprendre les performances du modèle

Analyse du modèle

Après la phase initiale de développement et d'entraînement de votre modèle, il est important d'analyser et de comprendre ses performances réelles. Un pipeline TFX classique comprend un composant Evaluator qui exploite les fonctionnalités de la bibliothèque TensorFlow Model Analysis (TFMA), laquelle fournit un puissant ensemble d'outils pour cette phase de développement. Un composant Evaluator utilise le modèle EvalSavedModel que vous avez exporté ci-dessus. Il vous permet, en outre, de spécifier une liste de SliceSpecs que vous pouvez utiliser lors de la visualisation et de l'analyse des performances de votre modèle. Chaque objet SliceSpec définit une tranche des données d'entraînement que vous souhaitez examiner, telles que des catégories spécifiques pour des caractéristiques catégorielles ou des plages spécifiques pour des caractéristiques numériques.

Cela peut être important, par exemple, pour essayer de comprendre les performances de votre modèle pour différents segments de clients ; il peut s'agir d'une segmentation par achats annuels, par données géographiques, par tranche d'âge ou encore par sexe. Cela revêt une importance toute particulière pour les ensembles de données comportant des longues traînes, c'est-à-dire des ensembles dans lesquels les performances d'un groupe dominant peuvent masquer des performances inacceptables pour des groupes importants, mais plus petits. Par exemple, votre modèle peut donner de bons résultats pour les salariés moyens, mais offrir des performances médiocres pour le personnel de direction, et il peut être important de le savoir.

Analyse et visualisation de modèles

Une fois que vous avez terminé la première exécution de vos données en effectuant l'entraînement de votre modèle et en exécutant le composant Evaluator (qui utilise TFMA) sur les résultats d'entraînement, vous pouvez visualiser les résultats dans un notebook de type Jupyter. Pour des exécutions supplémentaires, vous pouvez comparer ces résultats à mesure que vous effectuez des ajustements, jusqu'à ce que vos données soient optimales pour votre modèle et votre application.

Vous devez interroger la bibliothèque ML Metadata (MLMD) afin de localiser les résultats des exécutions de ces composants, puis utiliser l'API de compatibilité avec la visualisation dans TFMA pour créer les visualisations dans votre notebook. Cela inclut tfma.load_eval_results() et tfma.view.render_slicing_metrics(). Cette visualisation vous permet de mieux comprendre les caractéristiques de votre modèle et de les modifier si nécessaire.

Vérifier qu'un modèle peut être diffusé

Infra Validation

Avant de déployer le modèle entraîné, vous pouvez vérifier s'il peut effectivement être diffusé dans l'infrastructure d'inférence. Cela est particulièrement important dans les environnements de production pour s'assurer que le modèle récemment publié n'empêche pas le système de diffuser des prédictions. Le composant InfraValidator effectue un déploiement Canary de votre modèle dans un environnement de type "bac à sable", et peut éventuellement envoyer des requêtes réelles pour vérifier que votre modèle fonctionne correctement.

Cibles de déploiement

Une fois que vous avez développé et entraîné un modèle qui vous convient, il est temps de le déployer sur une ou plusieurs cibles de déploiement, où il recevra des requêtes d'inférence. Dans TFX, le déploiement peut être effectué dans trois classes de cibles de déploiement. Les modèles entraînés qui ont été exportés en tant que modèles SavedModel peuvent être déployés sur l'une ou sur l'ensemble de ces cibles de déploiement.

Flux de composants

Inférence : TensorFlow Serving

TensorFlow Serving (TFS) est un système d'inférence hautes performances flexible destiné aux modèles de machine learning. Conçu pour les environnements de production, il utilise un modèle SavedModel et accepte les requêtes d'inférence via des interfaces REST ou gRPC. Il s'exécute sous la forme d'un ensemble de processus sur un ou plusieurs serveurs réseau, en utilisant l'une des nombreuses architectures avancées pour gérer la synchronisation et le calcul distribué. Pour en savoir plus sur le développement et le déploiement de solutions TFS, consultez la documentation de TFS.

Dans un pipeline classique, un modèle SavedModel qui a été entraîné dans un composant Trainer ferait d'abord l'objet d'une infra-validation dans un composant InfraValidator. InfraValidator lance un serveur de modèles TFS Canary pour diffuser le modèle SavedModel. Si la validation est réussie, un composant Pusher déploiera le modèle SavedModel sur votre infrastructure TFS. Cela suppose la gestion de plusieurs versions et de mises à jour de modèles.

Inférence dans les applications IoT et mobiles natives : TensorFlow Lite

TensorFlow Lite est une suite d'outils conçue pour aider les développeurs à utiliser leurs modèles TensorFlow entraînés dans des applications IoT et mobiles natives. Cette solution utilise les mêmes modèles SavedModel que TensorFlow Serving, et applique des optimisations telles que la quantification et l'élagage pour optimiser la taille et les performances des modèles obtenus en vue de leur exécution sur des appareils mobiles et IoT. Pour en savoir plus sur l'utilisation de TensorFlow Lite, consultez la documentation du produit.

Inférence en langage JavaScript : TensorFlow JS

TensorFlow JS est une bibliothèque JavaScript permettant l'entraînement et le déploiement de modèles de ML dans le navigateur et sur Node.js. Elle utilise les mêmes modèles SavedModel que TensorFlow Serving et TensorFlow Lite, et les convertit au format Web TensorFlow.js. Pour en savoir plus sur l'utilisation de TensorFlow JS, consultez la documentation du produit.

Créer un pipeline TFX avec Airflow

Pour en savoir plus, consultez l'atelier Airflow.

Créer un pipeline TFX avec Kubeflow

Configuration

Kubeflow a besoin d'un cluster Kubernetes pour exécuter les pipelines à grande échelle. Consultez les consignes de déploiement de Kubeflow qui décrivent les options de déploiement du cluster Kubeflow.

Configurer et exécuter un pipeline TFX

Veuillez suivre le tutoriel TFX sur les pipelines Cloud AI Platform pour exécuter l'exemple de pipeline TFX sur Kubeflow. Les composants TFX ont été mis en conteneur pour composer le pipeline Kubeflow. L'exemple montre comment configurer le pipeline pour lire un ensemble de données public volumineux, et exécuter les étapes d'entraînement et de traitement des données à grande échelle dans le cloud.

Interface de ligne de commande pour les actions de pipeline

TFX propose une interface de ligne de commande unifiée permettant de réaliser un large éventail d'actions de pipeline, comme créer, mettre à jour, exécuter, répertorier et supprimer des pipelines sur divers outils d'orchestration, parmi lesquels Apache Airflow, Apache Beam et Kubeflow. Pour en savoir plus, veuillez suivre ces instructions.