Entraînement à l'aide de l'algorithme distribué intégré XGBoost

L'entraînement à l'aide des algorithmes intégrés d'AI Platform Training vous permet d'envoyer votre ensemble de données et d'entraîner un modèle sans avoir à écrire un code d'entraînement. Cette page explique comment fonctionne l'algorithme distribué intégré XGBoost et comment l'utiliser.

Présentation

L'algorithme distribué intégré XGBoost est un wrapper pour l'algorithme XGBoost, qui est compatible pour une exécution sur AI Platform Training.

Contrairement à l'algorithme intégré XGBoost à instance unique, cet algorithme vous permet d'utiliser plusieurs machines virtuelles en parallèle pour un entraînement sur de grands ensembles de données. Cet algorithme vous permet également d'utiliser des GPU pour l'entraînement, ce qui peut accélérer le processus.

AI Platform Training exécute la tâche d'entraînement à l'aide de l'algorithme distribué XGBoost en fonction de votre ensemble de données et des paramètres de modèle que vous avez fournis. La mise en œuvre actuelle est basée sur la version 0.81 de XGBoost.

Limites

Les fonctionnalités suivantes ne sont pas disponibles pour l'entraînement avec l'algorithme distribué intégré XGBoost :

  • Prétraitement. Cet algorithme n'accepte pas le prétraitement automatique. Vous devez préparer manuellement les données d'entraînement et de validation dans des groupes de fichiers distincts qui répondent aux exigences décrites dans la section suivante sur la mise en forme des données d'entrée.
  • Entraînement sur une instance unique. Cet algorithme est conçu pour utiliser plusieurs machines virtuelles pour l'entraînement. Utilisez l'algorithme intégré XGBoost à instance unique si vous souhaitez effectuer l'entraînement à l'aide d'une seule machine virtuelle.

Types de machines compatibles

Vous pouvez utiliser le niveau d'évolutivité d'AI Platform Training ou la combinaison valide de types de machines de votre choix avec cet algorithme, tant que votre configuration répond aux exigences suivantes :

  • Spécifiez un nœud de calcul maître et au moins un nœud de calcul.
  • Pour de meilleures performances, spécifiez le même type de machine pour le nœud de calcul maître et pour les nœuds de calcul.
  • Ne spécifiez aucun serveur de paramètres.
  • Assurez-vous que la mémoire totale spécifiée pour les machines virtuelles est au moins 20 % supérieure à la taille totale des fichiers de vos données d'entraînement. Cela permet aux machines virtuelles de charger toutes les données d'entraînement dans la mémoire, mais aussi d'utiliser de la mémoire supplémentaire pour l'entraînement.
  • Si vous utilisez des GPU, assurez-vous que chaque machine virtuelle n'utilise qu'un seul GPU, et utilisez le même type de GPU pour le nœud de calcul maître et pour les nœuds de calcul. Assurez-vous que le type de machine que vous avez spécifié est compatible avec la configuration du GPU.
  • N'utilisez pas de TPU.

Mettre en forme les données d'entrée

L'algorithme distribué intégré XGBoost fonctionne sur des données tabulaires numériques. Chaque ligne d'un ensemble de données représente une instance, et chaque colonne d'un ensemble de données représente une valeur de caractéristique. La colonne cible représente la valeur que vous souhaitez prédire.

Préparer les fichiers CSV

Vos données d'entrée doivent être contenues dans un ou plusieurs fichiers CSV encodés en UTF-8 Chaque fichier doit répondre aux exigences suivantes :

  • Les fichiers CSV ne doivent pas comporter de lignes d'en-tête. Si vos fichiers CSV comportent des lignes d'en-tête avec une étiquette pour chaque colonne, supprimez cette première ligne dans chaque fichier.
  • La colonne cible doit être la première colonne.
  • Pour les tâches d'entraînement à la classification, la colonne cible peut contenir des valeurs non numériques. Toutes les autres colonnes doivent contenir uniquement des données numériques.
  • Pour les tâches d'entraînement à la régression, normalisez vos valeurs cibles pour que chaque valeur soit comprise entre 0 et 1. Toutes les autres colonnes doivent contenir uniquement des données numériques.

Diviser les données pour un entraînement distribué

Pour fournir des données à partir de plusieurs fichiers CSV lorsque vous envoyez une tâche d'entraînement, utilisez des caractères génériques dans les chemins d'accès Cloud Storage que vous spécifiez pour les arguments training_data_path et validation_data_path. Tous les fichiers CSV doivent utiliser le même schéma de colonne répondant aux exigences décrites dans la section précédente.

L'algorithme distribué intégré XGBoost distribue vos données d'entraînement sur les machines virtuelles de l'une des manières suivantes :

  • Si le nombre de fichiers CSV est supérieur ou égal au nombre de machines virtuelles, l'algorithme distribue les données par fichier à tour de rôle. En d'autres termes, le nœud de calcul maître charge le premier fichier CSV, le premier nœud de calcul charge le deuxième fichier CSV, et ainsi de suite. Cette méthode d'attribution des fichiers est répétée en boucle pour que chaque machine virtuelle charge à peu près le même nombre de fichiers.

  • Si le nombre de fichiers CSV est inférieur au nombre de machines virtuelles, l'algorithme distribue les données par instance à tour de rôle. En d'autres termes, le nœud de calcul maître charge la première ligne de chaque fichier CSV, le premier nœud de calcul charge la deuxième ligne de chaque fichier CSV, et ainsi de suite. Cette méthode d'attribution des instances est répétée en boucle pour que chaque machine virtuelle charge à peu près le même nombre d'instances.

Si vous spécifiez l'argument validation_data_path, l'algorithme charge également les données de validation de l'une de ces manières. Cependant, notez que l'algorithme charge les données d'entraînement et les données de validation de manière indépendante. Par exemple, si vous fournissez de nombreux fichiers de données d'entraînement, mais un seul fichier de données de validation, l'algorithme peut charger les données d'entraînement par fichier et charger les données de validation par instance.

Pour de meilleures performances, divisez les données d'entraînement en plusieurs fichiers CSV qui répondent aux consignes suivantes :

  • La taille de chaque fichier est inférieure à 1 Go.
  • Chaque fichier contient à peu près le même nombre d'instances.
  • Le nombre de fichiers peut être divisé par le nombre total de machines virtuelles. Par exemple, si vous effectuez l'entraînement avec un nœud de calcul maître et deux nœuds de calcul, le nombre de fichiers doit être un multiple de 3.

Vérifier les autorisations du bucket Cloud Storage

Pour stocker vos données, utilisez un bucket Cloud Storage dans le projet Google Cloud que vous utilisez pour exécuter les tâches AI Platform Training. Sinon, accordez à AI Platform Training l'accès au bucket Cloud Storage où vos données sont stockées.

Utiliser les GPU

Comme décrit dans la section précédente sur les types de machines, l'algorithme distribué intégré XGBoost est compatible avec l'utilisation d'un seul GPU par machine virtuelle pour l'entraînement.

Pour profiter des GPU, définissez l'hyperparamètre tree_method sur gpu_exact ou gpu_hist lorsque vous envoyez votre tâche d'entraînement.

Obtenez plus d'informations sur la compatibilité de XGBoost avec les GPU.

Envoyer une tâche d'entraînement XGBoost distribué

Cette section explique comment envoyer une tâche d'entraînement utilisant l'algorithme distribué intégré XGBoost. Utilisez Google Cloud Console ou Google Cloud CLI pour envoyer votre tâche.

Vous trouverez une description complète des hyperparamètres et des autres arguments que vous pouvez ajuster pour cet algorithme dans la documentation de référence sur l'algorithme distribué intégré XGBoost.

Dans l'exemple suivant, nous partons du principe que vous entraînez un classificateur sur des données de recensement que vous avez divisées en trois fichiers de données d'entraînement et en trois fichiers de données de validation :

  • train-0.csv
  • train-1.csv
  • train-2.csv
  • eval-0.csv
  • eval-1.csv
  • eval-2.csv

Supposons que ces fichiers ne comportent aucune ligne d'en-tête et que vous les avez importés sur Cloud Storage. L'exemple crée une tâche d'entraînement à trois machines virtuelles, chacune utilisant un GPU NVIDIA Tesla P100. La tâche s'exécute dans la région us-central1.

Console Google Cloud

  1. Accédez à la page Tâches d'AI Platform Training dans Google Cloud Console :

    Page "Tâches" d'AI Platform Training

  2. Cliquez sur le bouton Nouvelle tâche d'entraînement. Dans les options qui s'affichent en dessous, cliquez sur Entraînement de l'algorithme intégré.

  3. Sur la page Créer une tâche d'entraînement, ouvrez la liste déroulante Sélectionner un algorithme et sélectionnez XGBoost distribué. Cliquez sur Suivant.

  4. Dans la section Données d'entraînement, sélectionnez Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage dans la liste déroulante. Utilisez le champ Chemin d'accès au répertoire pour sélectionner le répertoire Cloud Storage qui contient vos fichiers d'entraînement. Dans le champ Nom générique, saisissez train-*.csv.

  5. Dans la section Données de validation (facultatif), sélectionnez Utiliser plusieurs fichiers stockés dans un répertoire Cloud Storage dans la liste déroulante. Utilisez le champ Chemin d'accès au répertoire pour sélectionner le répertoire Cloud Storage qui contient vos fichiers de validation. Dans le champ Nom générique, saisissez eval-*.csv.

  6. Dans la section Résultats de l'entraînement, utilisez le champ Répertoire de sortie pour sélectionner un répertoire distinct dans votre bucket Cloud Storage afin de stocker les résultats de l'entraînement. Cliquez sur Suivant.

  7. Personnalisez les arguments de l'algorithme pour votre tâche d'entraînement ou conservez les valeurs par défaut. Pour en savoir plus sur les arguments, suivez les liens présents dans la console Google Cloud, et consultez la documentation de référence sur l'algorithme distribué intégré XGBoost. Cliquez sur Next (Suivant).

  8. Saisissez le nom de votre choix dans le champ ID de tâche. Dans la liste déroulante Région, sélectionnez us-central1.

    Dans la liste déroulante Niveau d'évolutivité, sélectionnez CUSTOM. Dans la section Configuration personnalisée du cluster, sélectionnez standard_p100 dans les listes déroulantes Type de maître et Type de nœud de calcul. Dans le champ Nombre de nœuds de calcul, saisissez 2. Cliquez sur OK.

  9. Sur la page Tâches, cliquez sur l'ID de votre nouvelle tâche pour afficher la page Informations sur la tâche. Cliquez ensuite sur Afficher les journaux pour consulter les journaux d'entraînement.

Outil gcloud

  1. Définissez des variables d'environnement pour votre tâche, en remplaçant BUCKET par le nom de votre bucket Cloud Storage et DATA_DIRECTORY par le chemin d'accès au répertoire du bucket contenant vos données :

    # Specify the Docker container for your built-in algorithm selection.
    IMAGE_URI='gcr.io/cloud-ml-algos/xgboost_dist:latest'
    
    # Specify the Cloud Storage wildcard paths to your training and validation data.
    TRAINING_DATA='gs://BUCKET/DATA_DIRECTORY/train-*.csv'
    VALIDATION_DATA='gs://BUCKET/DATA_DIRECTORY/eval-*.csv'
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME='census'
    ALGORITHM='xgboost_dist'
    MODEL_TYPE='classification'
    DATE='date '+%Y%m%d_%H%M%S''
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://BUCKET/algorithm_training/${MODEL_NAME}/${DATE}"
    
  2. Envoyez une tâche d'entraînement à l'aide de la commande gcloud ai-platform jobs training submit.

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=us-central1 \
      --master-image-uri=$IMAGE_URI \
      --job-dir=$JOB_DIR \
      --scale-tier=CUSTOM \
      --master-machine-type=n1-standard-4 \
      --master-accelerator count=1,type=nvidia-tesla-p100 \
      --worker-machine-type=n1-standard-4 \
      --worker-count=2 \
      --worker-accelerator count=1,type=nvidia-tesla-p100 \
      -- \
      --training_data_path=$TRAINING_DATA \
      --validation_data_path=$VALIDATION_DATA \
      --objective=binary:logistic \
      --tree_method=gpu_hist
    
  3. Surveillez l'état de votre tâche d'entraînement en consultant les journaux avec gcloud. Reportez-vous aux commandes gcloud ai-platform jobs describe et gcloud ai-platform jobs stream-logs.

    gcloud ai-platform jobs describe ${JOB_ID}
    gcloud ai-platform jobs stream-logs ${JOB_ID}
    

Étapes suivantes