Addestramento con XGBoost su AI Platform Training

Il servizio di formazione di AI Platform Training gestisce le risorse di calcolo nel cloud per addestrare i tuoi modelli. Questa pagina descrive il processo per addestrare un modello XGBoost utilizzando AI Platform Training.

Questo tutorial addestra un modello semplice per prevedere il livello di reddito di una persona in base al set di dati sul reddito censito. Puoi creare un'applicazione di addestramento localmente, caricarla su Cloud Storage e inviare un job di addestramento. Il servizio di addestramento AI Platform Training scrive l'output nel bucket Cloud Storage e crea i log in Logging.

Questi contenuti sono disponibili anche su GitHub come blocco note Jupyter.

Come addestrare il tuo modello su AI Platform Training

Puoi addestrare il tuo modello su AI Platform Training in tre passaggi:

  • Crea il file del tuo modello Python.
    • Aggiungi codice per scaricare i dati da Cloud Storage in modo che AI Platform Training possa utilizzarlo
    • Aggiungi codice per esportare e salvare il modello in Cloud Storage dopo che AI Platform Training ha terminato
  • prepara un pacchetto di applicazioni di addestramento
  • invia il job di addestramento

Prima di iniziare

Completa i seguenti passaggi per configurare un account Google Cloud, attivare l'API AI Platform Training e installare e attivare Cloud SDK.

Configura il progetto Google Cloud

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API AI Platform Training & Prediction and Compute Engine.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Abilita le API AI Platform Training & Prediction and Compute Engine.

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

configura l'ambiente

Scegli una delle opzioni seguenti per configurare il tuo ambiente localmente su macOS o in un ambiente remoto su Cloud Shell.

Per gli utenti di macOS, consigliamo di configurare l'ambiente utilizzando la scheda MACOS riportata di seguito. Cloud Shell, mostrato nella scheda CLOUD SHELL, è disponibile su macOS, Linux e Windows. Cloud Shell offre un modo rapido per provare AI Platform Training, ma non è adatto per il lavoro di sviluppo continuo.

macOS

  1. Controlla l'installazione di Python
    Assicurati di aver installato Python e, se necessario, installalo.

    python -V
  2. Controlla l'installazione di pip
    pip è il gestore di pacchetti di Python, incluso nelle versioni attuali di Python. Verifica se pip è già installato eseguendo pip --version. In caso contrario, scopri come installare pip.

    Puoi eseguire l'upgrade di pip utilizzando il seguente comando:

    pip install -U pip

    Per ulteriori dettagli, consulta la documentazione pip.

  3. Installa virtualenv
    virtualenv è uno strumento per creare ambienti Python isolati. Controlla se virtualenv è già installato eseguendo virtualenv --version. In caso contrario, installa virtualenv:

    pip install --user --upgrade virtualenv

    Per creare un ambiente di sviluppo isolato per questa guida, crea un nuovo ambiente virtuale in virtualenv. Ad esempio, il comando seguente attiva un ambiente denominato aip-env:

    virtualenv aip-env
    source aip-env/bin/activate
  4. Ai fini di questo tutorial, esegui gli altri comandi all'interno del tuo ambiente virtuale.

    Leggi ulteriori informazioni sull'utilizzo di virtualenv. Per uscire da virtualenv, esegui deactivate.

Cloud Shell

  1. Apri la console Google Cloud.

    Console Google Cloud

  2. Fai clic sul pulsante Attiva Google Cloud Shell nella parte superiore della finestra della console.

    Attiva Google Cloud Shell

    All'interno di un nuovo frame nella parte inferiore della console si apre una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. L'inizializzazione della sessione della shell può richiedere alcuni secondi.

    Sessione di Cloud Shell

    La sessione Cloud Shell è pronta per l'uso.

  3. Configura lo strumento a riga di comando gcloud per utilizzare il progetto selezionato.

    gcloud config set project [selected-project-id]

    dove [selected-project-id] è l'ID progetto. (Ometti le parentesi che lo contengono.)

Installa framework

macOS

All'interno del tuo ambiente virtuale, esegui questo comando per installare le versioni di scikit-learn, XGBoost e pandas utilizzate nella versione 2.11 di AI Platform Training:

(aip-env)$ pip install scikit-learn==1.0.2 xgboost==1.6.2 pandas==1.3.5

Se fornisci i numeri di versione nel comando precedente, ti assicuri che le dipendenze nel tuo ambiente virtuale corrispondano a quelle nella versione del runtime. Ciò aiuta a prevenire comportamenti imprevisti quando il codice viene eseguito su AI Platform Training.

Per ulteriori dettagli, opzioni di installazione e informazioni sulla risoluzione dei problemi, consulta le istruzioni di installazione per ciascun framework:

Cloud Shell

Esegui questo comando per installare scikit-learn, XGBoost e pandas:

pip install --user scikit-learn xgboost pandas

Per ulteriori dettagli, opzioni di installazione e informazioni sulla risoluzione dei problemi, consulta le istruzioni di installazione per ciascun framework:

Configura il bucket Cloud Storage

Per archiviare il codice di addestramento e le dipendenze, devi avere un bucket Cloud Storage. Ai fini di questo tutorial, è il modo più semplice per utilizzare un bucket Cloud Storage dedicato nello stesso progetto che utilizzi per AI Platform Training.

Se utilizzi un bucket in un altro progetto, devi assicurarti che l'account di servizio AI Platform Training possa accedere al codice di addestramento e alle dipendenze in Cloud Storage. Senza le autorizzazioni appropriate, il job di addestramento ha esito negativo. Scopri come concedere autorizzazioni per l'archiviazione.

Assicurati di utilizzare o configurare un bucket nella stessa regione che utilizzi per eseguire i job di addestramento. Vedi le regioni disponibili per i servizi di AI Platform Training.

Questa sezione mostra come creare un nuovo bucket. Puoi utilizzare un bucket esistente, ma deve trovarsi nella stessa regione in cui prevedi di eseguire job AI Platform. Inoltre, se non fa parte del progetto che stai utilizzando per eseguire AI Platform Training, devi concedere esplicitamente l'accesso agli account di servizio di AI Platform Training.

  1. Specifica un nome per il nuovo bucket. Il nome deve essere univoco in tutti i bucket in Cloud Storage.

    BUCKET_NAME="YOUR_BUCKET_NAME"

    Ad esempio, utilizza il nome del progetto con l'aggiunta di -aiplatform:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. Controlla il nome del bucket che hai creato.

    echo $BUCKET_NAME
  3. Seleziona una regione per il bucket e imposta una variabile di ambiente REGION.

    Utilizza la stessa regione in cui prevedi di eseguire job di AI Platform Training. Consulta le regioni disponibili per i servizi di AI Platform Training.

    Ad esempio, il seguente codice crea REGION e lo imposta su us-central1:

    REGION=us-central1
  4. Crea il nuovo bucket:

    gsutil mb -l $REGION gs://$BUCKET_NAME

Informazioni sui dati

Il set di dati sul reddito da censimento utilizzato in questo esempio per l'addestramento è ospitato dall'UC Irvine Machine Learning Repository.

Dati del censimento gentilmente concessi da: Lichman, M. (2013); Repository di machine learning UCI http://archive.ics.uci.edu/ml. Irvine, California: University of California, School of Information and Computer Science. Questo set di dati è disponibile pubblicamente per l'utilizzo in base ai seguenti termini forniti dall'origine del set di dati: http://archive.ics.uci.edu/ml e viene fornito "così com'è", senza alcuna garanzia, espressa o implicita, da parte di Google. Google esclude qualsiasi responsabilità per eventuali danni, diretti o indiretti, derivanti dall'uso del set di dati.

Per praticità, abbiamo ospitato i dati in un bucket Cloud Storage pubblico: gs://cloud-samples-data/ai-platform/sklearn/census_data/, che puoi scaricare all'interno del file di addestramento Python.

Crea il file del modello Python

Puoi trovare tutto il codice di addestramento per questa sezione su GitHub: train.py.

Il resto di questa sezione fornisce una spiegazione della funzione del codice di addestramento.

Configurazione

Importa le seguenti librerie da Python, Google Cloud CLI, XGBoost e scikit-learn. Imposta una variabile per il nome del bucket Cloud Storage.

import xgboost as xgb
import pandas as pd
from sklearn.preprocessing import LabelEncoder
import subprocess
from google.cloud import storage

# Fill in your Cloud Storage bucket name
BUCKET_ID = <YOUR_BUCKET_NAME>

Scaricare i dati da Cloud Storage

Durante il tipico processo di sviluppo, carichi i tuoi dati in Cloud Storage in modo che AI Platform Training possa accedervi. I dati per questo tutorial sono ospitati in un bucket pubblico: gs://cloud-samples-data/ai-platform/sklearn/census_data/

Il codice seguente scarica il set di dati di addestramento adult.data. I dati di valutazione sono disponibili in adult.test, ma non vengono utilizzati in questo tutorial.

census_data_filename = 'adult.data.csv'

# Public bucket holding the census data
bucket = storage.Client().bucket('cloud-samples-data')

# Path to the data inside the public bucket
data_dir = 'ai-platform/census/data/'

# Download the data
blob = bucket.blob(''.join([data_dir, census_data_filename]))
blob.download_to_filename(census_data_filename)

Aggiungi il codice del tuo modello

Il codice di addestramento del modello prevede alcuni passaggi di base:

  • Definisci e carica i dati
  • Convertire gli elementi categorici in elementi numerici
  • Estrai caratteristiche numeriche con una pipeline scikit-learn
  • Esporta e salva il modello in Cloud Storage

Definisci e carica i dati


# these are the column labels from the census data files
COLUMNS = (
    'age',
    'workclass',
    'fnlwgt',
    'education',
    'education-num',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'capital-gain',
    'capital-loss',
    'hours-per-week',
    'native-country',
    'income-level'
)
# categorical columns contain data that need to be turned into numerical values before being used by XGBoost
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)

# Load the training census dataset
with open(census_data_filename, 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)
# remove column we are trying to predict ('income-level') from features list
train_features = raw_training_data.drop('income-level', axis=1)
# create training labels list
train_labels = (raw_training_data['income-level'] == ' >50K')

Convertire gli elementi categorici in elementi numerici

# Since the census data set has categorical features, we need to convert
# them to numerical values.
# convert data in categorical columns to numerical values
encoders = {col:LabelEncoder() for col in CATEGORICAL_COLUMNS}
for col in CATEGORICAL_COLUMNS:
    train_features[col] = encoders[col].fit_transform(train_features[col])

Addestra, esporta e salva il modello in Cloud Storage

# load data into DMatrix object
dtrain = xgb.DMatrix(train_features, train_labels)
# train model
bst = xgb.train({}, dtrain, 20)

Se il bucket Cloud Storage si trova nello stesso progetto che utilizzi per AI Platform Training, AI Platform Training potrà leggere e scrivere nel bucket. In caso contrario, devi assicurarti che il progetto che utilizzi per eseguire AI Platform Training possa accedere al bucket Cloud Storage. Scopri come concedere autorizzazioni per lo spazio di archiviazione.

Assicurati di assegnare al file del modello il nome model.pkl, model.joblib o model.bst se vuoi utilizzarlo per richiedere previsioni online con AI Platform Prediction.

# Export the model to a file
model = 'model.bst'
bst.save_model(model)

# Upload the model to GCS
bucket = storage.Client().bucket(BUCKET_ID)
blob = bucket.blob('{}/{}'.format(
    datetime.datetime.now().strftime('census_%Y%m%d_%H%M%S'),
    model))
blob.upload_from_filename(model)

(Facoltativo) Verificare il caricamento del file del modello in Cloud Storage

Nella riga di comando, visualizza i contenuti della cartella del modello di destinazione per verificare che il file del modello sia stato caricato in Cloud Storage. Imposta una variabile di ambiente (BUCKET_ID) per il nome del bucket, se non l'hai già fatto.

gsutil ls gs://$BUCKET_ID/census_*

L'output dovrebbe essere simile al seguente:

gs://[YOUR-PROJECT-ID]/census_[DATE]_[TIME]/model.bst

Crea pacchetto di applicazioni di addestramento

Il modo più semplice (e consigliato) per creare un pacchetto di applicazioni di addestramento utilizza gcloud per pacchettizzare e caricare l'applicazione quando invii il job di addestramento. Questo metodo consente di creare una struttura di file molto semplice con solo due file. Per questo tutorial, la struttura dei file del pacchetto dell'applicazione di addestramento dovrebbe essere simile alla seguente:

census_training/
    __init__.py
    train.py
  1. Crea una directory in locale:

    mkdir census_training
    
  2. Crea un file vuoto denominato __init__.py:

    touch census_training/__init__.py
    
  3. Salva il codice di addestramento in un unico file Python, quindi salva il file all'interno della directory census_training. Vedi il codice di esempio per train.py. Puoi utilizzare cURL per scaricare e salvare il file:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/notebooks/census_training/train.py > census_training/train.py
    

Scopri di più sulla presentazione di un'applicazione di addestramento.

Invia job di addestramento

In questa sezione utilizzerai gcloud ai-platform jobs submit training per inviare il job di addestramento.

Specifica i parametri del job di addestramento

Imposta le seguenti variabili di ambiente per ogni parametro nella richiesta di job di addestramento:

  • PROJECT_ID: utilizza il PROJECT_ID che corrisponde al tuo progetto Google Cloud.
  • BUCKET_ID: il nome del tuo bucket Cloud Storage.
  • JOB_NAME: un nome da utilizzare per il job (solo lettere maiuscole e minuscole, numeri e trattini bassi, che iniziano con una lettera). In questo caso: census_training_$(date +"%Y%m%d_%H%M%S")
  • JOB_DIR: il percorso di una località Cloud Storage da utilizzare per i file di output del job di addestramento. Ad esempio, gs://$BUCKET_ID/xgboost_job_dir.
  • TRAINING_PACKAGE_PATH: il percorso locale della directory root dell'applicazione di addestramento. In questo caso: ./census_training/.
  • MAIN_TRAINER_MODULE - Specifica il file che deve essere eseguito dal servizio di addestramento AI Platform Training. Il formato è [YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]. In questo caso, census_training.train.
  • REGION: il nome della regione che utilizzi per eseguire il job di addestramento. Utilizza una delle regioni disponibili per il servizio di formazione di AI Platform Training. Assicurati che il bucket Cloud Storage si trovi nella stessa regione. Questo tutorial utilizza us-central1.
  • RUNTIME_VERSION: devi specificare una versione del runtime di AI Platform Training che supporti scikit-learn. In questo esempio, 2.11.
  • PYTHON_VERSION: la versione Python da utilizzare per il job. Per questo tutorial, specifica Python 3.7.
  • SCALE_TIER: una specifica predefinita del cluster per le macchine su cui eseguire il job di addestramento. In questo caso, BASIC. Puoi anche utilizzare livelli di scalabilità personalizzati per definire la tua configurazione del cluster per l'addestramento.

Per comodità, le variabili di ambiente per questo tutorial sono riportate di seguito. Sostituisci [VALUES-IN-BRACKETS] con i valori appropriati:

PROJECT_ID=[YOUR-PROJECT-ID]
BUCKET_ID=[YOUR-BUCKET-ID]
JOB_NAME=census_training_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://$BUCKET_ID/xgboost_job_dir
TRAINING_PACKAGE_PATH="[YOUR-LOCAL-PATH-TO-TRAINING-PACKAGE]/census_training/"
MAIN_TRAINER_MODULE=census_training.train
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC

Invia la richiesta:

gcloud ai-platform jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--package-path $TRAINING_PACKAGE_PATH \
--module-name $MAIN_TRAINER_MODULE \
--region $REGION \
--runtime-version=$RUNTIME_VERSION \
--python-version=$PYTHON_VERSION \
--scale-tier $SCALE_TIER

Dovresti vedere un output simile al seguente:

Job [census_training_[DATE]_[TIME]] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe census_training_20180718_160825

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs census_training_[DATE]_[TIME]
jobId: census_training_[DATE]_[TIME]
state: QUEUED

(Facoltativo) Visualizzazione dei log di addestramento

AI Platform Training acquisisce tutti i flussi stdout e stderr e le istruzioni di logging. Questi log, archiviati in Logging, sono visibili durante e dopo l'esecuzione.

Per visualizzare i log per il job di addestramento:

Console

  1. Apri la pagina Job di AI Platform Training.

    Apri job nella console Google Cloud

  2. Seleziona il nome del job di addestramento da ispezionare. Viene visualizzata la pagina Dettagli job per il job di addestramento selezionato.

  3. Nei dettagli del job, seleziona il link Visualizza log. Viene visualizzata la pagina Logging, dove puoi cercare e filtrare i log per il job di addestramento selezionato.

gcloud

Puoi visualizzare i log nel tuo terminale con gcloud ai-platform jobs stream-logs.

gcloud ai-platform jobs stream-logs $JOB_NAME

Passaggi successivi