Algorithme XGBoost - Amazon SageMaker

Algorithme XGBoost

XGBoost (eXtreme Gradient Boosting) est une implémentation open source réputée et efficace de l'algorithme d'arbres de boosting de gradient. Le boosting de gradient est un algorithme d'apprentissage supervisé qui tente de prédire avec précision une variable cible en combinant un ensemble d'estimations d'un ensemble de modèles plus simples et plus faibles. L'algorithme XGBoost fonctionne bien dans les compétitions de machine learning en raison de sa gestion robuste de divers types de données, de relations, de distributions et de la variété d'hyperparamètres que vous pouvez affiner. Vous pouvez utiliser XGBoost pour les problèmes de régression, de classification (binaire et multiclasse) et de classement.

Vous pouvez utiliser la nouvelle version de l'algorithme XGBoost comme algorithme Amazon SageMaker intégré ou comme cadre pour exécuter des scripts d'entraînement dans vos environnements locaux. Cette implémentation a une empreinte mémoire plus petite, une meilleure journalisation, une meilleure validation des hyperparamètres et un ensemble étendu de métriques par rapport aux versions d'origine. Elle fournit également un estimator XGBoost qui exécute un script d'entraînement dans un environnement XGBoost géré. La version actuelle de SageMaker XGBoost est basée sur les versions originales de XGBoost 0.90, 1.0, 1.2 et 1.3.

Versions prises en charge

  • Mode de cadre (open source) : 0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-2, 1.3-1

  • Mode d'algorithme : 0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-2, 1.3-1

Avertissement

La version 0.90 de XGBoost sera obsolète le 31 décembre 2021. La prise en charge des mises à jour de sécurité ou des corrections de bogues pour XGBoost 0.90 sera interrompue après cette date. Il est fortement recommandé de mettre à niveau la version XGBoost vers l'une des versions les plus récentes (1.0-1 ou ultérieure) avant qu'elle ne devienne obsolète.

Note

La version 1.1 de XGBoost n'est pas prise en charge sur SageMaker, car sa capacité d'exécuter la prédiction lorsque l'entrée de test a moins de fonctions que les données d'entraînement dans les entrées LIBSVM est interrompue. Cette fonctionnalité a été restaurée dans XGBoost 1.2. Envisagez d'utiliser SageMaker XGBoost 1.2-2 ou version ultérieure.

Comment utiliser SageMaker XGBoost

Avec SageMaker, vous pouvez utiliser XGBoost comme un algorithme ou un cadre intégré. En utilisant XGBoost comme framework, vous bénéficiez d'une plus grande flexibilité et d'un accès à des scénarios plus avancés, tels que la validation croisée k fold, car vous pouvez personnaliser vos propres scripts d'entraînement.

  • Utilisation de XGBoost en tant qu'infrastructure

    Utilisez XGBoost en tant que framework pour exécuter des scripts d'entraînement qui peuvent intégrer un traitement de données supplémentaire dans vos tâches d'entraînement. Dans l'exemple de code suivant, vous trouverez comment le kit SDK SageMaker Python fournit l'API XGBoost en tant que cadre de la même manière qu'il fournit d'autres API de cadre, telles que TensorFlow, MxNet et PyTorch.

    SageMaker Python SDK v1
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-2', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-2', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Pour obtenir un exemple de bout en bout d'utilisation de SageMaker XGBoost en tant que framework, veuillez consulter Régression avec Amazon SageMaker XGBoost

  • Utilisation de XGBoost en tant qu'algorithme intégré

    Utilisez l'algorithme intégré XGBoost pour construire un conteneur d'entraînement XGBoost comme indiqué dans l'exemple de code suivant. Vous pouvez repérer automatiquement l'URI d'image de l'algorithme intégré XGBoost à l'aide de l'API image_uris.retrieve SageMaker (ou de l'API get_image_uri si vous utilisez le kit SDK Amazon SageMaker Python version 1). Si vous voulez vous assurer que l'API image_uris.retrieve trouvera l'URI correct, consultez Paramètres communs pour les algorithmes intégrés et recherchez xgboost dans la liste complète des URI d'image d'algorithme intégré et des régions disponibles.

    Après avoir spécifié l'URI d'image XGBoost, vous pouvez utiliser le conteneur XGBoost pour construire un évaluateur à l'aide de l'API SageMaker Estimator et lancer une tâche d'entraînement. Ce mode d'algorithme intégré XGBoost n'intègre pas votre propre script d'entraînement XGBoost et s'exécute directement sur les jeux de données en entrée.

    SageMaker Python SDK v1
    import sagemaker import boto3 from sagemaker.amazon.amazon_estimator import get_image_uri from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = get_image_uri(boto3.Session().region_name, 'xgboost', repo_version='1.2-2') # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_name=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', train_volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.2-2") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Pour plus d'informations sur la configuration de XGBoost en tant qu'algorithme intégré, consultez les exemples de bloc-notes suivants.

Interface d'entrée/sortie pour l'algorithme XGBoost

Le boosting de gradient fonctionne sur les données tabulaires, avec les lignes représentant les observations, une colonne représentant la variable ou l'étiquette cible, et les autres colonnes représentant les fonctions.

L'implémentation SageMaker de XGBoost prend en charge les formats CSV et libsvm pour l'entraînement et l'inférence :

  • Pour Training ContentType, les entrées valides sont text/libsvm (par défaut) ou text/csv.

  • Pour Inference ContentType, les entrées valides sont text/libsvm (par défaut) ou text/csv.

Note

Pour l'entraînement CSV, l'algorithme suppose que la variable cible est dans la première colonne et que le CSV n'a pas d'enregistrement d'en-tête.

Pour l'inférence CSV, l'algorithme suppose que l'entrée CSV ne dispose pas de la colonne d'étiquette.

Pour l'entraînement libsvm, l'algorithme suppose que l'étiquette se trouve dans la première colonne. Les colonnes suivantes contiennent les paires de valeur d'index des caractéristiques. Par conséquent, chaque ligne a le format suivant : <label> <index0>:<value0> <index1>:<value1> ... Les demandes d'inférence pour libsvm peuvent avoir ou nom les étiquettes au format libsvm.

Cela diffère des autres algorithmes SageMaker, qui utilisent le format d'entrée d'entraînement protobuf pour maintenir une plus grande cohérence avec les formats de données XGBoost standard.

Pour le mode d'entrée de l'entraînement CSV, la mémoire totale disponible pour l'algorithme (Nombre d'instances * la mémoire disponible dans l'objet InstanceType) doit être en mesure de contenir l'ensemble de données de l'entraînement. Pour le mode d'entrée de l'entraînement libsvm, ce n'est pas obligatoire, mais nous le recommandons.

SageMaker XGBoost utilise le module Python pickle pour sérialiser/désérialiser le modèle, qui peut être utilisé pour l'enregistrement/le chargement du modèle.

Pour utiliser un modèle entraîné avec SageMaker Booster dans le modèle open source XGBoost

  • Utilisez le code Python suivant :

    import pickle as pkl import tarfile t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)

Pour différencier l'importance des points de données étiquetés, utilisez Instance Weight Supports

  • SageMaker XGBoost permet aux clients de différencier l'importance des points de données étiquetés en affectant à chaque instance une valeur de pondération. Pour l'entrée text/libsvm, les clients peuvent attribuer des valeurs de pondération aux instances de données en les attachant après les étiquettes. Par exemple : «  », label:weight idx_0:val_0 idx_1:val_1.... Pour l'entrée text/csv, les clients doivent activer l'indicateur csv_weights dans les paramètres et attacher les valeurs de pondération dans la colonne après les étiquettes. Par exemple : «  »: label,weight,val_0,val_1,...).

Recommandation sur les instances EC2 pour l'algorithme XGBoost

Actuellement, SageMaker XGBoost 1.0-1 ou version antérieure n'entraîne qu'à l'aide des CPU. Il s'agit d'un algorithme dépendant de la mémoire (par opposition à un algorithme dépendant du calcul). Par conséquent, une instance de calcul à usage général (par exemple, M5) constitue un meilleur choix qu'une instance optimisée pour le calcul (par exemple, C4). De plus, nous vous recommandons d'avoir suffisamment de mémoire totale dans les instances sélectionnées pour contenir les données d'entraînement. Bien qu'il prenne en charge l'utilisation de l'espace disque pour gérer les données ne pouvant contenir dans la mémoire principale (la fonction hors noyau disponible avec le mode d'entrée libsvm), écrire des fichiers de cache sur le disque ralentit le temps de traitement de l'algorithme.

SageMaker XGBoost version 1.2 ou version ultérieure prend en charge l'entraînement GPU à instance unique. Malgré des coûts par instance plus élevés, les GPU entraînent plus rapidement, ce qui les rend plus rentables. Pour tirer parti de l'entraînement GPU, spécifiez le type d'instance comme l'une des instances GPU (par exemple, P3) et définissez l'hyperparamètre tree_method sur gpu_hist dans votre script XGBoost existant. Actuellement, SageMaker ne prend pas en charge l'entraînement sur plusieurs GPU.

Exemples de blocs-notes XGBoost

Le tableau suivant présente une série d'exemples de blocs-notes traitant de différents cas d'utilisation de l'algorithme XGBoost d'Amazon SageMaker.

Titre du bloc-notes Description

Comment créer un conteneur XGBoost personnalisé?

Ce bloc-notes vous explique comment créer un conteneur XGBoost personnalisé avec Amazon SageMaker Batch Transform.

Introduction au traitement, à l'entraînement et à l'inférence des fonctions

Ce bloc-notes vous explique comment créer un pipeline de Machine Learning (ML) à l'aide de transformateurs de fonctions Spark et effectuer des inférences en temps réel à l'aide d'Amazon SageMaker Batch Transform.

Régression avec XGBoost à l'aide de Parquet

Ce bloc-notes vous explique comment utiliser le jeu de données Abalone dans Parquet pour entraîner un modèle XGBoost.

Comment entraîner et héberger un modèle de classification multiclasse?

Ce bloc-notes explique comment utiliser le jeu de données MNIST pour entraîner et héberger un modèle de classification multiclasse.

Comment entraîner un modèle pour la prédiction de perte de clients?

Ce bloc-notes vous montre comment entraîner un modèle à prédire le départ de clients mobiles afin d'identifier les clients insatisfaits.

Présentation de l'infrastructure Spot gérée d'Amazon SageMaker pour l'entraînement XGBoost

Ce bloc-notes vous explique comment utiliser les instances Spot pour l'entraînement avec un conteneur XGBoost.

Comment utiliser Amazon SageMaker Debugger pour déboguer les tâches d'entraînement XGBoost?

Ce bloc-notes vous explique comment utiliser Amazon SageMaker Debugger pour surveiller contrôler les tâches d'entraînement afin de détecter les incohérences.

Comment utiliser Amazon SageMaker Debugger pour déboguer les tâches d'entraînement XGBoost en temps réel?

Ce bloc-notes vous explique comment utiliser le jeu de données MNIST et Amazon SageMaker Debugger pour effectuer une analyse en temps réel des tâches d'entraînement XGBoost pendant que des tâches d'entraînement sont en cours d'exécution.

Pour obtenir des instructions sur la création et l'accès aux instances de bloc-notes Jupyter que vous pouvez utiliser pour exécuter l'exemple dans SageMaker, consultez Utilisation des instances de bloc-notes Amazon SageMaker. Après avoir créé et ouvert une instance de bloc-notes, choisissez l'onglet SageMaker Examples (Exemples SageMaker) pour afficher la liste de tous les exemples SageMaker. Les exemples de blocs-notes de modélisation de rubrique utilisant les algorithmes NTM se trouvent dans la section Introduction to Amazon algorithms (Présentation des algorithmes Amazon). Pour ouvrir un bloc-notes, choisissez son onglet Use (Utiliser), puis Create copy (Créer une copie).