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 XGBoost dans SageMaker est basée sur les versions originales de XGBoost 1.0, 1.2, 1.3 et 1.5.

Versions prises en charge

  • Mode de framework (open source) : 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1

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

Important

Lorsque vous récupérez l'URI d'image XGBoost dans SageMaker, n'utilisez pas :latest ni :1 pour la balise d'URI de l'image. Vous devez spécifier l'une des Versions prises en charge pour choisir le conteneur XGBoost géré par SageMaker avec la version native du package XGBoost que vous souhaitez utiliser. Pour trouver la version du package migrée dans les conteneurs XGBoost de SageMaker, consultez Chemins de registre Docker et exemple de code, choisissez votre Région AWS et accédez à la section XGBoost (algorithme).

Avertissement

Les versions XGBoost 0.90 sont obsolètes. La prise en charge des mises à jour de sécurité et des corrections de bogues pour XGBoost 0.90 a été interrompue. Il est fortement recommandé de mettre à niveau la version de XGBoost vers l'une des versions les plus récentes.

Note

La version 1.1 de XGBoost n'est pas prise en charge sur SageMaker, car XGBoost 1.1 n'est pas en mesure d'exécuter la prédiction quand l'entrée de test a moins de caractéristiques que les données d'entraînement dans les entrées LIBSVM. Cette capacité 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. Les sections suivantes expliquent comment utiliser XGBoost avec le kit SDK Python SageMaker. Pour plus d'informations sur l'utilisation de XGBoost à partir de l'interface utilisateur d'Amazon SageMaker Studio, consultez SageMaker JumpStart.

  • 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.

    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: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-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.5-1', 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 créer 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 créer 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.

    Important

    Lorsque vous récupérez l'URI d'image XGBoost dans SageMaker, n'utilisez pas :latest ni :1 pour la balise d'URI de l'image. Vous devez spécifier l'une des Versions prises en charge pour choisir le conteneur XGBoost géré par SageMaker avec la version native du package XGBoost que vous souhaitez utiliser. Pour trouver la version du package migrée dans les conteneurs XGBoost de SageMaker, consultez Chemins de registre Docker et exemple de code, choisissez votre Région AWS et accédez à la section XGBoost (algorithme).

    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.5-1") # 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 le jeu 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.

Pour la version 1.3-1 et les versions ultérieures, SageMaker XGBoost enregistre le modèle au format binaire interne XGBoost, en utilisant Booster.save_model. Les versions précédentes utilisaient le module pickle Python pour sérialiser/désérialiser le modèle.

Note

Prêtez attention aux versions lorsque vous utilisez un modèle SageMaker XGBoost dans l'infrastructure open source XGBoost. Les versions 1.3-1 et ultérieures utilisent le format binaire interne XGBoost tandis que les versions précédentes utilisent le module pickle Python.

Pour utiliser un modèle entraîné avec la version SageMaker XGBoost 1.3-1 ou une version ultérieure dans l'infrastructure open source XGBoost

  • Utilisez le code Python suivant :

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)

Pour utiliser un modèle entraîné des versions précédentes de SageMaker XGBoost dans l'infrastructure 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

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. SageMaker XGBoost version 1.2 ou ultérieure prend en charge les instances P2 et P3.

SageMaker XGBoost version 1.2-2 ou ultérieure prend en charge les familles d'instances de GPU P2, P3, G4dn et G5.

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 XGBoost ne prend pas en charge l'entraînement sur plusieurs GPU.

SageMaker XGBoost prend en charge les instances de CPU et de GPU pour l'inférence. Pour obtenir des informations sur les types d'instances pour l'inférence, consultez Types d'instances ML Amazon SageMaker.

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.

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 contrôler 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).