Requisiti del codice di addestramento

Esegui l'addestramento personalizzato su Vertex AI per eseguire il tuo codice di addestramento di machine learning (ML) nel cloud, anziché utilizzare AutoML. Questo documento descrive i requisiti da tenere in considerazione durante la scrittura del codice di addestramento.

Scegliere la struttura di un codice di addestramento

Per prima cosa, stabilisci la struttura che vuoi adottare con il codice di addestramento ML. Puoi fornire il codice di addestramento a Vertex AI in una delle seguenti forme:

  • Un'applicazione di addestramento Python da utilizzare con un container predefinito. Crea una distribuzione di origine Python con un codice che addestra un modello ML ed lo esporta in Cloud Storage. Questa applicazione di addestramento può utilizzare tutte le dipendenze incluse nel container predefinito con cui intendi utilizzarla.

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

    Per informazioni sui requisiti specifici per questa opzione, leggi la guida alla creazione di un'applicazione di addestramento Python.

  • Un'immagine container personalizzata. Crea un'immagine container Docker con un codice che addestra un modello di machine learning e lo esporta in Cloud Storage. Includi tutte le dipendenze richieste dal tuo codice nell'immagine container.

    Utilizza questa opzione se vuoi utilizzare dipendenze non incluse in uno dei container predefiniti per Vertex AI per l'addestramento. Ad esempio, se vuoi addestrare un framework Python ML che non è disponibile in un container predefinito, o se vuoi addestrare utilizzando un linguaggio di programmazione diverso da Python, questa è l'opzione migliore.

    Per informazioni sui requisiti specifici per questa opzione, leggi la guida alla creazione di un'immagine container personalizzata.

Nella parte rimanente di questo documento vengono descritti i requisiti relativi a entrambe le strutture dei codici di addestramento.

Requisiti per tutto il codice di addestramento personalizzato

Quando scrivi codice di addestramento personalizzato per Vertex AI, tieni presente che il codice verrà eseguito su una o più istanze di macchine virtuali (VM) gestite da Google Cloud. In questa sezione vengono descritti i requisiti applicabili a tutto il codice di addestramento personalizzato.

Accedi ai servizi Google Cloud nel codice

Molte delle sezioni seguenti descrivono l'accesso ad altri servizi di Google Cloud dal tuo codice. Per accedere ai servizi Google Cloud, scrivi il codice di addestramento per utilizzare le credenziali predefinite dell'applicazione. Molte librerie client di Google Cloud eseguono l'autenticazione con ADC per impostazione predefinita. Non devi configurare alcuna variabile di ambiente; Vertex AI configura automaticamente l'ADC per l'autenticazione come agente di servizio personalizzato Custom Code per il tuo progetto (per impostazione predefinita) o account di servizio personalizzato (se ne hai configurato uno).

Tuttavia, quando utilizzi una libreria client Google Cloud nel codice, Vertex AI potrebbe non connettersi sempre al progetto Google Cloud corretto per impostazione predefinita. Se si verificano errori di autorizzazione, il problema potrebbe essere causato dal collegamento al progetto sbagliato.

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

Se non vuoi impostare un ID hardcoded nel codice di addestramento, puoi fare riferimento alla variabile di ambiente CLOUD_ML_PROJECT_ID: Vertex AI imposta questa variabile di ambiente in ogni container di addestramento personalizzato per contenere il numero di progetto del progetto in cui hai avviato l'addestramento personalizzato. Molti strumenti Google Cloud possono accettare un numero di progetto in qualsiasi posizione.

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

Selezione implicita del progetto

from google.cloud import bigquery

client = bigquery.Client()

Utilizza invece il codice che seleziona in modo esplicito un progetto:

Selezione esplicita di progetti

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 seguente su a quali risorse può accedere il codice per modificare le autorizzazioni disponibili per il codice di addestramento.

A quali risorse può accedere il codice

Per impostazione predefinita, il codice di addestramento ha accesso a tutte le risorse disponibili per l'agente di servizio Custom Code Vertex AI per il tuo progetto. Puoi anche configurare Vertex AI in modo che il tuo codice di addestramento possa accedere a più o meno risorse.

Ad esempio, considera l'accesso del codice di addestramento alle risorse Cloud Storage:

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

Regole e tecniche di accesso simili si applicano alle tabelle BigQuery e ad altre risorse Google Cloud. In generale, puoi modificare le risorse disponibili per il codice di addestramento in uno dei seguenti modi:

Leggere e scrivere i file Cloud Storage con Cloud Storage FUSE

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

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

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

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

Carica dati di input

Il codice ML di solito opera sui dati di addestramento per addestrare un modello. Non archiviare i dati di addestramento insieme al codice, sia che crei un'applicazione di addestramento Python o un'immagine container personalizzata. L'archiviazione di dati con codice può portare a un progetto organizzato in modo errato, rendere difficile il riutilizzo del codice su diversi set di dati e causare errori per set di dati di grandi dimensioni.

Ti consigliamo di caricare i dati da un set di dati gestito da Vertex AI. In alternativa, puoi scrivere il tuo codice per caricare i dati da un'origine esterna a Vertex AI, come BigQuery o Cloud Storage.

Per ottenere le migliori prestazioni quando carichi i dati da Cloud Storage, utilizza un bucket nell'area geografica in cui stai eseguendo l'addestramento personalizzato. Per informazioni su come archiviare i dati in Cloud Storage, leggi Creazione di bucket di archiviazione e Caricamento di oggetti.

Per scoprire da quali bucket Cloud Storage puoi caricare dati, consulta la sezione precedente relativa a a quali risorse può accedere il tuo codice.

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

Ad esempio, puoi utilizzare una delle librerie client mostrate nella guida al download degli oggetti nella guida di Cloud Storage. Il client Python per Cloud Storage, in particolare, è incluso in container predefiniti. Anche la classe tf.io.gfile.GFile di TensorFlow supporta ADC.

Carica un set di dati di grandi dimensioni

A seconda dei tipi di macchine che intendi utilizzare durante l'addestramento personalizzato, le tue VM potrebbero non riuscire a caricare l'intera quantità di set di dati in memoria.

Se devi leggere dati troppo grandi per adattarli alla memoria, esegui lo streaming dei dati o leggili in modo incrementale. A tale scopo, sono disponibili best practice diverse per i framework ML. Ad esempio, la classe tf.data.Dataset di TensorFlow può trasmettere in streaming dati TFRecord o di testo da Cloud Storage.

Eseguire un addestramento personalizzato su più VM con il parallelismo dei dati è un altro modo per ridurre la quantità di dati che ogni VM carica in memoria. Consulta la sezione Scrittura del codice per l'addestramento distribuito di questo documento.

Esportazione di un modello di machine learning addestrato

Il codice ML solitamente 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 previsioni.

Una volta completato l'addestramento personalizzato, non potrai più accedere alle VM che hanno eseguito il codice di addestramento. Di conseguenza, il codice di addestramento deve esportare gli artefatti del modello in una posizione esterna a Vertex AI.

Ti consigliamo di esportare gli artefatti del modello in un bucket Cloud Storage. Come descritto nella sezione precedente relativa alle risorse a cui 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 supporti ADC per esportare gli artefatti del modello. Ad esempio, le API di TensorFlow per il salvataggio dei modelli Keras possono esportare gli artefatti direttamente in un percorso Cloud Storage.

Se vuoi utilizzare un modello addestrato per pubblicare previsioni su 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 all'esportazione degli artefatti del modello per la previsione.

Variabili di ambiente per directory Cloud Storage speciali

Se specifichi il campo API baseOutputDirectory, Vertex AI imposta le seguenti variabili di ambiente quando esegue il codice di addestramento:

I valori di queste variabili di ambiente sono leggermente diversi a seconda che tu stia utilizzando l'ottimizzazione degli iperparametri. Per scoprire di più, consulta il riferimento API per baseOutputDirectory.

L'utilizzo di queste variabili di ambiente consente di riutilizzare lo stesso codice di addestramento più volte, ad esempio con dati o opzioni di configurazione diversi, e di salvare gli artefatti e i punti di controllo del modello in posizioni diverse, modificando semplicemente il campo API baseOutputDirectory. Tuttavia, se non vuoi, non devi utilizzare le variabili di ambiente nel codice. Ad esempio, puoi in alternativa eseguire l'hardcoding delle posizioni per salvare i punti di controllo ed esportare gli artefatti del modello.

Inoltre, se utilizzi TrainingPipeline per l'addestramento personalizzato e non specifichi il campo modelToUpload.artifactUri, Vertex AI utilizza il valore della variabile di ambiente AIP_MODEL_DIR per modelToUpload.artifactUri. (per l'ottimizzazione degli iperparametri, Vertex AI utilizza il valore della variabile di ambiente AIP_MODEL_DIR dalla prova migliore).

Assicura la resilienza ai riavvii

Le VM che eseguono il tuo codice di addestramento vengono riavviate di tanto in tanto. Ad esempio, Google Cloud potrebbe dover riavviare una VM per motivi di manutenzione. Quando una VM viene riavviata, Vertex AI riavvia l'esecuzione del codice dall'avvio.

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 tuoi progressi nell'addestramento in Cloud Storage, almeno una volta ogni quattro ore, in modo da non perdere i progressi se le tue VM vengono riavviate.

  • All'inizio del codice di addestramento, verifica se l'avanzamento dell'addestramento è già presente nella località di esportazione. In tal caso, carica lo stato dell'addestramento salvato anziché iniziare da zero.

Quattro ore sono linee guida, non un limite rigido. Se assicurare la resilienza è una priorità, valuta la possibilità di aggiungere questi comportamenti al tuo codice anche se non prevedi di eseguirlo per un periodo di tempo prolungato.

Il funzionamento di questi comportamenti dipende dal framework ML che utilizzi. Ad esempio, se utilizzi TensorFlow Keras, scopri come utilizzare il callback ModelCheckpoint per questo scopo.

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

Requisiti per funzionalità di addestramento personalizzato facoltative

Se vuoi utilizzare determinate funzionalità facoltative di addestramento personalizzate, potresti dover apportare ulteriori modifiche al codice di addestramento. Questa sezione descrive i requisiti di codice per l'ottimizzazione degli iperparametri, le GPU, l'addestramento distribuito e Vertex AI TensorBoard.

Scrivi il codice per l'ottimizzazione degli iperparametri

Vertex AI può eseguire l'ottimizzazione degli iperparametri sul tuo codice di addestramento ML. Scopri di più sul funzionamento dell'ottimizzazione degli iperparametri su Vertex AI e su come configurare una risorsa HyperparameterTuningJob.

Se vuoi utilizzare l'ottimizzazione degli iperparametri, il codice di addestramento deve:

  • Analizza gli argomenti della riga di comando che rappresentano gli iperparametri da regolare e utilizza i valori analizzati per impostare gli iperparametri per l'addestramento.

  • Segnala 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. Il codice di addestramento deve analizzare questi argomenti della riga di comando e utilizzarli come iperparametri per l'addestramento. Ad esempio, per perfezionare la tariffa di apprendimento dello strumento di ottimizzazione, ti consigliamo di analizzare un argomento della riga di comando denominato --learning_rate. Scopri come configurare gli argomenti della riga di comando forniti da Vertex AI.

Ti consigliamo di utilizzare la libreria argparse di Python per analizzare gli argomenti della riga di comando.

Segnala la metrica di ottimizzazione degli iperparametri

Il codice di addestramento deve segnalare in modo intermittente la metrica degli iperparametri che stai cercando di ottimizzare in Vertex AI. Ad esempio, se vuoi massimizzare la precisione del tuo modello, ti consigliamo di segnalare questa metrica alla fine di ogni periodo di addestramento. Vertex AI utilizza queste informazioni per decidere quali iperparametri utilizzare per la prossima prova di addestramento. Scopri di più su come selezionare e specificare una metrica di ottimizzazione degli iperparametri.

Utilizza la libreria Python cloudml-hypertune per generare rapporti sulla metrica di ottimizzazione degli iperparametri. Questa libreria è inclusa in tutti i container predefiniti per l'addestramento e puoi utilizzarla pip per installarla in un contenitore personalizzato.

Per informazioni su come installare e utilizzare questa libreria, consulta il repository cloudml-hypertune GitHub o consulta il codelab sull'ottimizzazione degli iperparametri di Vertex AI.

Scrivere codice per le GPU

Puoi selezionare VM con unità di elaborazione grafica (GPU) per eseguire il codice di addestramento personalizzato. Scopri di più sulla configurazione dell'addestramento personalizzato per l'utilizzo di VM abilitate per GPU.

Se vuoi addestrare le tue GPU, assicurati che il codice di addestramento possa sfruttarle. A seconda del framework ML che utilizzi, potrebbero essere necessarie modifiche al codice. Ad esempio, se utilizzi TensorFlow Keras, devi modificare il codice solo se vuoi utilizzarne più di una. Alcuni framework ML non possono utilizzare le GPU.

Inoltre, assicurati che il tuo container supporti le GPU: seleziona un contenitore predefinito per l'addestramento che supporti le GPU oppure installa Toolkit per NVIDIA CUDA e NVIDIA cuDNN sul container personalizzato. Un modo è utilizzare l'immagine di base del repository Docker di nvidia/cuda; un altro modo è utilizzare un'istanza Deep Learning Containers come immagine di base.

Scrivere codice per l'addestramento distribuito

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

Alcuni framework ML, come TensorFlow e PyTorch, ti consentono di eseguire codice di addestramento identico su più macchine che coordinano automaticamente il modo di suddividere il lavoro in base alle variabili di ambiente impostate su ogni macchina. Scopri se Vertex AI imposta le variabili di ambiente per rendere possibile tutto questo in base alle tue esigenze di ML ML.

In alternativa, puoi eseguire un container diverso su ciascuno dei vari pool di worker. Un pool di worker è un gruppo di VM che configuri per utilizzare le stesse opzioni di calcolo e lo stesso container. In questo caso, probabilmente vorrai comunque fare affidamento sulle variabili di ambiente impostate da Vertex AI per coordinare la comunicazione tra le VM. Puoi personalizzare il codice di addestramento di ogni pool di worker per eseguire le attività arbitrarie che preferisci, a seconda del modo in cui questo dipende dall'obiettivo e dal framework ML utilizzato.

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

Vertex AI TensorBoard è una versione gestita di TensorBoard, un progetto open source di Google per la visualizzazione degli esperimenti di machine learning. Con Vertex AI TensorBoard puoi monitorare, visualizzare e confrontare gli esperimenti di machine learning e condividerli con il tuo team.

Per utilizzare Vertex AI TensorBoard con l'addestramento personalizzato, devi fare quanto segue:

  • Crea un'istanza di TensorBoard di Vertex AI nel tuo progetto per archiviare gli esperimenti.

  • Configurare un account di servizio per eseguire il job di addestramento personalizzato con le autorizzazioni appropriate.

  • Modifica il codice di addestramento personalizzato per scrivere i log compatibili con TensorBoard in Cloud Storage.

Per una guida passo passo su come iniziare a utilizzare questi requisiti, consulta la pagina relativa all'utilizzo di Vertex AI TensorBoard con l'addestramento personalizzato.

Passaggi successivi