Addestra un modello ML con scikit-learn e XGBoost

Il servizio AI Platform Training gestisce le risorse di calcolo nel cloud per addestrare i modelli. Questa pagina descrive la procedura per addestrare un modello scikit-learn e XGBoost utilizzando AI Platform Training.

Panoramica

In questo tutorial imparerai ad addestrare un modello semplice per prevedere le specie di fiori, utilizzando il set di dati Iris. Dopo Regolare il codice di addestramento del modello per scaricare i dati da Cloud Storage. e caricare in Cloud Storage il file del modello salvato, crei un e utilizzarlo per eseguire l'addestramento e AI Platform Training.

Come addestrare il tuo modello su AI Platform Training

Dopo aver completato la procedura di configurazione iniziale, puoi addestrare il tuo modello su AI Platform Training in tre passaggi:

  • Crea il modulo di addestramento Python
    • Aggiungi il codice per scaricare i tuoi dati da Cloud Storage in modo che AI Platform Training può usarlo
    • Aggiungi il codice per esportare e salvare il modello in Cloud Storage dopo AI Platform Training termina l'addestramento del modello
  • prepara un pacchetto dell'applicazione di addestramento
  • Invia il job di addestramento

Il processo di configurazione iniziale include la creazione di un progetto Google Cloud, l'abilitazione fatturazione e API, configurazione di un bucket Cloud Storage da utilizzare con AI Platform Training e installazione locale di scikit-learn o XGBoost. Se hai già configurato e installato tutto, passa a creazione del codice di addestramento del modello.

Prima di iniziare

Completa i seguenti passaggi per configurare un account Google Cloud, attiva il 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Configura l'ambiente

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

Per gli utenti di macOS, consigliamo di configurare l'ambiente utilizzando MACOS sotto. Cloud Shell, mostrato nella scheda CLOUD SHELL, disponibile su macOS, Linux e Windows. Cloud Shell offre un modo rapido provare AI Platform Training, ma non è adatta per attività di sviluppo continue.

macOS

  1. Controlla l'installazione di Python
    Conferma di avere Python installato e, se necessario, installarlo.

    python -V
  2. Controlla l'installazione di pip
    pip è il gestore di pacchetti di Python, incluso nelle versioni correnti di Python. Esegui l'operazione per verificare se hai già installato pip pip --version. In caso contrario, scopri come installare pip.

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

    pip install -U pip

    Consulta la documentazione pip per ulteriori dettagli.

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

    pip install --user --upgrade virtualenv

    Per creare un ambiente di sviluppo isolato per questa guida, crea una nuova in virtualenv. Ad esempio, 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 completamente gestito di Google Cloud.

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

Cloud Shell

  1. Apri la console Google Cloud.

    Console Google Cloud

  2. Fai clic sul pulsante Attiva Google Cloud Shell in alto. della finestra della console.

    Attiva Google Cloud Shell

    Una sessione di Cloud Shell si apre all'interno di un nuovo frame nella parte inferiore e visualizza un prompt della riga di comando. L'operazione può richiedere alcuni secondi per inizializzare la sessione di shell.

    sessione Cloud Shell

    La sessione di Cloud Shell è pronta per essere utilizzata.

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

    gcloud config set project [selected-project-id]

    dove [selected-project-id] è l'ID progetto. (Ometti tra parentesi quadre che racchiudono il testo.

Installa framework

macOS

Nell'ambiente virtuale, esegui questo comando per installare le versioni di scikit-learn, XGBoost e pandas utilizzate in AI Platform Training versione runtime 2,11

(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 il parametro delle dipendenze nel tuo ambiente virtuale corrispondano di runtime. Ciò aiuta a evitare comportamenti imprevisti quando il codice viene eseguito in AI Platform Training.

Per ulteriori dettagli, opzioni di installazione e informazioni sulla risoluzione dei problemi, consulta le istruzioni di installazione per ogni 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 ogni framework:

Configura il tuo bucket Cloud Storage

Avrai bisogno di un bucket Cloud Storage in cui archiviare il codice di delle dipendenze. Ai fini di questo tutorial, è più semplice utilizzare un un bucket Cloud Storage dedicato nello stesso progetto che stai utilizzando e AI Platform Training.

Se stai utilizzando un bucket in un altro progetto, garantire che l'account di servizio AI Platform Training possa accedere il codice di addestramento e le dipendenze in Cloud Storage. Senza l'appropriata autorizzazioni, il job di addestramento non va a buon fine. Scopri come concedere autorizzazioni per l'archiviazione.

Assicurati di utilizzare o configurare un bucket nella stessa regione che usi per l'esecuzione di addestramento. Scopri le regioni in cui è disponibile per e i servizi di AI Platform Training.

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

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

    BUCKET_NAME="YOUR_BUCKET_NAME"

    Ad esempio, utilizza il nome del progetto aggiungendo -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 AI Platform Training di lavoro. Scopri le regioni in cui è disponibile per e 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:

    gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION

Crea il modulo di addestramento Python

Crea un file, iris_training.py, contenente il codice per addestrare il modello. Questa sezione fornisce una spiegazione di ciò che ogni parte del codice di addestramento :

  • Configurazione e importazioni
  • Scarica i dati da Cloud Storage
  • Carica dati in Pandas
  • Addestra e salva il modello
  • Carica il file del modello salvato in Cloud Storage

Per praticità, il codice completo di iris_training.py è ospitato su GitHub puoi usarlo per questo tutorial:

Configurazione

Importa le seguenti librerie da Python e scikit-learn o XGBoost. Imposta un per il nome del bucket Cloud Storage.

scikit-learn

import datetime
import os
import subprocess
import sys
import pandas as pd
from sklearn import svm
from sklearn.externals import joblib

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

XGBoost

import datetime
import os
import subprocess
import sys
import pandas as pd
import xgboost as xgb

# Fill in your Cloud Storage bucket name
BUCKET_NAME = '<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 è ospitata in un bucket Cloud Storage pubblico: gs://cloud-samples-data/ai-platform/iris/

Il seguente codice scarica i dati utilizzando gsutil e poi li devia dalle ore gsutil alle ore stdout:

scikit-learn

iris_data_filename = 'iris_data.csv'
iris_target_filename = 'iris_target.csv'
data_dir = 'gs://cloud-samples-data/ml-engine/iris'

# gsutil outputs everything to stderr so we need to divert it to stdout.
subprocess.check_call(['gsutil', 'cp', os.path.join(data_dir,
                                                    iris_data_filename),
                       iris_data_filename], stderr=sys.stdout)
subprocess.check_call(['gsutil', 'cp', os.path.join(data_dir,
                                                    iris_target_filename),
                       iris_target_filename], stderr=sys.stdout)

XGBoost

iris_data_filename = 'iris_data.csv'
iris_target_filename = 'iris_target.csv'
data_dir = 'gs://cloud-samples-data/ai-platform/iris'

# gsutil outputs everything to stderr so we need to divert it to stdout.
subprocess.check_call(['gsutil', 'cp', os.path.join(data_dir,
                                                    iris_data_filename),
                       iris_data_filename], stderr=sys.stdout)
subprocess.check_call(['gsutil', 'cp', os.path.join(data_dir,
                                                    iris_target_filename),
                       iris_target_filename], stderr=sys.stdout)

Carica dati in Pandas

Usa Pandas per caricare i dati in array NumPy per l'addestramento con scikit-learn o XGBoost.

scikit-learn

# Load data into pandas, then use `.values` to get NumPy arrays
iris_data = pd.read_csv(iris_data_filename).values
iris_target = pd.read_csv(iris_target_filename).values

# Convert one-column 2D array into 1D array for use with scikit-learn
iris_target = iris_target.reshape((iris_target.size,))

XGBoost

# Load data into pandas, then use `.values` to get NumPy arrays
iris_data = pd.read_csv(iris_data_filename).values
iris_target = pd.read_csv(iris_target_filename).values

# Convert one-column 2D array into 1D array for use with XGBoost
iris_target = iris_target.reshape((iris_target.size,))

Addestra e salva un modello

Crea un modulo di addestramento per l'esecuzione di AI Platform Training. In questo esempio, addestra un modello sulla base dei dati di addestramento di Iris (iris_data e iris_target) e salva il modello addestrato esportandolo in un file. Se vuoi utilizzare AI Platform Prediction per ottenere previsioni online dopo l'addestramento, devi assegnare un nome al file del modello in base alla libreria che usi per esportarlo. Consulta scopri di più sui requisiti di denominazione per del modello.

scikit-learn

Seguendo le esempio di scikit-learn sulla persistenza del modello, puoi addestrare ed esportare un modello come mostrato di seguito:

# Train the model
classifier = svm.SVC(gamma='auto', verbose=True)
classifier.fit(iris_data, iris_target)

# Export the classifier to a file
model_filename = 'model.joblib'
joblib.dump(classifier, model_filename)

Per esportare il modello, puoi anche utilizzare lettura di pickle come segue:

import pickle
with open('model.pkl', 'wb') as model_file:
  pickle.dump(classifier, model_file)

XGBoost

Puoi esportare il modello utilizzando &quot;save_model&quot; dell'oggetto Booster.

# Load data into DMatrix object
dtrain = xgb.DMatrix(iris_data, label=iris_target)

# Train XGBoost model
bst = xgb.train({}, dtrain, 20)

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

Per esportare il modello, puoi anche utilizzare lettura di pickle come segue:

import pickle
with open('model.pkl', 'wb') as model_file:
  pickle.dump(bst, model_file)

Requisiti di denominazione dei file del modello

Per la previsione online, il file del modello salvato Cloud Storage deve essere denominato model.pkl, model.joblib oppure model.bst, a seconda della libreria utilizzata. Questa restrizione garantisce che AI Platform Prediction utilizza lo stesso pattern di ricostruire il modello al momento dell'importazione utilizzate durante l'esportazione.

Questo requisito non si applica se crei una previsione personalizzata (beta).

scikit-learn

Libreria utilizzata per esportare il modello Nome modello corretto
pickle model.pkl
sklearn.externals.joblib model.joblib

XGBoost

Libreria utilizzata per esportare il modello Nome modello corretto
pickle model.pkl
joblib model.joblib
xgboost.Booster model.bst

Per le future iterazioni del modello, organizza il bucket Cloud Storage in modo che che ogni nuovo modello ha una directory dedicata.

Carica il modello salvato in Cloud Storage

Se utilizzi un bucket Cloud Storage al di fuori di Google Cloud progetto che stai utilizzando per eseguire AI Platform Training, assicurati che AI Platform Training abbia accesso al tuo bucket.

scikit-learn

# Upload the saved model file to Cloud Storage
gcs_model_path = os.path.join('gs://', BUCKET_NAME,
    datetime.datetime.now().strftime('iris_%Y%m%d_%H%M%S'), model_filename)
subprocess.check_call(['gsutil', 'cp', model_filename, gcs_model_path],
    stderr=sys.stdout)

XGBoost

# Upload the saved model file to Cloud Storage
gcs_model_path = os.path.join('gs://', BUCKET_NAME,
    datetime.datetime.now().strftime('iris_%Y%m%d_%H%M%S'), model_filename)
subprocess.check_call(['gsutil', 'cp', model_filename, gcs_model_path],
    stderr=sys.stdout)

Crea pacchetto dell'applicazione di addestramento

Con iris_training.py creato dagli snippet precedenti, crea un corso di formazione pacchetto dell'applicazione che include iris_training.py come modulo principale.

Il modo più semplice (e consigliato) per creare un pacchetto di un'applicazione di addestramento gcloud per pacchettizzare e caricare la domanda quando invii la formazione un lavoro. Questo metodo richiede la creazione di una struttura di file molto semplice con due file:

scikit-learn

Per questo tutorial, la struttura dei file della tua applicazione di addestramento dovrebbe avere un aspetto simile al seguente:

iris_sklearn_trainer/
    __init__.py
    iris_training.py
  1. Nella riga di comando, crea una directory in locale:

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

    touch iris_sklearn_trainer/__init__.py
    
  3. Salva il codice di addestramento come iris_training.py e salva il file all'interno della directory iris_sklearn_trainer. In alternativa, utilizza cURL per scaricare e salvare il file da GitHub:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/iris_training.py > iris_sklearn_trainer/iris_training.py
    

    Visualizza il codice sorgente completo su GitHub.

  4. Verifica che il pacchetto dell'applicazione di addestramento sia configurato correttamente:

    ls ./iris_sklearn_trainer
      __init__.py  iris_training.py
    

XGBoost

Per questo tutorial, la struttura dei file della tua applicazione di addestramento dovrebbe avere un aspetto simile al seguente:

iris_xgboost_trainer/
    __init__.py
    iris_training.py
  1. Nella riga di comando, crea una directory in locale:

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

    touch iris_xgboost_trainer/__init__.py
    
  3. Salva il codice di addestramento come iris_training.py e salva il file all'interno della directory iris_xgboost_trainer. In alternativa, utilizza cURL per scaricare e salvare il file da GitHub:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/xgboost/iris_training.py > iris_xgboost_trainer/iris_training.py
    

    Visualizza il codice sorgente completo su GitHub.

  4. Verifica che il pacchetto dell'applicazione di addestramento sia configurato correttamente:

    ls ./iris_xgboost_trainer
      __init__.py  iris_training.py
    

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

Esegui trainer in locale

Puoi testare la tua applicazione di addestramento in locale utilizzando gcloud ai-platform local train . Questo passaggio è facoltativo, ma è utile per il debug.

scikit-learn

Nella riga di comando, imposta le seguenti variabili di ambiente: sostituendo [VALUES-IN-BRACKETS] con i valori appropriati:

TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"

Testa il job di addestramento a livello locale:

gcloud ai-platform local train \
  --package-path $TRAINING_PACKAGE_PATH \
  --module-name $MAIN_TRAINER_MODULE

XGBoost

Nella riga di comando, imposta le seguenti variabili di ambiente: sostituendo [VALUES-IN-BRACKETS] con i valori appropriati:

TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"

Testa il job di addestramento a livello locale:

gcloud ai-platform local train \
  --package-path $TRAINING_PACKAGE_PATH \
  --module-name $MAIN_TRAINER_MODULE

Invio del job di addestramento

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

Specifica i parametri del job di addestramento

Imposta le seguenti variabili di ambiente per ciascun parametro nel job di addestramento richiesta:

  • BUCKET_NAME: il nome del bucket Cloud Storage.
  • JOB_NAME - Un nome da utilizzare per il job (lettere minuscole, numeri e solo trattini bassi, che iniziano con una lettera). Ad esempio, iris_scikit_learn_$(date +"%Y%m%d_%H%M%S") o iris_xgboost_$(date +"%Y%m%d_%H%M%S").
  • JOB_DIR: il percorso di una località di Cloud Storage da utilizzare per i file di output del job di addestramento. Ad esempio, gs://$BUCKET_NAME/scikit_learn_job_dir o gs://$BUCKET_NAME/xgboost_job_dir.
  • TRAINING_PACKAGE_PATH: il percorso locale della directory radice dell'addestramento un'applicazione. Ad esempio, ./iris_sklearn_trainer/ o ./iris_xgboost_trainer/.
  • MAIN_TRAINER_MODULE - Specifica il file di AI Platform Training di addestramento personalizzato. Il formato è [YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]. Ad esempio, iris_sklearn_trainer.iris_training o iris_xgboost_trainer.iris_training.
  • REGION: il nome della regione che stai utilizzando per eseguire il job di addestramento. Utilizza le funzionalità di in una delle regioni disponibili per tramite il servizio di addestramento su AI Platform Training. Assicurati che Il bucket Cloud Storage si trova nella stessa regione.
  • RUNTIME_VERSION - Devi specificare un Versione del runtime di AI Platform Training che supporta scikit-learn. In questo esempio, 2.11.
  • PYTHON_VERSION - La versione Python da utilizzare per il job. Per questo tutorial, e specificare Python 3.7.
  • SCALE_TIER - Una specifica predefinita del cluster per le macchine su cui eseguire un lavoro di addestramento lungo. In questo caso, BASIC. Puoi anche Usa livelli di scalabilità personalizzati per definire la configurazione del tuo cluster per l'addestramento.

Per praticità, di seguito sono riportate le variabili di ambiente per questo tutorial.

scikit-learn

Sostituisci [VALUES-IN-BRACKETS] con i valori appropriati:

    BUCKET_NAME=[YOUR-BUCKET-NAME]
    JOB_NAME="iris_scikit_learn_$(date +"%Y%m%d_%H%M%S")"
    JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
    TRAINING_PACKAGE_PATH="./iris_sklearn_trainer/"
    MAIN_TRAINER_MODULE="iris_sklearn_trainer.iris_training"
    REGION=us-central1
    RUNTIME_VERSION=2.11
    PYTHON_VERSION=3.7
    SCALE_TIER=BASIC

XGBoost

Sostituisci [VALUES-IN-BRACKETS] con i valori appropriati:

    BUCKET_NAME=[YOUR-BUCKET-NAME]
    JOB_NAME="iris_xgboost_$(date +"%Y%m%d_%H%M%S")"
    JOB_DIR=gs://$BUCKET_NAME/xgboost_job_dir
    TRAINING_PACKAGE_PATH="./iris_xgboost_trainer/"
    MAIN_TRAINER_MODULE="iris_xgboost_trainer.iris_training"
    REGION=us-central1
    RUNTIME_VERSION=2.11
    PYTHON_VERSION=3.7
    SCALE_TIER=BASIC

Invia la richiesta del job di addestramento:

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 [iris_scikit_learn_[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 iris_scikit_learn_[DATE]_[TIME]

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs iris_scikit_learn_[DATE]_[TIME]

jobId: iris_scikit_learn_[DATE]_[TIME]
state: QUEUED

(Facoltativo) Visualizzazione dei log di addestramento

AI Platform Training acquisisce tutti i flussi e i log stdout e stderr istruzioni. Questi log vengono archiviati in Logging; sono visibili sia durante che dopo l'esecuzione.

Per visualizzare i log per il job di addestramento:

Console

  1. Apri la pagina Job di AI Platform Training.

    Apri i job nella console Google Cloud

  2. Seleziona il nome del job di addestramento da ispezionare. Questo ti porta Pagina Dettagli job per il job di addestramento selezionato.

  3. Nei dettagli del job, seleziona il link Visualizza log. Questo ti porta alla pagina Logging, dove puoi cercare e filtrare i log 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

Verifica il file del modello in Cloud Storage

Visualizza i contenuti della cartella del modello di destinazione per verificare che gli elementi il file del modello sia stato caricato su Cloud Storage.

gcloud storage ls gs://$BUCKET_NAME/iris_*

Output di esempio:

gs://bucket-name/iris_20180518_123815/:
gs://bucket-name/iris_20180518_123815/model.joblib

Passaggi successivi