Usa l'algoritmo XGBoost con Amazon SageMaker - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa l'algoritmo XGBoost con Amazon SageMaker

XGBoost (eXtreme Gradient Boosting) è un'implementazione open source popolare ed efficiente dell'algoritmo degli alberi di gradient boosting. Gradient boosting è un algoritmo di apprendimento supervisionato che cerca di prevedere con precisione una variabile target combinando più stime tratte da una serie di modelli più semplici. L'algoritmo XGBoost si comporta bene nelle competizioni di machine learning per i seguenti motivi:

  • La sua solida gestione di una varietà di tipi di dati, relazioni e distribuzioni.

  • La varietà di iperparametri che puoi ottimizzare.

È possibile utilizzare XGBoost per problemi di regressione, classificazione (binaria e multiclass) e ordinamento.

È possibile utilizzare la nuova versione dell'algoritmo XGBoost come:

  • Un algoritmo SageMaker integrato in Amazon.

  • Un framework per eseguire script di addestramento nei tuoi ambienti locali.

Questa implementazione ha un ingombro di memoria inferiore, una migliore registrazione, una migliore convalida degli iperparametri e un set di metriche più ampio rispetto alle versioni originali. Fornisce un XGBoost estimator che esegue uno script di formazione in un ambiente XGBoost gestito. L'attuale versione di SageMaker XGBoost si basa sulle versioni originali di XGBoost 1.0, 1.2, 1.3, 1.5 e 1.7.

Versioni supportate

  • Modalità framework (open source): 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

  • Modalità algoritmo: 1.0-1, 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1

avvertimento

A causa della capacità di calcolo richiesta, la versione 1.7-1 di SageMaker XGBoost non è compatibile con le istanze GPU della famiglia di istanze P2 per l'addestramento o l'inferenza.

Importante

Quando recuperate l'URI dell'immagine SageMaker XGBoost, non utilizzate o come tag URI dell'immagine. :latest :1 È necessario specificare uno dei Versioni supportate contenitori XGBoost SageMaker gestiti con la versione del pacchetto XGBoost nativa che si desidera utilizzare. Per trovare la versione del pacchetto migrata nei contenitori SageMaker XGBoost, consulta Docker Registry Paths and Example Code. Quindi scegli il tuo Regione AWS e vai alla sezione XGBoost (algoritmo).

avvertimento

Le versioni XGBoost 0.90 sono obsolete. Il supporto per gli aggiornamenti di sicurezza o le correzioni di bug per XGBoost 0.90 non sono più disponibili. Ti consigliamo vivamente di aggiornare la versione XGBoost a una delle versioni più recenti.

Nota

XGBoost v1.1 non è supportato su. SageMaker XGBoost 1.1 ha una capacità inferiore di eseguire previsioni quando l'input di test ha meno funzionalità rispetto ai dati di addestramento negli input LIBSVM. Questa funzionalità è stata ripristinata in XGBoost v1.2. Prendi in considerazione l'utilizzo di XGBoost 1.2-2 o versioni successive. SageMaker

Come usare XGBoost SageMaker

Con SageMaker, puoi usare XGBoost come algoritmo o framework integrato. Utilizzando XGBoost come framework, hai maggiore flessibilità e accesso a scenari più avanzati perché puoi personalizzare i tuoi script di allenamento. Le seguenti sezioni descrivono come usare XGBoost con Python SageMaker SDK. Per informazioni su come utilizzare XGBoost dall'interfaccia utente di Amazon SageMaker Studio Classic, consulta. Addestra, implementa e valuta modelli preaddestrati con SageMaker JumpStart

  • Utilizzo di XGBoost come un framework

    Utilizza XGBoost come un framework per eseguire script che possono incorporare ulteriore elaborazione dei dati nei processi di addestramento. Nel seguente esempio di codice, SageMaker Python SDK fornisce l'API XGBoost come framework. Funziona in modo simile a come SageMaker fornisce altre API del framework TensorFlow, come MXNet e. 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})

    Per un end-to-end esempio di utilizzo di SageMaker XGBoost come framework, consulta Regression with Amazon XGBoost SageMaker

  • Utilizzo di XGBoost come algoritmo integrato

    Utilizzare l'algoritmo integrato XGBoost per creare un container di addestramento XGBoost, come illustrato nell'esempio di codice seguente. Puoi individuare automaticamente l'URI dell'immagine dell'algoritmo integrato di XGBoost utilizzando l'API. SageMaker image_uris.retrieve Se usi Amazon SageMaker Python SDK versione 1, usa l'API. get_image_uri Per assicurarti che l'image_uris.retrieveAPI trovi l'URI corretto, consulta Parametri comuni per gli algoritmi integrati. Quindi cerca xgboost dall'elenco completo degli URI delle immagini degli algoritmi integrati e delle regioni disponibili.

    Dopo aver specificato l'URI dell'immagine XGBoost, utilizzate il contenitore XGBoost per costruire uno stimatore utilizzando l'API Estimator e avviare un processo di formazione. SageMaker Questa modalità algoritmo integrato XGBoost non incorpora il tuo script di addestramento XGBoost e viene eseguito direttamente sui set di dati di input.

    Importante

    Quando recuperate l'URI dell'immagine SageMaker XGBoost, non utilizzate o per il tag URI dell'immagine. :latest :1 È necessario specificare uno dei Versioni supportate contenitori XGBoost SageMaker gestiti con la versione del pacchetto XGBoost nativa che si desidera utilizzare. Per trovare la versione del pacchetto migrata nei contenitori SageMaker XGBoost, consulta Docker Registry Paths and Example Code. Quindi scegli il tuo Regione AWS e vai alla sezione XGBoost (algoritmo).

    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})

    Per ulteriori informazioni su come impostare XGBoost come algoritmo integrato, vedere i seguenti esempi di notebook.

Interfaccia di input/output per l'algoritmo XGBoost

Il gradient boosting agisce sui dati tabulari, con le righe che rappresentano le osservazioni, una colonna che rappresenta la variabile o l'etichetta di destinazione e le colonne rimanenti che rappresentano le caratteristiche.

L' SageMaker implementazione di XGBoost supporta i seguenti formati di dati per l'addestramento e l'inferenza:

  • text/libsvm (impostazione predefinita)

  • text/csv

  • application/x-parquet

  • applicazione/ x-recordio-protobuf

Nota

Ci sono alcune considerazioni da tenere a mente per quanto riguarda l’addestramento e l'input inferenziale:

  • Per migliorare le prestazioni, consigliamo di utilizzare XGBoost con la modalità File, in cui i dati di Amazon S3 vengono archiviati nei volumi delle istanze di formazione.

  • Per l'addestramento con input colonnare, l'algoritmo presuppone che la variabile target (etichetta) sia la prima colonna. Per l'interferenza, l'algoritmo presuppone che l'input non disponga della colonna di etichette.

  • Per i dati CSV, l'input non deve avere un record di intestazione.

  • Per l'addestramento con LIBSVM, l'algoritmo presuppone che le colonne successive dopo la colonna di etichette contengano le coppie di valori dell'indice a base zero per le funzionalità. Quindi, ogni riga ha il formato: <label> <index0>:<value0> <index1>:<value1>.

  • Per informazioni sui tipi di istanze e sull’addestramento distribuito, vedere Raccomandazione dell'istanza EC2 per l'algoritmo XGBoost.

Per la modalità di input di addestramento CSV, la memoria totale disponibile per l'algoritmo deve essere in grado di contenere il set di dati di addestramento. La memoria totale disponibile viene calcolata come. Instance Count * the memory available in the InstanceType Per la modalità di input dell’addestramento libsvm non è richiesto, sebbene lo consigliamo.

Per la versione 1.3-1 e successive, SageMaker XGBoost salva il modello nel formato binario interno di XGBoost, utilizzando. Booster.save_model Le versioni precedenti utilizzavano il modulo pickle Python per serializzare/deserializzare il modello.

Nota

Fai attenzione alle versioni quando usi un modello XGBoost in XGBoost open source. SageMaker Le versioni 1.3-1 e successive utilizzano il formato binario interno XGBoost mentre le versioni precedenti utilizzano il modulo pickle Python.

Per utilizzare un modello addestrato con SageMaker XGBoost v1.3-1 o versione successiva in XGBoost open source
  • Utilizza il seguente codice Python:

    import xgboost as xgb xgb_model = xgb.Booster() xgb_model.load_model(model_file_path) xgb_model.predict(dtest)
Per utilizzare un modello addestrato con versioni precedenti di XGBoost in XGBoost open source SageMaker
  • Utilizza il seguente codice Python:

    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)
Per differenziare l'importanza di punti dati contrassegnati utilizza Instance Weight Support
  • SageMaker XGBoost consente ai clienti di differenziare l'importanza dei punti dati etichettati assegnando a ciascuna istanza un valore di peso. Per l'input text/libsvm, i clienti possono assegnare valori di peso alle istanze dati collegandoli dopo le etichette. Ad esempio, label:weight idx_0:val_0 idx_1:val_1.... Per l'input text/csv, i clienti devono attivare il contrassegno csv_weights nei parametri e collegare i valori di peso nella colonna dopo le etichette. Ad esempio: label,weight,val_0,val_1,...).

Raccomandazione dell'istanza EC2 per l'algoritmo XGBoost

SageMaker XGBoost supporta l'addestramento e l'inferenza di CPU e GPU. I consigli sulle istanze dipendono dalle esigenze di addestramento e inferenza, nonché dalla versione dell'algoritmo XGBoost. Per ulteriori informazioni, consulta una delle seguenti opzioni:

Addestramento

L'algoritmo SageMaker XGBoost supporta l'addestramento di CPU e GPU.

Addestramento della CPU

SageMaker XGBoost 1.0-1 o versioni precedenti si allena solo utilizzando CPU. Poiché si tratta di un algoritmo basato su memoria e non su calcolo, un'istanza di calcolo a scopo generico (ad esempio, M5) rappresenta una scelta migliore rispetto a un'istanza ottimizzata per il calcolo (ad esempio, C4). Inoltre, consigliamo di disporre di memoria sufficiente nelle istanze selezionate per conservare i dati di addestramento. Supporta l'uso dello spazio su disco per gestire dati che non rientrano nella memoria principale. Questo è il risultato della out-of-core funzionalità disponibile con la modalità di input libsvm. Tuttavia, la scrittura di file di cache su disco rallenta il tempo di elaborazione dell'algoritmo.

Addestramento della GPU

SageMaker La versione 1.2-2 o successiva di XGBoost supporta l'addestramento tramite GPU. Nonostante costi più elevati per istanza, i GPU si preparano più rapidamente, rendendoli più convenienti.

SageMaker La versione 1.2-2 o successiva di XGBoost supporta le famiglie di istanze GPU P2, P3, G4dn e G5.

SageMaker La versione 1.7-1 o successiva di XGBoost supporta le famiglie di istanze GPU P3, G4dn e G5. Si noti che, a causa dei requisiti di capacità di elaborazione, la versione 1.7-1 o successiva non supporta la famiglia di istanze P2.

Per sfruttare i vantaggi della formazione sulla GPU:

  • Specificate il tipo di istanza come una delle istanze GPU (ad esempio, P3)

  • Imposta l'tree_methodiperparametro su gpu_hist nello script XGBoost esistente

Addestramento distribuito

SageMaker XGBoost supporta istanze CPU e GPU per l'addestramento distribuito.

Addestramento distribuito della CPU

Per eseguire l’addestramento della CPU su più istanze, imposta il parametro instance_count dello strumento di valutazione su un valore maggiore di uno. I dati di input devono essere suddivisi tra il numero totale di istanze.

Suddividi i dati di input tra le istanze

Suddividi i dati di input utilizzando le fasi seguenti:

  1. Suddividi i dati di input in file più piccoli. Il numero di file deve essere almeno uguale al numero di istanze utilizzate per l’addestramento distribuito. L'utilizzo di più file più piccoli anziché un unico file di grandi dimensioni riduce inoltre il tempo di download dei dati per il processo di addestramento.

  2. Quando crei il tuo TrainingInput, imposta il parametro di distribuzione su. ShardedByS3Key In questo modo, ogni istanza ottiene circa 1/n del numero di file in S3 se ci sono n istanze specificate nel processo di formazione.

Addestramento distribuito della GPU

Puoi utilizzare l’addestramento distribuito con istanze a GPU singola o multipla.

Addestramento distribuito con istanze a GPU singola

SageMaker Le versioni di XGBoost da 1.2-2 a 1.3-1 supportano solo l'addestramento su istanze a GPU singola. Ciò significa che anche se si seleziona un'istanza a GPU multipla, viene utilizzata solo una GPU per istanza.

È necessario dividere i dati di input tra il numero totale di istanze se:

  • Utilizzate le versioni di XGBoost da 1.2-2 a 1.3-1.

  • Non è necessario utilizzare istanze multi-GPU.

Per ulteriori informazioni, consulta Suddividi i dati di input tra le istanze.

Nota

Le versioni da 1.2-2 a 1.3-1 di SageMaker XGBoost utilizzano solo una GPU per istanza, anche se si sceglie un'istanza multi-GPU.

Addestramento distribuito con istanze a GPU multiple

A partire dalla versione 1.5-1, XGBoost offre formazione distribuita sulla GPU con Dask. SageMaker Con Dask puoi utilizzare tutte le GPU quando usi una o più istanze a GPU multiple. Dask funziona anche quando si utilizzano istanze a GPU singola.

Addestra con Dask utilizzando le fasi seguenti:

  1. Omettete il distribution parametro nel vostro o impostatelo su. TrainingInputFullyReplicated

  2. Quando definisci gli iperparametri, imposta use_dask_gpu_training su "true".

Importante

L’addestramento distribuito con Dask supporta solo i formati di input CSV e Parquet. Se si utilizzano altri formati di dati come LIBSVM o PROTOBUF, il processo di addestramento non fallisce.

Per i dati di Parquet, assicurati che i nomi delle colonne siano salvati come stringhe. Le colonne con nomi di altri tipi di dati non verranno caricate.

Importante

L’addestramento distrubuito con Dask non supporta la modalità pipe. Se viene specificata la modalità pipe, il processo di addestramento fallisce.

Ci sono alcune considerazioni da tenere a mente quando si allena SageMaker XGBoost con Dask. Assicurati di suddividere i dati in file più piccoli. Dask legge ogni file Parquet come una partizione. C'è un Dask worker per ogni GPU. Di conseguenza, il numero di file deve essere maggiore del numero totale di GPU (numero di istanze * numero di GPU per istanza). Avere un numero molto elevato di file può anche ridurre le prestazioni. Per ulteriori informazioni, consulta Best practice Dask.

Variazioni nell'output

L'iperparametro tree_method specificato determina l'algoritmo utilizzato per l’addestramento di XGBoost. I metodi ad albero approx, hist e gpu_hist sono tutti metodi approssimativi e utilizzano lo schizzo per il calcolo dei quantili. Per ulteriori informazioni, consulta Metodi ad albero nella documentazione di XGBoost. Lo schizzo è un algoritmo approssimativo. Pertanto, è possibile prevedere variazioni nel modello a seconda di fattori come il numero di worker scelti per l’addestramento distribuito. L'importanza della variazione dipende dai dati.

Inferenza

SageMaker XGBoost supporta istanze CPU e GPU per l'inferenza. Per informazioni sui tipi di istanza per l'inferenza, consulta Amazon SageMaker ML Instance Types.

Notebook di esempio XGBoost

La tabella seguente illustra una serie di notebook di esempio che riguardano diversi casi d'uso dell'algoritmo Amazon XGBoost. SageMaker

Titolo del notebook Descrizione

Come creare un container XGBoost personalizzato?

Questo notebook mostra come creare un contenitore XGBoost personalizzato con Amazon SageMaker Batch Transform.

Regressione con XGBoost utilizzando Parquet

Questo notebook mostra come utilizzare il set di dati Abalone in Parquet per addestrare un modello XGBoost.

Come eseguire l’addestramento e ospitare un modello di classificazione multiclasse?

Questo notebook mostra come utilizzare il set di dati MNIST per addestrare e ospitare un modello di classificazione multiclasse.

Come addestrare un modello per la previsione del tasso di abbandono dei clienti?

Questo notebook mostra come addestrare un modello Predict Mobile Customer Departure nel tentativo di identificare i clienti insoddisfatti.

Un'introduzione all'infrastruttura Amazon SageMaker Managed Spot per XGBoost Training

Questo notebook mostra come utilizzare le istanze spot per l’addestramento con un container XGBoost.

Come usare Amazon SageMaker Debugger per eseguire il debug dei lavori di formazione XGBoost?

Questo notebook mostra come usare Amazon SageMaker Debugger per monitorare i lavori di formazione e rilevare incongruenze utilizzando regole di debug integrate.

Per istruzioni su come creare e accedere alle istanze di notebook Jupyter che puoi usare per eseguire l'esempio, consulta. SageMaker Istanze Amazon SageMaker Notebook Dopo aver creato un'istanza di notebook e averla aperta, scegli la scheda SageMakerEsempi per visualizzare un elenco di tutti gli esempi. SageMaker I notebook di esempio di modellazione dell'argomento che utilizzano gli algoritmi Linear Learner sono disponibili nella sezione con l'introduzione agli algoritmi di Amazon. Per aprire un notebook, seleziona la relativa scheda Utilizza e scegli Crea copia.

Per ulteriori informazioni sull'algoritmo Amazon SageMaker XGBoost, consulta i seguenti post di blog: