Comment utiliser SageMaker XGBoost - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Comment utiliser SageMaker XGBoost

Avec SageMaker, vous pouvez l'utiliser XGBoost comme algorithme ou framework intégré. En XGBoost tant que framework, vous bénéficiez d'une plus grande flexibilité et d'un accès à des scénarios plus avancés, car vous pouvez personnaliser vos propres scripts d'entraînement. Les sections suivantes décrivent comment utiliser XGBoost le SageMaker Python et l'interface SDK d'entrée/sortie de l'algorithme. XGBoost Pour plus d'informations sur l'utilisation XGBoost depuis l'interface utilisateur Amazon SageMaker Studio Classic, consultezSageMaker JumpStart modèles préentraînés.

Utiliser XGBoost comme cadre

XGBoostUtilisez-le comme framework pour exécuter vos scripts de formation personnalisés qui peuvent intégrer un traitement de données supplémentaire dans vos tâches de formation. Dans l'exemple de code suivant, SageMaker Python SDK fournit le XGBoost API en tant que framework. Cela fonctionne de la même SageMaker manière que les autres frameworksAPIs, tels que TensorFlowMXNet, 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.7-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 un end-to-end exemple d'utilisation en SageMaker XGBoost tant que framework, consultez Régression avec Amazon SageMaker XGBoost.

Utilisation XGBoost en tant qu'algorithme intégré

Utilisez l'algorithme XGBoost intégré pour créer un conteneur d'XGBoostentraînement, comme indiqué dans l'exemple de code suivant. Vous pouvez détecter automatiquement l'image de l'algorithme XGBoost intégré URI à l'aide du SageMaker image_uris.retrieveAPI. Si vous utilisez Amazon SageMaker Python SDK version 1, utilisez le get_image_uriAPI. Pour vous assurer que les résultats image_uris.retrieve API sont correctsURI, consultez la section Paramètres communs pour les algorithmes intégrés. Recherchez ensuite dans la xgboost liste complète des images de l'algorithme intégré URIs et des régions disponibles.

Après avoir spécifié l'XGBoostimageURI, utilisez le XGBoost conteneur pour créer un estimateur à l'aide de l' SageMaker estimateur API et lancer une tâche de formation. Ce mode d'algorithme XGBoost intégré n'intègre pas votre propre script d'XGBoostentraînement et s'exécute directement sur les ensembles de données d'entrée.

Important

Lorsque vous récupérez l' SageMaker XGBoostimageURI, n'utilisez pas :latest ou :1 pour la URI balise image. Vous devez spécifier l'un des Versions prises en charge pour choisir le XGBoost conteneur SageMaker géré avec la version de XGBoost package native que vous souhaitez utiliser. Pour connaître la version du package migrée dans les SageMaker XGBoost conteneurs, consultez les chemins de registre Docker et les exemples de code. Choisissez ensuite 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.7-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 façon de configurer le en XGBoost tant qu'algorithme intégré, consultez les exemples de blocs-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.

La SageMaker mise en œuvre de XGBoost prend en charge les formats de données suivants pour la formation et l'inférence :

  • text/libsvm (par défaut)

  • text/csv

  • application/x-parquet

  • demande/ x-recordio-protobuf

Note

Il y a quelques points à prendre en compte concernant l'entrée d'entraînement et d'inférence :

  • Pour des performances accrues, nous vous recommandons XGBoost d'utiliser le mode Fichier, dans lequel vos données d'Amazon S3 sont stockées sur les volumes de l'instance d'entraînement.

  • Pour l'entraînement avec une entrée sous forme de colonnes, l'algorithme suppose que la variable cible (étiquette) correspond à la première colonne. Pour l'inférence, l'algorithme suppose que l'entrée n'a pas de colonne d'étiquettes.

  • Pour les CSV données, l'entrée ne doit pas comporter d'enregistrement d'en-tête.

  • Pour l'LIBSVMentraînement, l'algorithme suppose que les colonnes suivantes après la colonne d'étiquette contiennent les paires de valeurs d'index de base zéro pour les entités. Par conséquent, chaque ligne a le format suivant : <label> <index0>:<value0> <index1>:<value1>.

  • Pour en savoir plus sur les types d'instance et l'entraînement distribué, consultez EC2recommandation d'instance pour l'XGBoostalgorithme.

Pour le mode d'entrée d'CSVentraînement, la mémoire totale disponible pour l'algorithme doit être capable de contenir le jeu de données d'entraînement. La mémoire totale disponible est calculée comme suitInstance Count * the memory available in the InstanceType. Pour le mode d'entrée de l'entraînement libsvm, ce n'est pas obligatoire, mais nous le recommandons.

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

Note

Faites attention aux versions lorsque vous utilisez un SageMaker XGBoost modèle en open sourceXGBoost. Les versions 1.3-1 et ultérieures utilisent le format binaire XGBoost interne tandis que les versions précédentes utilisent le module Python pickle.

Pour utiliser un modèle formé avec la SageMaker XGBoost version 1.3-1 ou une version ultérieure en 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é avec les versions précédentes de SageMaker XGBoost in 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 XGBoostpermet aux clients de différencier l'importance des points de données étiquetés en attribuant une valeur de pondération à chaque instance. 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,...).