Entraîner un modèle avec AutoML de bout en bout

Cette page explique comment entraîner un modèle de classification ou de régression à partir d'un ensemble de données tabulaire avec un workflow tabulaire pour AutoML de bout en bout.

Avant de commencer

Pour pouvoir entraîner un modèle, vous devez effectuer les opérations suivantes :

Si vous recevez une erreur liée aux quotas lors de l'exécution du workflow tabulaire pour AutoML de bout en bout, vous devrez peut-être demander un quota plus élevé. Pour en savoir plus, consultez la page Gérer les quotas des workflows tabulaires.

Obtenir l'URI du résultat du réglage d'hyperparamètres précédent

Si vous avez déjà effectué une exécution de workflow AutoML de bout en bout, vous pouvez utiliser le résultat du réglage d'hyperparamètres d'une exécution précédente pour économiser le temps et les ressources d'entraînement. Vous pouvez trouver le résultat du réglage d'hyperparamètres précédent en utilisant la console Google Cloud ou en le chargeant par programmation avec l'API.

Console Google Cloud

Pour rechercher l'URI du résultat des réglages d'hyperparamètres à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section Vertex AI de la console Google Cloud, accédez à la page Pipelines.

    Accéder à la page Pipelines

  2. Sélectionnez l'onglet Exécutions.

  3. Sélectionnez l'exécution de pipeline que vous souhaitez utiliser.

  4. Sélectionnez Développer les artefacts.

  5. Cliquez sur le composant exit-handler-1.

  6. Cliquez sur le composant stage_1_tuning_result_artifact_uri_empty.

  7. Recherchez le composant automl-tabular-cv-trainer-2.

  8. Cliquez sur l'artefact tuning_result_output associé.

  9. Sélectionnez l'onglet Informations sur le nœud.

  10. Copiez l'URI à utiliser à l'étape Entraîner un modèle.

résultat de recherche d'architecture

API : Python

L'exemple de code suivant montre comment charger le résultat du réglage des hyperparamètres à l'aide de l'API. La variable job fait référence à l'exécution précédente du pipeline de modèle.


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

Entraîner un modèle

Console Google Cloud

Pour entraîner un modèle à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section Vertex AI de la console Google Cloud, accédez à la page Pipelines.

    Accéder à la page Pipelines

  2. Sélectionnez l'onglet Galerie de modèles.

  3. Dans la fiche AutoML pour la classification/régression tabulaire, cliquez sur Créer une exécution.

  4. Sur la page Informations sur l'exécution, configurez les éléments comme suit :

    1. Saisissez un nom d'exécution de pipeline.
    2. Facultatif : Si vous souhaitez définir le compte de service Vertex AI Pipelines ou le compte de service du nœud de calcul Dataflow, ouvrez le champ Options avancées. En savoir plus sur les comptes de service.
    3. Cliquez sur Continuer.

  5. Sur la page Configuration de l'environnement d'exécution, configurez les éléments comme suit :

    1. Saisissez un bucket Cloud Storage ou un dossier du bucket à utiliser comme répertoire de sortie racine. Ce répertoire sera utilisé pour enregistrer les fichiers intermédiaires, tels que l'ensemble de données matérialisée et le modèle. N'oubliez pas de nettoyer le répertoire une fois l'entraînement terminé et le modèle et d'autres artefacts importants copiés vers un autre bucket Cloud Storage. Vous pouvez également définir une valeur TTL (Time To Live) pour le bucket Cloud Storage.

      Les buckets de votre projet sont répertoriés dans la section Cloud Storage de la console Google Cloud.

      Accéder à la page Buckets

    2. Cliquez sur Continuer.

  6. Sur la page Méthode d'entraînement, configurez les éléments comme suit :

    1. Sélectionnez le nom de l'ensemble de données que vous souhaitez utiliser pour entraîner votre modèle.
    2. Sélectionnez votre colonne cible. La colonne cible correspond à la valeur prédite par le modèle. En savoir plus sur les exigences relatives aux colonnes cibles.
    3. Saisissez le nom à afficher pour votre nouveau modèle.
    4. Facultatif : Pour choisir comment répartir les données entre les ensembles d'entraînement, de test et de validation, ouvrez les options avancées. Vous avez le choix entre les options de répartition des données suivantes :
      • Aléatoire (par défaut) : Vertex AI sélectionne de manière aléatoire les lignes associées à chacun des ensembles de données. Par défaut, Vertex AI sélectionne 80 % des lignes de données pour l'ensemble d'entraînement, 10 % pour l'ensemble de validation et 10 % pour l'ensemble de test. Définissez le pourcentage de lignes de données que vous souhaitez associer à chacun des ensembles de données.
      • Manuel : Vertex AI sélectionne des lignes de données pour chacun des ensembles de données en fonction des valeurs d'une colonne de répartition des données. Indiquez le nom de la colonne de répartition des données.
      • Chronologique : Vertex AI divise les données en fonction de l'horodatage dans une colonne Heure. Indiquez le nom de la colonne Heure. Vous pouvez également définir le pourcentage de lignes de données que vous souhaitez associer à l'ensemble d'entraînement, à l'ensemble de validation et à l'ensemble de test.
      • Stratifié : Vertex AI sélectionne de manière aléatoire les lignes associées à chacun des ensembles de données, mais conserve la distribution des valeurs de colonne cibles. Indiquez le nom de la colonne cible. Vous pouvez également définir le pourcentage de lignes de données que vous souhaitez associer à l'ensemble d'entraînement, à l'ensemble de validation et à l'ensemble de test.
      En savoir plus sur les répartitions de données.
    5. Facultatif : Vous pouvez exécuter le pipeline sans la recherche d'architecture. Si vous choisissez l'option Ignorer la recherche d'architecture, vous êtes invité à fournir un ensemble d'hyperparamètres issus d'une exécution de pipeline précédente sur la page Options d'entraînement.
    6. Cliquez sur Continuer.

  7. Sur la page Options d'entraînement, configurez les éléments comme suit :

    1. Facultatif : Cliquez sur Générer des statistiques. La génération de statistiques remplit les menus déroulants Transformation.
    2. Examinez votre liste de colonnes et excluez de l'entraînement toutes les colonnes qui ne doivent pas être utilisées pour entraîner le modèle.
    3. Examinez les transformations sélectionnées pour vos caractéristiques incluses et vérifiez si les données non valides sont autorisées. Effectuez ensuite les mises à jour requises. Apprenez-en davantage sur les transformations et sur les données non valides.
    4. Si vous avez choisi d'ignorer la recherche d'architecture sur la page Méthode d'entraînement, indiquez le chemin d'accès au résultat du réglage d'hyperparamètres à partir d'une exécution de pipeline précédente.
    5. Facultatif : Si vous souhaitez spécifier la colonne de pondération, ouvrez les options avancées et effectuez votre sélection. Apprenez-en plus sur les colonnes de pondération.
    6. Facultatif : Si vous souhaitez modifier l'objectif d'optimisation par défaut, ouvrez les options avancées et effectuez votre sélection. En savoir plus sur les objectifs d'optimisation.
    7. Facultatif : Si vous choisissez d'effectuer la recherche d'architecture sur la page Méthode d'entraînement, vous pouvez spécifier le nombre d'essais parallèles. Ouvrez les options avancées et saisissez votre valeur.
    8. Facultatif : Vous pouvez fournir des valeurs fixes pour un sous-ensemble des hyperparamètres. Vertex AI recherche les valeurs optimales pour les hyperparamètres restants. Cette option est idéale si vous avez une préférence forte concernant le type de modèle. Vous pouvez choisir entre les réseaux de neurones et les arbres de décision à boosting pour votre type de modèle. Ouvrez les options avancées et fournissez un remplacement de spécification d'étude au format JSON.

      Par exemple, si vous souhaitez définir le type de modèle sur les réseaux de neurones (NN), saisissez la commande suivante :

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. Cliquez sur Continuer.

  8. Sur la page Options de calcul et tarifs, configurez les éléments suivants :

    1. Saisissez la durée maximale (en heures) d'entraînement de votre modèle. En savoir plus sur la tarification.
    2. Facultatif : Dans la section Paramètres de calcul, vous pouvez configurer les types de machines et le nombre de machines pour chaque étape du workflow. Cette option est idéale si vous disposez d'un ensemble de données volumineux et que vous souhaitez optimiser le matériel de la machine en conséquence.

  9. Cliquez sur Envoyer.

API : Python

L'exemple de code suivant montre comment exécuter un pipeline d'entraînement de modèle :

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

Le paramètre facultatif service_account dans job.run() vous permet de définir le compte de service Vertex AI Pipelines sur le compte de votre choix.

Le pipeline et les valeurs des paramètres sont définis par la fonction suivante. Les données d'entraînement peuvent être un fichier CSV dans Cloud Storage ou une table dans BigQuery.

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

Voici un sous-ensemble de paramètres get_automl_tabular_pipeline_and_parameters :

Nom du paramètre Type Définition
data_source_csv_filenames Chaîne URI d'un fichier CSV stocké dans Cloud Storage.
data_source_bigquery_table_path Chaîne URI d'une table BigQuery.
dataflow_service_account Chaîne (Facultatif) Compte de service personnalisé permettant d'exécuter des tâches Dataflow. La tâche Dataflow peut être configurée pour utiliser des adresses IP privées et un sous-réseau VPC spécifique. Ce paramètre sert de valeur de remplacement pour le compte de service de nœud de calcul Dataflow par défaut.
prediction_type Chaîne Choisissez classification pour entraîner un modèle de classification ou regression pour entraîner un modèle de régression.
optimization_objective Chaîne Si vous entraînez un modèle de classification binaire, l'objectif par défaut est AUC ROC. Si vous entraînez un modèle de régression, l'objectif par défaut est la RMSE. Si vous souhaitez un autre objectif d'optimisation pour votre modèle, choisissez l'une des options figurant dans la section Objectifs d'optimisation pour les modèles de classification ou de régression.
enable_probabilistic_inference Booléen Si vous entraînez un modèle de régression et que vous définissez cette valeur sur true, Vertex AI modélise la distribution de probabilité de la prédiction. L'inférence probabiliste peut améliorer la qualité du modèle en gérant les données comportant du bruit et en quantifiant l'incertitude. Si des quantiles sont spécifiés, Vertex AI renvoie également les quantiles de la distribution.
quantiles Liste[float] Quantiles à utiliser pour l'inférence probabiliste. Un quantile indique la probabilité qu'une cible soit inférieure à une valeur donnée. Fournissez une liste de cinq numéros uniques au maximum entre 0 et 1, exclusifs.

Options de personnalisation du workflow

Vous pouvez personnaliser le workflow AutoML de bout en bout en définissant les valeurs d'argument transmises dans la définition de pipeline. Vous pouvez personnaliser votre workflow de différentes manières :

  • Forcer l'espace de recherche
  • Configurer le matériel
  • Réduire la taille du modèle
  • Ignorer la recherche d'architecture

Forcer l'espace de recherche

Le paramètre get_automl_tabular_pipeline_and_parameters suivant vous permet de fournir des valeurs fixes pour un sous-ensemble des hyperparamètres. Vertex AI recherche les valeurs optimales pour les hyperparamètres restants. Utilisez ce paramètre si vous souhaitez choisir entre les réseaux de neurones et les arbres de décision à boosting pour votre type de modèle.

Nom du paramètre Type Définition
study_spec_parameters_override List[Dict[String, Any]] (Facultatif) Sous-ensemble personnalisé d'hyperparamètres. Ce paramètre configure le composant automl-tabular-stage-1-tuner du pipeline.

Le code suivant montre comment définir le type de modèle sur les réseaux de neurones (NN, Neural Networks) :

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

Configurer le matériel

Les paramètres get_automl_tabular_pipeline_and_parameters suivants vous permettent de configurer les types et le nombre de machines pour l'entraînement. Cette option est idéale si vous disposez d'un ensemble de données volumineux et que vous souhaitez optimiser le matériel de la machine en conséquence.

Nom du paramètre Type Définition
stage_1_tuner_worker_pool_specs_override Dict[String, Any] (facultatif) Configuration personnalisée des types et du nombre de machines pour l'entraînement. Ce paramètre configure le composant automl-tabular-stage-1-tuner du pipeline.
cv_trainer_worker_pool_specs_override Dict[String, Any] (facultatif) Configuration personnalisée des types et du nombre de machines pour l'entraînement. Ce paramètre configure le composant automl-tabular-stage-1-tuner du pipeline.

Le code suivant montre comment définir le type de machine n1-standard-8 pour le nœud principal TensorFlow et le type de machine n1-standard-4 pour le nœud d'évaluateur TensorFlow :

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

Réduire la taille du modèle

Le paramètre get_automl_tabular_pipeline_and_parameters suivant vous permet de créer une version plus petite du modèle d'ensemble. Un modèle plus petit réduit la latence et les coûts liés à la prédiction.

Nom du paramètre Type Définition
run_distillation Booléen Si la valeur vaut TRUE, crée une version plus petite du modèle d'ensemble.

Ignorer la recherche d'architecture

Le paramètre get_automl_tabular_pipeline_and_parameters suivant vous permet d'exécuter le pipeline sans la rechercher d'architecture et de fournir un ensemble d'hyperparamètres issus d'une exécution de pipeline précédente.

Nom du paramètre Type Définition
stage_1_tuning_result_artifact_uri Chaîne (Facultatif) URI issu du réglage des hyperparamètres à partir d'une exécution de pipeline précédente.

Objectifs d'optimisation pour les modèles de classification ou de régression

Lorsque vous entraînez un modèle, Vertex AI sélectionne un objectif d'optimisation par défaut en fonction de votre type de modèle et du type de données utilisé pour votre colonne cible.

Il est préférable d'utiliser les modèles de classification pour effectuer les opérations suivantes :
Objectif d'optimisation Valeur de l'API Utilisez cet objectif si vous voulez...
AUC ROC maximize-au-roc Maximiser l'aire sous la courbe ROC (Receiver Operating Characteristic). Distinguer les classes. Valeur par défaut pour la classification binaire.
Perte logistique minimize-log-loss Maintenir les probabilités de prédiction aussi précises que possible. Seul objectif compatible pour la classification à classes multiples.
PR AUC maximize-au-prc Maximiser l'aire sous la courbe de précision/rappel. Optimiser les résultats des prédictions pour la classe minoritaire.
Précision pour la valeur de rappel maximize-precision-at-recall Optimiser la précision à une valeur de rappel spécifique.
Rappel pour la valeur de précision maximize-recall-at-precision Optimiser le rappel à une valeur de précision spécifique.
Les modèles de régression sont recommandés pour effectuer les opérations suivantes :
Objectif d'optimisation Valeur de l'API Utilisez cet objectif si vous voulez...
RMSE minimize-rmse Minimiser la racine carrée de l'erreur quadratique moyenne (RMSE). Capturer des valeurs plus extrêmes avec précision. Valeur par défaut.
MAE minimize-mae Minimiser l'erreur absolue moyenne (EAM). Afficher les valeurs extrêmes comme des anomalies ayant moins d'incidence sur le modèle.
RMSLE minimize-rmsle Minimiser la racine carrée de l'erreur quadratique moyenne (RMSLE). Pénaliser l'erreur sur la taille relative plutôt que sur la valeur absolue. Utile lorsque les valeurs prédites et réelles peuvent être très élevées.

Étapes suivantes