Prepara il codice di addestramento

Esegui addestramento personalizzato su Vertex AI per eseguire il tuo machine learning di addestramento (ML) nel cloud, invece di utilizzare AutoML. Questo documento descrive le best practice da tenere presenti quando scrivi il codice di addestramento.

Scegli una struttura del codice di addestramento

In primo luogo, determina quale struttura vuoi che assuma il codice di addestramento ML. Puoi fornire il codice di addestramento a Vertex AI in uno dei seguenti modi:

  • Uno script Python da utilizzare con un container predefinito. Utilizza la SDK Vertex AI per creando un job personalizzato. Questo metodo ti consente di fornire la tua applicazione di addestramento come un singolo lo script.

  • Un'applicazione di addestramento Python da utilizzare con un container predefinito. Crea un sorgente Python di distribuzione con il codice che addestra un modello ML e lo esporta in Cloud Storage. Questo di addestramento può utilizzare qualsiasi dipendenza inclusa nel il container con cui prevedi di utilizzarlo.

    Utilizza questa opzione se uno dei container predefiniti di Vertex AI per e l'addestramento include tutte le dipendenze necessarie per l'addestramento. Ad esempio, se vuoi eseguire l'addestramento con PyTorch, scikit-learn, TensorFlow o XGBoost, è probabile che questa sia .

    Per conoscere le best practice specifiche per questa opzione, leggi la guida alle creazione di un corso di addestramento Python applicazione.

  • Un'immagine container personalizzata. Crea un container Docker immagine con codice che addestra un modello ML e lo esporta di archiviazione ideale in Cloud Storage. Includi eventuali dipendenze richieste dal codice nella nell'immagine container.

    Utilizza questa opzione se vuoi usare dipendenze che non sono incluse in un dei container predefiniti di Vertex AI addestramento. Ad esempio, se vuoi l'addestramento mediante un framework ML Python non disponibile in un o se vuoi eseguire l'addestramento usando un linguaggio di programmazione diverso Python, allora questa è l'opzione migliore.

    Per conoscere le best practice specifiche per questa opzione, leggi la guida alle creando un'immagine container personalizzata.

Il resto del documento descrive le best practice pertinenti sia per l'addestramento, le strutture di codice.

Best practice per tutto il codice di addestramento personalizzato

Quando scrivi il codice di addestramento personalizzato per Vertex AI, tieni presente che il codice venga eseguito su una o più istanze di macchine virtuali (VM) gestite in Google Cloud. Questa sezione descrive le best practice applicabili a tutti i di addestramento personalizzato.

Accedi ai servizi Google Cloud nel tuo codice

Alcune delle seguenti sezioni descrivono l'accesso ad altri servizi Google Cloud i servizi dal tuo codice. Per accedere ai servizi Google Cloud, scrivi per utilizzare Credenziali predefinite dell'applicazione (ADC). Molte librerie client di Google Cloud eseguono l'autenticazione con ADC per impostazione predefinita. Non è necessario configurare variabili di ambiente. Vertex AI configura automaticamente ADC per l'autenticazione come Agente di servizio Vertex AI Custom Code per il tuo progetto (per impostazione predefinita) o un account di servizio personalizzato (se ne hai configurato uno).

Tuttavia, quando nel codice utilizzi una libreria client di Google Cloud, Vertex AI potrebbe non connettersi sempre progetto Google Cloud per impostazione predefinita. Se riscontri errori di autorizzazione, la connessione al progetto sbagliato potrebbe essere il problema.

Questo problema si verifica perché Vertex AI non esegue il codice direttamente nel tuo progetto Google Cloud. Vertex AI esegue il codice in uno dei numerosi progetti separati gestiti da Google. Vertex AI utilizza questi progetti esclusivamente per le operazioni relative del progetto. Pertanto, non provare a dedurre un ID progetto dall'ambiente in il codice di addestramento o previsione; specificare in modo esplicito gli ID progetto.

Se non vuoi impostare un ID progetto come hardcoded nel codice di addestramento, Fai riferimento alla variabile di ambiente CLOUD_ML_PROJECT_ID: Vertex AI imposta questa variabile di ambiente in ogni container di addestramento personalizzato affinché contenga numero di progetto del progetto in cui è stato avviato e addestramento personalizzato. Molti strumenti Google Cloud possono accettare ogni volta che prendono un ID progetto.

Ad esempio, se vuoi utilizzare il client Python per Google, BigQuery per accedere BigQuery nello stesso progetto, quindi non provare a dedurre progetto nel tuo codice di addestramento:

Selezione implicita del progetto

from google.cloud import bigquery

client = bigquery.Client()

Utilizza invece il codice che seleziona esplicitamente un progetto:

Selezione esplicita del progetto

import os

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

Se si verificano errori di autorizzazione dopo aver configurato il codice in questo modo, leggi la sezione che segue a quali risorse può accedere il tuo codice per modificare autorizzazioni disponibili per il codice di addestramento.

A quali risorse può accedere il tuo codice

Per impostazione predefinita, l'applicazione di addestramento può accedere a qualsiasi risorsa Google Cloud sono a disposizione Agente di servizio Vertex AI Custom Code (CCSA) del tuo progetto. Puoi concedere il CCSA e, di conseguenza, la tua domanda di formazione a un numero limitato di altre risorse seguendo le istruzioni in Concedi agli agenti di servizio Vertex AI l'accesso ad altre risorse. Se l'applicazione di addestramento non ha bisogno dell'accesso a livello di lettura a Google Cloud risorse non elencate in quella pagina, deve acquisire un token OAuth 2.0 di accesso al token con https://www.googleapis.com/auth/cloud-platform di un ambito, che può essere eseguita solo utilizzando un account di servizio personalizzato.

Considera ad esempio l'accesso del codice di addestramento a Cloud Storage di risorse:

Per impostazione predefinita, Vertex AI può accedere a qualsiasi bucket Cloud Storage nel progetto Google Cloud in cui stai eseguendo l'addestramento personalizzato. Tu può anche concedere a Vertex AI l'accesso ai bucket Cloud Storage in altri progetti oppure puoi personalizzare con precisione i bucket a cui può accedere un job specifico utilizzando un account di servizio personalizzato.

Leggi e scrivi file Cloud Storage con Cloud Storage FUSE.

In tutti i job di addestramento personalizzato, Vertex AI monta Cloud Storage a cui hai accesso nella directory /gcs/ delle file system in-app. Come comoda alternativa all'utilizzo del client Python per Cloud Storage o un'altra libreria per accedere a Cloud Storage, può leggere e scrivere direttamente nel file system locale per leggere i dati Cloud Storage o scrivere dati in Cloud Storage. Ad esempio, per caricare i dati da gs://BUCKET/data.csv, puoi utilizzare con il seguente codice Python:

file = open('/gcs/BUCKET/data.csv', 'r')

Vertex AI utilizza Cloud Storage FUSE per e montare i bucket di archiviazione. Tieni presente che le directory montate da Cloud Storage FUSE non sono conformi a POSIX.

Le credenziali che usi per l'addestramento personalizzato determinano i bucket a cui puoi accedere in questo modo. La sezione precedente su a quali risorse può accedere il tuo codice descrive esattamente le quali bucket a cui puoi accedere per impostazione predefinita e come personalizzarli.

Carica i dati di input

Il codice ML di solito opera sui dati di addestramento per addestrare un modello. Non archiviare l'addestramento dei dati insieme al codice, sia che si crei un o un'immagine container personalizzata. L'archiviazione dei dati con codice può comportare un progetto disorganizzato, rendono difficile il riutilizzo del codice su set di dati diversi, causando errori per set di dati di grandi dimensioni.

Puoi caricare i dati da un Set di dati gestito da Vertex AI o scrivere codice per caricare i dati da un'origine esterna Vertex AI, come BigQuery di archiviazione ideale in Cloud Storage.

Per ottenere prestazioni ottimali quando carichi i dati da Cloud Storage, utilizza un'istanza nella regione in cui ti trovi l'addestramento personalizzato. Per scoprire come archiviare i dati in Cloud Storage, leggi Creazione di spazi di archiviazione bucket e Caricamento oggetti.

Per scoprire da quali bucket Cloud Storage puoi caricare i dati, leggi nella sezione precedente su a quali risorse può accedere il tuo codice.

Per caricare i dati da Cloud Storage nel tuo codice di addestramento, utilizza funzionalità Cloud Storage FUSE descritta nella sezione precedente oppure utilizza in qualsiasi libreria che supporti ADC. Non è necessario fornire esplicitamente eventuali credenziali di autenticazione nel tuo codice.

Ad esempio, puoi utilizzare una delle librerie client illustrate nel Guida di Cloud Storage al download oggetti. La Client Python per Cloud Storage, è inclusa nei container predefiniti. tf.io.gfile.GFile di TensorFlow classe supporta anche ADC.

Carica un set di dati di grandi dimensioni

In base al computer tipi che prevedi da utilizzare durante l'addestramento personalizzato, le VM potrebbero non essere in grado l'intero set di dati di grandi dimensioni.

Se hai bisogno di leggere dati troppo grandi per essere contenuti nella memoria, invia i dati in modalità flusso leggerlo in modo incrementale. Le best practice variano a seconda del framework ML facendo questo. Ad esempio, lo strumento tf.data.Dataset di TensorFlow classe possono trasmettere dati di testo o TFRecord da Cloud Storage.

Un altro modo è eseguire l'addestramento personalizzato su più VM con parallelismo dei dati per ridurre la quantità di dati caricati in memoria da ogni VM. Consulta la sezione Scrittura di codice per l'addestramento distribuito di questo documento.

Esporta un modello ML addestrato

Il codice ML in genere esporta un modello addestrato al termine dell'addestramento sotto forma di uno o più artefatti del modello. Puoi quindi utilizzare gli artefatti del modello per ottenere per le previsioni.

Una volta completato l'addestramento personalizzato, non potrai più accedere alle VM che hanno eseguito di addestramento personalizzato. Pertanto, il codice di addestramento deve esportare gli artefatti del modello al di fuori di Vertex AI.

Ti consigliamo di esportare gli artefatti del modello in un bucket Cloud Storage. Come descritto nella sezione precedente a quali risorse può accedere il tuo codice, Vertex AI può accedere a qualsiasi bucket Cloud Storage nel progetto Google Cloud in cui esegui l'addestramento personalizzato. Utilizza una libreria che supporta ADC per esporta gli artefatti del modello. Ad esempio, API TensorFlow per il salvataggio dei modelli Keras possono esportare gli artefatti direttamente in un percorso di Cloud Storage.

Se vuoi utilizzare il modello addestrato per fornire previsioni Vertex AI, il codice deve esportare gli artefatti del modello in un formato compatibile con uno dei container predefiniti per la previsione. Scopri di più nella guida alle esporta gli artefatti del modello per la previsione.

Variabili di ambiente per directory speciali di Cloud Storage

Se specifichi l'API baseOutputDirectory , Vertex AI imposta le seguenti variabili di ambiente durante l'esecuzione il codice di addestramento:

I valori di queste variabili di ambiente differiscono leggermente in base al fatto che utilizzi l'ottimizzazione degli iperparametri. Per ulteriori informazioni, consulta il riferimento API per baseOutputDirectory.

L'uso di queste variabili di ambiente semplifica il riutilizzo dello stesso addestramento codice più volte, ad esempio con opzioni di dati o di configurazione diverse, gli artefatti del modello e i checkpoint in posizioni diverse, semplicemente modificando nel campo API baseOutputDirectory. Tuttavia, non è necessario utilizzare variabili di ambiente nel codice. Ad esempio, puoi alternativamente hardcoded delle posizioni per salvare i checkpoint ed esportare il modello artefatti.

Inoltre, se usi un TrainingPipeline per le addestramento e non specificare modelToUpload.artifactUri , quindi Vertex AI utilizza il valore dell'ambiente AIP_MODEL_DIR per modelToUpload.artifactUri. (Per l'ottimizzazione degli iperparametri, Vertex AI utilizza il valore dell'ambiente AIP_MODEL_DIR della prova migliore).

Garantisci la resilienza per riavviare

Le VM che eseguono il codice di addestramento si riavviano occasionalmente. Ad esempio: Google Cloud potrebbe dover riavviare una VM per motivi di manutenzione. Quando una VM si riavvia, Vertex AI ricomincia a eseguire il codice dall'inizio.

Se prevedi che il codice di addestramento venga eseguito per più di quattro ore, aggiungi diversi comportamenti al codice per renderlo resiliente ai riavvii:

  • Esporta spesso i progressi dell'addestramento in Cloud Storage, una volta ogni quattro ore, per non perdere i progressi se le VM si riavviano.

  • All'inizio del codice di addestramento, controlla i progressi esiste già nel percorso di esportazione. In questo caso, carica lo stato di addestramento salvato. anziché iniziare l'addestramento da zero.

Quattro ore sono una linea guida, non un limite fisso. Se garantire la resilienza è valuta la possibilità di aggiungere questi comportamenti al codice anche se non prevedi per farlo funzionare per tutto il tempo.

Il modo in cui ottenere questi comportamenti dipende dal framework ML che utilizzi. Per Ad esempio, se usi TensorFlow Keras, scopri come utilizzare lo strumento ModelCheckpoint callback per questo scopo.

Per saperne di più su come Vertex AI gestisce le VM, consulta Informazioni sul servizio di addestramento personalizzato.

Best practice per le funzionalità di addestramento personalizzato facoltative

Se vuoi utilizzare delle caratteristiche di addestramento personalizzato facoltative, potresti dover apportare ulteriori modifiche al codice di addestramento. Questa sezione descrive il codice best practice per l'ottimizzazione degli iperparametri, le GPU, l'addestramento distribuito Vertex AI TensorBoard.

Scrivi il codice per abilitare la registrazione automatica

Puoi abilitare l'auotologging utilizzando l'SDK Vertex AI per Python in modo che acquisire parametri e metriche delle prestazioni quando si invia il job personalizzato. Per i dettagli, vedi Esegui il job di addestramento con il monitoraggio degli esperimenti.

Scrivi il codice per restituire i log dei container

Quando scrivi i log dal tuo servizio o job, questi vengono selezionati automaticamente da Cloud Logging purché i log vengano scritti in uno qualsiasi dei queste località:

La maggior parte degli sviluppatori dovrebbe scrivere i log utilizzando output standard e .

I log dei container scritti in queste località supportate vengono automaticamente associati al servizio di addestramento personalizzato di Vertex AI, alla revisione località o con il job di addestramento personalizzato. Eccezioni contenute in questi log vengono acquisiti e inseriti nei report Error Reporting.

Usa testo semplice o JSON strutturato nei log

Quando scrivi i log, puoi inviare una semplice stringa di testo o una singola riga di JSON serializzato, chiamato anche "structured" e i dati di Google Cloud. Questo viene rilevato e analizzato da Cloud Logging e inserito in jsonPayload. Nella il contrasto, il semplice messaggio di testo viene inserito in textPayload.

Scrittura di log strutturati

Puoi trasmettere log JSON strutturati in diversi modi. I modi più comuni sono utilizzando Libreria Logging Python oppure passando un file JSON non elaborato tramite print.

Libreria di logging Python

import json
import logging
from pythonjsonlogger import jsonlogger


class CustomJsonFormatter(jsonlogger.JsonFormatter):
 """Formats log lines in JSON."""
  def process_log_record(self, log_record):
    """Modifies fields in the log_record to match Cloud Logging's expectations."""
    log_record['severity'] = log_record['levelname']
    log_record['timestampSeconds'] = int(log_record['created'])
    log_record['timestampNanos'] = int(
        (log_record['created'] % 1) * 1000 * 1000 * 1000)


    return log_record




def configure_logger():
  """Configures python logger to format logs as JSON."""
  formatter = CustomJsonFormatter(
        '%(name)s|%(levelname)s|%(message)s|%(created)f'
        '|%(lineno)d|%(pathname)s', '%Y-%m-%dT%H:%M:%S')
  root_logger = logging.getLogger()
  handler = logging.StreamHandler()
  handler.setFormatter(formatter)
  root_logger.addHandler(handler)
  root_logger.setLevel(logging.WARNING)


logging.warning("This is a warning log")

JSON non elaborato

import json


def log(severity, message):
  global_extras = {"debug_key": "debug_value"}
  structured_log = {"severity": severity, "message": message, **global_extras}
  print(json.dumps(structured_log))


def main(args):
  log("DEBUG", "Debugging the application.")
  log("INFO", "Info.")
  log("WARNING", "Warning.")
  log("ERROR", "Error.")
  log("CRITICAL", "Critical.")

Campi JSON speciali nei messaggi

Quando fornisci un log strutturato come dizionario JSON, alcuni campi speciali vengono rimosse da jsonPayload e vengono scritte nel campo corrispondente in la generazione LogEntry come descritto in la documentazione per i campi speciali.

Ad esempio, se il file JSON include una proprietà severity, questa viene rimossa dal jsonPayload e viene visualizzato come severity della voce di log. message viene utilizzata come testo visualizzato principale della voce di log, se presente.

Correlare i log dei container con un log delle richieste (solo servizi)

In Esplora log, i log correlati allo stesso trace sono visualizzabili in "genitore-figlio" formato: quando fai clic sull'icona a forma di triangolo a sinistra dell' di voce di log delle richieste, i log dei container relativi a quella richiesta sono nidificati nel log delle richieste.

I log dei container non vengono correlati automaticamente ai log delle richieste, a meno che non utilizzi un Libreria client di Cloud Logging. Per correlare i log dei container con i log delle richieste senza utilizzare una libreria client, puoi utilizzare una riga di log JSON strutturata che contiene un Campo logging.googleapis.com/trace con l'identificatore della traccia estratto da l'intestazione X-Cloud-Trace-Context.

Visualizza i log

Per visualizzare i log dei container nella console Google Cloud:

  1. Nella console Google Cloud, vai alla Pagina Job personalizzati di Vertex AI.

    Vai a Job personalizzati

  2. Fai clic sul nome del job personalizzato di cui vuoi visualizzare i log.

  3. Fai clic su Visualizza log.

Scrivi il codice per l'ottimizzazione degli iperparametri

Vertex AI può eseguire l'ottimizzazione degli iperparametri nell'addestramento ML le API nel tuo codice. Scopri di più su come l'ottimizzazione degli iperparametri su Vertex AI funziona e come configurare HyperparameterTuningJob risorsa.

Se vuoi usare l'ottimizzazione degli iperparametri, il codice di addestramento deve eseguire seguenti:

  • Analizzare gli argomenti della riga di comando che rappresentano gli iperparametri da ottimizzare e usare i valori analizzati per impostare gli iperparametri per l'addestramento.

  • Segnalare in modo intermittente la metrica di ottimizzazione degli iperparametri a Vertex AI.

Analizza argomenti della riga di comando

Per l'ottimizzazione degli iperparametri, Vertex AI esegue il codice di addestramento più volte, con argomenti della riga di comando diversi ogni volta. La tua formazione il codice deve analizzare questi argomenti della riga di comando e utilizzarli come iperparametri addestramento. Ad esempio, per ottimizzare l'apprendimento percentuale, può essere utile analizzare un argomento della riga di comando denominato --learning_rate. Impara come configurare gli argomenti della riga di comando Vertex AI fornisce.

Ti consigliamo di utilizzare lo standard argparse di Python libreria per analizzare dalla riga di comando.

Segnala la metrica di ottimizzazione degli iperparametri

Il codice di addestramento deve segnalare a intermittenza la metrica degli iperparametri stanno provando a ottimizzare Vertex AI. Ad esempio, se vuoi massimizzare l'accuratezza del modello, ti consigliamo di registrare questa metrica alla fine di ogni epoca di addestramento. Vertex AI utilizza queste informazioni per decidere quali iperparametri usare per la prossima prova di addestramento. Scopri di più su selezionando e specificando l'ottimizzazione degli iperparametri .

Utilizza la libreria Python cloudml-hypertune per segnalare l'ottimizzazione degli iperparametri o una metrica di valutazione. Questa libreria è inclusa in tutti i container predefiniti per addestramento e puoi utilizzare pip per installare in un container personalizzato.

Per scoprire come installare e utilizzare questa libreria, consulta la cloudml-hypertune GitHub repositoryoppure fare riferimento Codelab Vertex AI: ottimizzazione degli iperparametri.

Scrivi il codice per le GPU

Puoi selezionare VM con unità di elaborazione grafica (GPU) per eseguire le tue di addestramento personalizzato. Scopri di più sulla configurazione dell'addestramento personalizzato per utilizzare GPU abilitato delle VM.

Se vuoi eseguire l'addestramento con le GPU, assicurati che il codice di addestramento possa alcune. A seconda del framework ML che utilizzi, potrebbero essere necessarie modifiche il tuo codice. Ad esempio, se utilizzi TensorFlow Keras, devi solo regolare il codice se vuoi utilizzarne più di uno GPU. Alcuni framework ML non possono per utilizzare le GPU.

Inoltre, assicurati che il container supporti le GPU: seleziona un modello predefinito container per l'addestramento che supporta GPU, o installa NVIDIA CUDA Toolkit e NVIDIA cuDNN nel container personalizzato. Un modo per farlo è utilizzare l'immagine di base dal Docker nvidia/cuda repository; in un altro modo è per utilizzare un'istanza Deep Learning Containers come base dell'immagine.

Scrivi il codice per l'addestramento distribuito

Per addestrare set di dati di grandi dimensioni, puoi eseguire il codice su più VM in un gestito da Vertex AI. Scopri come configurare più VM per l'addestramento.

Alcuni framework ML, come TensorFlow e PyTorch, ti consente di eseguire un codice di addestramento identico su più macchine che coordinano automaticamente come dividere il lavoro in base all'ambiente su ogni macchina. Scoprire se Vertex AI imposta e le variabili di ambiente per rendere tutto questo possibile Google Cloud.

In alternativa, puoi eseguire un container diverso su ciascuno dei vari worker piscine. Un pool di worker è un gruppo di VM che configuri per utilizzare lo stesso le opzioni di computing e il container. In questo caso, probabilmente vorrai comunque sulle variabili di ambiente impostate da Vertex AI per coordinare la comunicazione tra le VM. Puoi personalizzare il codice di addestramento pool di worker per eseguire le attività arbitrarie che desideri; come lo fai dipende dall'obiettivo e dal framework ML che usi.

Monitora e visualizza gli esperimenti di addestramento personalizzati utilizzando Vertex AI TensorBoard

Vertex AI TensorBoard è una versione gestita di TensorBoard, un progetto open source di Google per la visualizzazione esperimenti di apprendimento. Con Vertex AI TensorBoard puoi monitorare, visualizzare e confrontare gli esperimenti ML per poi condividerli con il tuo team. Puoi anche utilizzare Cloud Profiler per individuare e correggere i colli di bottiglia delle prestazioni per addestrare i modelli in modo più rapido ed economico.

Per utilizzare Vertex AI TensorBoard con l'addestramento personalizzato, devi eseguire le seguenti:

  • Crea un'istanza Vertex AI TensorBoard nel progetto per archiviare (vedi Creare un'istanza TensorBoard).

  • Configura un account di servizio per eseguire il job di addestramento personalizzato con autorizzazioni aggiuntive.

  • Modifica il codice di addestramento personalizzato per scrivere i log compatibili con TensorBoard in Cloud Storage (consulta Modifiche allo script di addestramento)

Per una guida passo passo, vedi Utilizzo di Vertex AI TensorBoard con l'addestramento personalizzato.

Passaggi successivi