Addestramento con l'impiego dell'algoritmo XGBoost distribuito integrato

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

L'addestramento con algoritmi integrati in AI Platform Training ti consente di inviare il tuo set di dati e addestrare un modello senza scrivere codice di addestramento. In questa pagina viene spiegato come funziona l'algoritmo XGBoost distribuito integrato e come utilizzarlo.

Panoramica

L'algoritmo XGBoost distribuito integrato è un wrapper per l'algoritmo XGBoost che è compatibile per essere eseguito su AI Platform Training.

A differenza dell'algoritmo XGBoost integrato a replica singola, questo algoritmo consente di utilizzare più macchine virtuali in parallelo per l'addestramento su set di dati di grandi dimensioni. Questo algoritmo ti consente anche di utilizzare le GPU per l'addestramento, che possono velocizzare il processo di addestramento.

AI Platform Training esegue l'addestramento utilizzando l'algoritmo XGBoost distribuito in base al tuo set di dati e ai parametri del modello che hai fornito. L'implementazione attuale si basa sulla versione 0.81 di XGBoost.

Limitazioni

Le seguenti funzionalità non sono supportate per l'addestramento con l'algoritmo XGBoost distribuito integrato:

Tipi di macchine supportati

Con questo algoritmo puoi utilizzare qualsiasi livello di scalabilità di AI Platform Training o una combinazione valida di tipi di macchine, a condizione che la configurazione soddisfi i seguenti requisiti:

  • Specifica un worker master e almeno un worker.
  • Per ottenere prestazioni ottimali, specifica lo stesso tipo di macchina per il worker master e per i worker.
  • Non specificare alcun server dei parametri.
  • Assicurati che la memoria totale delle macchine virtuali specificate sia almeno il 20% maggiore delle dimensioni totali dei file dei dati di addestramento. Questo consente alle macchine virtuali di caricare tutti i dati di addestramento in memoria e utilizzare anche memoria aggiuntiva per l'addestramento.
  • Se usi le GPU, assicurati che ogni macchina virtuale utilizzi una sola GPU e utilizza lo stesso tipo di GPU per il worker master e per i worker. Assicurati che il tipo di macchina specificato supporti la configurazione GPU.
  • Non utilizzare alcuna TPU.

Formatta i dati di input

L'algoritmo XGBoost distribuito integrato funziona sui dati tabulari numerici. Ogni riga di un set di dati rappresenta un'istanza e ogni colonna di un set di dati rappresenta un valore della funzionalità. La colonna target rappresenta il valore che vuoi prevedere.

Preparare i file CSV

I dati di input devono essere uno o più file CSV con codifica UTF-8. Ogni file deve soddisfare i seguenti requisiti:

  • I file CSV non devono avere una riga di intestazione. Se i file CSV contengono righe di intestazione che etichettano ogni colonna, rimuovi questa prima riga da ogni file.
  • La colonna target deve essere la prima.
  • Per i job di addestramento di classificazione, la colonna di destinazione può contenere valori non numerici. Tutte le altre colonne devono contenere solo dati numerici.
  • Per i job di addestramento di regressione, normalizza i valori target in modo che ogni valore sia compreso tra 0 e 1. Tutte le altre colonne devono contenere solo dati numerici.

Suddividi i dati per l'addestramento distribuito

Per fornire dati da più file CSV quando invii un job di addestramento, utilizza i caratteri jolly nei percorsi di Cloud Storage specificati per gli argomenti training_data_path evalidation_data_path. Tutti i file CSV devono utilizzare lo stesso schema di colonna, soddisfacendo i requisiti descritti nella sezione precedente.

L'algoritmo integrato XGBoost distribuito distribuisce i tuoi dati di addestramento su macchine virtuali in uno dei seguenti modi:

  • Se il numero di file CSV è maggiore o uguale al numero di macchine virtuali,l'algoritmo distribuisce i dati per file in ordine round robin. In altre parole, il worker master carica il primo file CSV, il primo carica il secondo file CSV e così via. Questo metodo di assegnazione dei file si ripete in modo che ogni macchina virtuale carichi all'incirca lo stesso numero di file.

  • Se il numero di file CSV è inferiore al numero di macchine virtuali, l'algoritmo distribuisce i dati per istanza in ordine round robin. In altre parole, il worker master carica la prima riga di ogni file CSV, il primo worker carica la seconda riga di ogni file CSV e così via. Questo metodo di assegnazione delle istanze viene eseguito in modo che le macchine virtuali vengano caricate all'incirca allo stesso numero di istanze.

Se specifichi l'argomento validation_data_path, l'algoritmo carica anche i dati di convalida in uno di questi modi. Tuttavia, tieni presente che l'algoritmo carica i dati di addestramento e di convalida in modo indipendente. Ad esempio, se fornisci molti file di dati di addestramento ma un solo file di dati di convalida, l'algoritmo potrebbe caricare i dati di addestramento per file e caricarli per istanza.

Per ottimizzare le prestazioni, suddividi i dati di addestramento in più file CSV che soddisfino le seguenti linee guida:

  • Le dimensioni di ogni file sono inferiori a 1 GB.
  • Ogni file contiene all'incirca lo stesso numero di istanze.
  • Il numero di file è divisibile per il numero totale di macchine virtuali. Ad esempio, se esegui l'addestramento con un master e due worker, il numero di file è un multiplo di 3.

Verifica le autorizzazioni dei bucket Cloud Storage

Per archiviare i dati, utilizza un bucket Cloud Storage nello stesso progetto Google Cloud che utilizzi per eseguire i job di AI Platform Training. In caso contrario, concedi l'accesso ad AI Platform Training al bucket Cloud Storage in cui sono archiviati i tuoi dati.

Utilizzo delle GPU

Come descritto nella sezione precedente sui tipi di macchina, l'algoritmo XGBoost distribuito integrato supporta l'utilizzo di una singola GPU per macchina virtuale per l'addestramento.

Per utilizzare le GPU, imposta l'iperparametro tree_method su gpu_exact o gpu_hist quando invii il job di addestramento.

Scopri di più sul supporto delle GPU di XGBoost.

Inviare un job di addestramento XGBoost distribuito

Questa sezione spiega come inviare un job di addestramento distribuito di XGBoost integrato. Utilizza la console Google Cloud o Google Cloud CLI per inviare il tuo job.

Puoi trovare descrizioni complete di iperparametri e altri argomenti che puoi modificare per questo algoritmo nel riferimento per l'algoritmo XGBoost integrato e distribuito.

L'esempio seguente presuppone che tu stia addestrando un classificatore in base ai dati sul censimento che hai suddiviso in tre file di dati di addestramento e tre file di dati di convalida:

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

Supponiamo che nessuno di questi file abbia righe di intestazione e che li hai caricati in Cloud Storage. L'esempio crea un job di addestramento che utilizza tre macchine virtuali, ciascuna delle quali utilizza una GPU NVIDIA P100. Il job viene eseguito nella regione us-central1.

console Google Cloud

  1. Vai alla pagina Job di AI Platform Training in Google Cloud Console:

    Pagina dei job di addestramento di AI Platform

  2. Fai clic sul pulsante Nuovo job di addestramento. Dalle opzioni visualizzate di seguito, fai clic su Formazione sull'algoritmo integrata.

  3. Nella pagina Crea un nuovo job di addestramento, apri l'elenco a discesa Seleziona un algoritmo e seleziona Distributed XGBoost. Fai clic su Avanti.

  4. Nella sezione Dati di addestramento, seleziona Utilizza più file archiviati in una directory di Cloud Storage dall'elenco a discesa. Utilizza il campo Percorso directory per selezionare la directory di Cloud Storage contenente i file di addestramento. Nel campo Nome carattere jolly, inserisci train-*.csv.

  5. Nella sezione Dati di convalida (facoltativo), seleziona Utilizza più file archiviati in una directory di Cloud Storage dall'elenco a discesa. Utilizza il campo Percorso directory per selezionare la directory di Cloud Storage contenente i file di convalida. Nel campo Nome carattere jolly, inserisci eval-*.csv.

  6. Nella sezione Output di addestramento, utilizza il campo Directory di output per selezionare una directory separata nel bucket Cloud Storage in cui archiviare gli output di addestramento. Fai clic su Avanti.

  7. Personalizza gli argomenti degli algoritmi per il tuo job di addestramento o mantieni i valori predefiniti. Per saperne di più sugli argomenti, segui i link nella console Google Cloud e consulta il riferimento XGBoost distribuito integrato. Fai clic su Avanti.

  8. Inserisci un nome a tua scelta nel campo ID job. Nell'elenco a discesa Area geografica, seleziona us-central1.

    Nell'elenco a discesa Livello di scalabilità, seleziona CUSTOM. Nella sezione Configurazione cluster personalizzato, seleziona standard_p100 negli elenchi a discesa Tipo di master e Tipo di worker. Nel campo Conteggio worker, inserisci 2. Fai clic su Fine.

  9. Nella pagina Job, fai clic sull'ID del nuovo job per visualizzarne la pagina Dettagli job. Quindi, fai clic su Visualizza log per visualizzare i log di addestramento.

Strumento gcloud

  1. Imposta le variabili di ambiente per il job, sostituendo BUCKET con il nome del tuo bucket Cloud Storage e DATA_DIRECTORY con il percorso della directory nel bucket che contiene i dati:

    # 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. Invia il job di addestramento con il comando 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. Monitora lo stato del job di addestramento visualizzando i log con gcloud. Fai riferimento a gcloud ai-platform jobs describe e gcloud ai-platform jobs stream-logs.

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

Passaggi successivi