Addestramento con l'impiego dell'algoritmo XGBoost distribuito integrato

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. Questa pagina spiega come funziona l'algoritmo XGBoost distribuito integrato e come utilizzarlo.

Panoramica

L'algoritmo XGBoost distribuito integrato è un wrapper per l'algoritmo XGBoost compatibile per l'esecuzione 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 consente anche di utilizzare le GPU per l'addestramento, il che può velocizzare il processo di addestramento.

AI Platform Training esegue l'addestramento utilizzando l'algoritmo XGBoost distribuito, basato sul set di dati e sui parametri del modello che hai fornito. L'attuale implementazione si basa sulla versione 0,81 di XGBoost.

Limitazioni

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

  • Pre-elaborazione. Questo algoritmo non supporta la pre-elaborazione automatica. Devi preparare manualmente i dati di addestramento e convalida in gruppi separati di file che soddisfino i requisiti descritti nella seguente sezione sulla formattazione dei dati di input.
  • Addestramento a replica singola. Questo algoritmo è progettato per utilizzare più macchine virtuali per l'addestramento. Utilizza l'algoritmo XGBoost integrato a replica singola se vuoi eseguire l'addestramento utilizzando una singola macchina virtuale.

Tipi di macchine supportati

Puoi utilizzare qualsiasi livello di scalabilità di AI Platform Training o una combinazione valida di tipi di macchine con questo algoritmo, purché la configurazione soddisfi i seguenti requisiti:

  • Specifica un worker principale e almeno un worker.
  • Per ottenere le migliori prestazioni, 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 maggiore di almeno il 20% rispetto alle dimensioni totali dei file dei dati di addestramento. Ciò consente alle macchine virtuali di caricare tutti i dati di addestramento in memoria e di utilizzare 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 master worker e i worker. Assicurati che il tipo di macchina specificato supporti la configurazione della GPU.
  • Non utilizzare TPU.

Formatta i dati di input

L'algoritmo XGBoost distribuito integrato funziona con dati tabulari numerici. Ogni riga di un set di dati rappresenta un'istanza e ogni colonna di un set di dati rappresenta un valore di funzionalità. La colonna di destinazione 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 ciascun file.
  • La colonna di destinazione deve essere la prima colonna.
  • 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 i dati di più file CSV quando invii un job di addestramento, utilizza i caratteri jolly nei percorsi Cloud Storage specificati per gli argomenti training_data_path e validation_data_path. Tutti i file CSV devono utilizzare lo stesso schema di colonna, in modo da soddisfare i requisiti descritti nella sezione precedente.

L'algoritmo XGBoost distribuito integrato distribuisce i dati di addestramento tra 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 principale carica il primo file CSV, il primo worker carica il secondo file CSV e così via. Questo metodo di assegnazione dei file avviene in loop 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 principale 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 di loop di istanze in modo che ogni macchina virtuale carichi approssimativamente lo 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 i dati 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 caricare i dati di convalida per istanza.

Per un rendimento ottimale, suddividi i dati di addestramento in più file CSV che soddisfano le seguenti linee guida:

  • Ogni file ha dimensioni 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 ti addestra con un master e due worker, il numero di file è un multiplo di 3.

Controlla le autorizzazioni dei bucket Cloud Storage

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

Utilizzo delle GPU

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

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

Scopri di più sul supporto di XGBoost per le GPU.

Invio di un job di addestramento XGBoost distribuito

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

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

L'esempio seguente presuppone che tu stia addestrando un classificatore in base ai dati del 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

Supponi che nessuno di questi file abbia righe di intestazione e che tu le abbia caricate in Cloud Storage. L'esempio crea un job di addestramento che utilizza tre macchine virtuali, ognuna delle quali utilizza una GPU NVIDIA Tesla P100. Il job viene eseguito nella regione us-central1.

Console Google Cloud

  1. Vai alla pagina Job di AI Platform Training nella console Google Cloud:

    Pagina dei job AI Platform Training

  2. Fai clic sul pulsante Nuovo job di addestramento. Dalle opzioni visualizzate di seguito, fai clic su Addestramento con algoritmi integrati.

  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 Cloud Storage dall'elenco a discesa. Utilizza il campo Percorso directory per selezionare la directory Cloud Storage che contiene 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 Cloud Storage dall'elenco a discesa. Utilizza il campo Percorso directory per selezionare la directory Cloud Storage che contiene 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 per archiviare l'output di addestramento. Fai clic su Avanti.

  7. Personalizza gli Argomenti dell'algoritmo per il job di addestramento o mantieni i valori predefiniti. Per saperne di più sugli argomenti, segui i link nella console Google Cloud e fai riferimento al riferimento XGBoost distribuito integrato. Fai clic su Avanti.

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

    Nell'elenco a discesa Livello bilancia, 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 tuo bucket che contiene i tuoi 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 utilizzando 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. Consulta 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