Addestramento con scikit-learn su AI Platform Training

Il servizio di addestramento di 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 utilizzando AI Platform Training.

Questo tutorial addestra un semplice modello per prevedere il livello di reddito di una persona in base al set di dati relativo al reddito del Censimento. Creerai un di addestramento personalizzato, caricarla in Cloud Storage e inviare un lavoro di addestramento lungo. Il servizio di addestramento di AI Platform Training scrive l'output del bucket Cloud Storage e crea i log Logging.

Questi contenuti sono disponibili anche su GitHub come Jupyter Notebook.

Come addestrare il 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 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

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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  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. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  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, ti consigliamo di configurare l'ambiente utilizzando la scheda MACOS 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 lo sviluppo continuo.

macOS

  1. Verifica l'installazione di Python
    Verifica di avere installato Python e, se necessario, installalo.

    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

    Per ulteriori dettagli, consulta la documentazione di pip.

  3. Installa virtualenv
    virtualenv è uno strumento per creare ambienti Python isolati. Controlla se hai 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 il resto dei comandi all'interno del tuo ambiente virtuale.

    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 della console Cloud e visualizza un prompt della riga di comando. L'operazione può richiedere alcuni secondi per inizializzare la sessione di shell.

    Sessione di 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 e pandas utilizzate in AI Platform Training versione runtime 2,11

(aip-env)$ pip install scikit-learn==1.0.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. In questo modo, puoi evitare 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 ogni framework:

Cloud Shell

Esegui il seguente comando per installare scikit-learn e pandas:

pip install --user scikit-learn 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

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 utilizzi un bucket in un progetto diverso, devi assicurarti che l'account di servizio AI Platform Training possa accedere al codice di addestramento e alle 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. Consulta le regioni disponibili per i servizi 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 i job di AI Platform. 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

Informazioni sui dati

Il set di dati sul reddito da censimento usati da questo esempio per l'addestramento, 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, CA: University of California, School of Information and Computer Science. Questo set di dati è disponibile pubblicamente e può essere utilizzato da chiunque ai sensi del seguenti termini forniti dall'origine del set di dati: http://archive.ics.uci.edu/ml - ed è 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 nel file di addestramento Python.

crea il file del tuo 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 e scikit-learn. Imposta una variabile per il nome del bucket Cloud Storage.

import datetime
import pandas as pd
import joblib

from google.cloud import storage

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import FeatureUnion
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelBinarizer


# TODO: REPLACE 'YOUR_BUCKET_NAME' with your GCS 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 è ospitato 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. (Dati di valutazione è disponibile in adult.test, ma non viene utilizzato in questo tutorial.

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

# Path to the data inside the public bucket
blob = bucket.blob('ai-platform/sklearn/census_data/adult.data')
# Download the data
blob.download_to_filename('adult.data')

Aggiungi il codice del modello

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

  • Definisci e carica i dati
  • Convertire le caratteristiche categoriche in caratteristiche numeriche
  • Estrarre caratteristiche numeriche con una pipeline scikit-learn
  • Esporta e salva il modello in Cloud Storage

Definisci e carica i dati

# Define the format of your input data including unused columns (These are the columns 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 are columns that need to be turned into a numerical value to be used by scikit-learn
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)


# Load the training census dataset
with open('./adult.data', 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)

# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
train_features = raw_training_data.drop('income-level', axis=1).values.tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
train_labels = (raw_training_data['income-level'] == ' >50K').values.tolist()

Convertire le caratteristiche categoriche in caratteristiche numeriche

# Since the census data set has categorical features, we need to convert
# them to numerical values. We'll use a list of pipelines to convert each
# categorical column and then use FeatureUnion to combine them before calling
# the RandomForestClassifier.
categorical_pipelines = []

# Each categorical column needs to be extracted individually and converted to a numerical value.
# To do this, each categorical column will use a pipeline that extracts one feature column via
# SelectKBest(k=1) and a LabelBinarizer() to convert the categorical value to a numerical one.
# A scores array (created below) will select and extract the feature column. The scores array is
# created by iterating over the COLUMNS and checking if it is a CATEGORICAL_COLUMN.
for i, col in enumerate(COLUMNS[:-1]):
    if col in CATEGORICAL_COLUMNS:
        # Create a scores array to get the individual categorical column.
        # Example:
        #  data = [39, 'State-gov', 77516, 'Bachelors', 13, 'Never-married', 'Adm-clerical',
        #         'Not-in-family', 'White', 'Male', 2174, 0, 40, 'United-States']
        #  scores = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        #
        # Returns: [['State-gov']]
        # Build the scores array.
        scores = [0] * len(COLUMNS[:-1])
        # This column is the categorical column we want to extract.
        scores[i] = 1
        skb = SelectKBest(k=1)
        skb.scores_ = scores
        # Convert the categorical column to a numerical value
        lbn = LabelBinarizer()
        r = skb.transform(train_features)
        lbn.fit(r)
        # Create the pipeline to extract the categorical feature
        categorical_pipelines.append(
            ('categorical-{}'.format(i), Pipeline([
                ('SKB-{}'.format(i), skb),
                ('LBN-{}'.format(i), lbn)])))

Estrarre caratteristiche numeriche con una pipeline scikit-learn

# Create pipeline to extract the numerical features
skb = SelectKBest(k=6)
# From COLUMNS use the features that are numerical
skb.scores_ = [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
categorical_pipelines.append(('numerical', skb))

# Combine all the features using FeatureUnion
preprocess = FeatureUnion(categorical_pipelines)

# Create the classifier
classifier = RandomForestClassifier()

# Transform the features and fit them to the classifier
classifier.fit(preprocess.transform(train_features), train_labels)

# Create the overall model as a single pipeline
pipeline = Pipeline([
    ('union', preprocess),
    ('classifier', classifier)
])

Esporta e salva il modello in Cloud Storage

Se il bucket Cloud Storage si trova nello stesso progetto che stai utilizzando AI Platform Training può quindi leggere e scrivere del bucket. In caso contrario, devi assicurarti che il progetto per eseguire AI Platform Training possono accedere ai tuoi Cloud Storage di sincronizzare la directory di una VM con un bucket. Scopri come concedere autorizzazioni per lo spazio di archiviazione.

Assicurati di assegnare un nome al file del modello model.pklo model.joblib se vuoi utilizzarlo per richiedere previsioni online con AI Platform Prediction.

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

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

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

Nella riga di comando, visualizza il contenuto della cartella del modello di destinazione da verificare che il file del modello sia stato caricato su Cloud Storage. Imposta un variabile di ambiente (BUCKET_NAME) per il nome del bucket, se non hai già fatto.

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

L'output dovrebbe essere simile al seguente:

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

Crea pacchetto dell'applicazione 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 della tua applicazione di addestramento dovrebbe avere un aspetto simile al 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 file Python e poi salva il file all'interno Directory census_training. Vedi l'esempio di codice per train.py Puoi utilizzare cURL per scaricare e salvare il file:

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

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

Invia il job di addestramento

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

Specificare i parametri del job di addestramento

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

  • PROJECT_ID: utilizza l'ID PROJECT_ID corrispondente al tuo progetto Google Cloud.
  • BUCKET_NAME: il nome del bucket Cloud Storage.
  • JOB_NAME: un nome da utilizzare per il job (solo lettere maiuscole e minuscole, numeri e trattini bassi, che deve iniziare con una lettera). In questo caso: census_training_$(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.
  • TRAINING_PACKAGE_PATH: il percorso locale della directory radice dell'addestramento un'applicazione. In questo caso: ./census_training/.
  • MAIN_TRAINER_MODULE - Specifica il file di AI Platform Training di addestramento personalizzato. Questo valore è formattato come [YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]. In questo richiesta, census_training.train.
  • REGION: il nome della regione che stai utilizzando per eseguire il job di addestramento. Utilizza una delle regioni disponibili per il servizio di addestramento 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. Sostituisci [VALUES-IN-BRACKETS] con i valori appropriati:

PROJECT_ID=[YOUR-PROJECT-ID]
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME=census_training_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_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_[DATE]_[TIME]

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

Passaggi successivi