Esecuzione di un job di addestramento

AI Platform Training fornisce l'addestramento di modelli come servizio asincrono (batch). Questa pagina descrive come configurare e inviare un job di addestramento eseguendo gcloud ai-platform jobs submit training dalla riga di comando o inviando una richiesta all'API all'indirizzo projects.jobs.create.

Prima di iniziare

Prima di poter inviare un job di addestramento, devi pacchettizzare l'applicazione e caricarla, oltre a eventuali dipendenze insolite in un bucket Cloud Storage. Nota: se utilizzi Google Cloud CLI per inviare il job, puoi pacchettizzare la applicazione e inviare il job nello stesso passaggio.

Configurazione del job

Puoi passare i parametri al servizio di addestramento impostando i membri della risorsa Job, che include gli elementi nella risorsa TrainingInput.

Se utilizzi Google Cloud CLI per inviare i job di addestramento, puoi:

  • Specifica i parametri di addestramento più comuni come flag del comando gcloud ai-platform jobs submit training.
  • Passa i parametri rimanenti in un file di configurazione YAML, denominato config.yaml per convenzione. Il file di configurazione rispecchia la struttura della rappresentazione JSON della risorsa Job. Puoi passare il percorso del file di configurazione nel flag --config del comando gcloud ai-platform jobs submit training. Pertanto, se il percorso del file di configurazione è config.yaml, devi impostare --config=config.yaml.

Raccolta dei dati di configurazione del job

Per definire il job vengono utilizzate le seguenti proprietà.

Nome job (jobId)
Un nome da utilizzare per il job (solo lettere maiuscole e minuscole, numeri e trattini bassi, che iniziano con una lettera).
Configurazione cluster (scaleTier)
Un livello di scalabilità che specifica il tipo di cluster di elaborazione su cui eseguire il job. Può essere il livello di scalabilità CUSTOM, nel qual caso specifichi anche esplicitamente il numero e il tipo di macchine da utilizzare.
Configurazione disco (diskConfig)
Configurazione del disco di avvio per ogni VM di addestramento. Questo campo è facoltativo. Per impostazione predefinita, ogni VM viene eseguita con un disco di avvio pd-ssd da 100 GB. La specifica di questo campo potrebbe comportare costi aggiuntivi del disco.
Pacchetto di applicazioni di addestramento (packageUris)
Un'applicazione di addestramento in pacchetto archiviata in una località di Cloud Storage. Se usi Google Cloud CLI, la fase di pacchettizzazione delle applicazioni è in gran parte automatizzata. Consulta i dettagli nella guida alla presentazione del pacchetto dell'applicazione.
Nome modulo (pythonModule)
Il nome del modulo principale nel pacchetto. Il modulo principale è il file Python chiamato per avviare l'applicazione. Se utilizzi il comando gcloud per inviare il job, specifica il nome principale del modulo nel flag --module-name. Consulta la guida alla pacchettizzazione dell'applicazione.
Regione (region)
La regione di Compute Engine in cui vuoi eseguire il job. Devi eseguire il job di addestramento nella stessa regione del bucket Cloud Storage che archivia i dati di addestramento. Consulta le regioni disponibili per i servizi di AI Platform Training.
Directory job (jobDir)
Il percorso di una località Cloud Storage da utilizzare per l'output del job. La maggior parte delle applicazioni di addestramento salva i checkpoint durante l'addestramento e salva il modello addestrato in un file alla fine del job. È necessario un percorso di Cloud Storage in cui salvarli. Il tuo progetto Google Cloud deve avere accesso in scrittura a questo bucket. Il servizio di addestramento passa automaticamente il percorso impostato per la directory dei job all'applicazione di addestramento sotto forma di argomento della riga di comando denominato job_dir. Puoi analizzarlo insieme agli altri argomenti dell'applicazione e utilizzarlo nel tuo codice. Il vantaggio dell'utilizzo della directory dei job è che il servizio di addestramento convalida la directory prima di avviare l'applicazione.
Versione runtime (runtimeVersion)
La versione di runtime di AI Platform Training da utilizzare per il job.
Versione Python (pythonVersion)
La versione Python da utilizzare per il job. Python 3.5 è disponibile nelle versioni del runtime dalla 1.13 alla 1.14. Python 3.7 è disponibile nelle versioni del runtime 1.15 e successive.
Tempo di attesa massimo (scheduling.maxWaitTime)
Una durata massima di attesa in secondi con il suffisso s (ad esempio 3600s) che determina per quanto tempo il job deve rimanere nello stato QUEUED e PREPARING. AI Platform Training non inizia sempre a eseguire il job immediatamente a causa dei vincoli delle risorse; specifica questo campo se non vuoi attendere più a lungo di una durata specifica per l'esecuzione del job. La durata limitata inizia quando crei il job. Se il job non è ancora passato allo stato RUNNING entro la fine di questo periodo, AI Platform Training annulla il job. Questo campo è facoltativo e non ha alcun limite per impostazione predefinita. Se specifichi questo campo, devi impostare il valore almeno su 1800s (30 minuti).
Tempo di esecuzione massimo (scheduling.maxRunningTime)
Una durata di esecuzione massima in secondi con il suffisso s (ad esempio 7200s) per il job di addestramento. La durata limitata inizia quando il job entra nello stato RUNNING. Se dopo questo periodo di tempo il job è ancora in esecuzione, AI Platform Training lo annulla. Questo campo è facoltativo e il valore predefinito è sette giorni (604800s).
Account di servizio (serviceAccount)
L'indirizzo email di un account di servizio che AI Platform Training utilizzerà quando esegue l'applicazione di addestramento. In questo modo la tua applicazione di addestramento può accedere alle risorse Google Cloud senza concedere l'accesso diretto all'account di servizio AI Platform gestito da Google del progetto. Questo campo è facoltativo. Scopri di più sui requisiti per gli account di servizio personalizzati.

Formattazione dei parametri di configurazione

Il modo in cui specifichi i dettagli di configurazione dipende da come inizi il job di addestramento:

gcloud

Fornisci i dettagli di configurazione del job al comando gcloud ai-platform jobs submit training. Puoi farlo in due modi:

  • Con flag della riga di comando.
  • In un file YAML che rappresenta la risorsa Job. Puoi assegnare a questo file il nome che preferisci. Per convenzione il nome è config.yaml.

Anche se utilizzi un file YAML, alcuni dettagli devono essere forniti come flag della riga di comando. Ad esempio, devi fornire il flag --module-name e almeno uno tra --package-path o --packages. Se utilizzi --package-path, devi includere anche --job-dir o --staging-bucket. Inoltre, devi fornire il flag --region o impostare una regione predefinita per il tuo client gcloud. Queste opzioni, e qualsiasi altra fornita come flag della riga di comando, sostituiranno i valori relativi a queste opzioni nel file di configurazione.

Esempio 1: in questo esempio scegli un cluster di macchine preconfigurate e fornisci tutti i dettagli richiesti come flag della riga di comando quando invii il job. Non è necessario alcun file di configurazione. Consulta la guida all'invio del job nella sezione successiva.

Esempio 2: l'esempio seguente mostra i contenuti del file di configurazione di un job con un cluster di elaborazione personalizzato. Il file di configurazione include alcuni dei dettagli di configurazione, supponendo che tu fornisca gli altri dettagli obbligatori sotto forma di flag della riga di comando quando invii il job.

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m
  workerType: complex_model_m
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
  runtimeVersion: '2.11'
  pythonVersion: '3.7'
  scheduling:
    maxWaitTime: 3600s
    maxRunningTime: 7200s

L'esempio precedente specifica la versione Python 3.7, disponibile quando utilizzi il runtime di AI Platform Training versione 1.15 o successive. Configura inoltre le macchine virtuali worker e del server dei parametri. Configura queste macchine solo se esegui l'addestramento distribuito utilizzando TensorFlow o container personalizzati. Scopri di più sui tipi di macchine.

Python

Quando invii un job di addestramento utilizzando la libreria client delle API di Google per Python, imposta la configurazione in un dizionario con la stessa struttura della risorsa Job. Si tratta di un dizionario con due chiavi: jobId e trainingInput, dove i rispettivi dati sono il nome del job e un secondo dizionario con le chiavi degli oggetti nella risorsa TrainingInput.

L'esempio seguente mostra come creare una rappresentazione di job per un job con un cluster di elaborazione personalizzato.

training_inputs = {
    'scaleTier': 'CUSTOM',
    'masterType': 'complex_model_m',
    'workerType': 'complex_model_m',
    'parameterServerType': 'large_model',
    'workerCount': 9,
    'parameterServerCount': 3,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task',
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7',
    'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}

job_spec = {'jobId': 'my_job_name', 'trainingInput': training_inputs}

Tieni presente che training_inputs e job_spec sono identificatori arbitrari: puoi assegnare a questi dizionari il nome che preferisci. Tuttavia, le chiavi del dizionario devono essere denominati esattamente come mostrato, per corrispondere ai nomi nelle risorse Job e TrainingInput.

L'esempio precedente specifica la versione Python 3.7, disponibile quando utilizzi il runtime di AI Platform Training versione 1.15 o successive. Configura inoltre le macchine virtuali worker e del server dei parametri. Configura queste macchine solo se esegui l'addestramento distribuito utilizzando TensorFlow o container personalizzati. Scopri di più sui tipi di macchine.

Invio del job in corso...

Quando invii un job di addestramento, specifichi due insiemi di flag:

  • Parametri di configurazione del job. AI Platform Training necessita di questi valori per configurare le risorse nel cloud ed eseguire il deployment dell'applicazione su ciascun nodo nel cluster di elaborazione.
  • Argomenti utente o parametri dell'applicazione. AI Platform Training trasmette il valore di questi flag alla tua applicazione.

Crea il tuo lavoro:

gcloud

Invia un job di addestramento utilizzando il comando gcloud ai-platform jobs submit training.

Innanzitutto, è utile definire alcune variabili di ambiente contenenti i dettagli di configurazione. Per creare un nome job, il seguente codice aggiunge la data e l'ora al nome del modello:

PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.11"

Il seguente job di invio corrisponde alla configurazione example 1 riportata sopra, in cui puoi scegliere un livello di scalabilità preconfigurato (basic) e decidere di fornire tutti i dettagli della configurazione tramite flag della riga di comando. Non è necessario un file config.yaml:

gcloud ai-platform jobs submit training $JOB_NAME \
        --scale-tier basic \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Il seguente job di invio corrisponde alla configurazione example 2 riportata sopra, in cui parte della configurazione è presente nel file e tu fornisci gli altri dettagli tramite flag della riga di comando:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $PACKAGE_PATH \
        --module-name $MODULE_NAME \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Note:

  • Se specifichi un'opzione sia nel file di configurazione (config.yaml) sia come flag della riga di comando, il valore nella riga di comando sostituisce il valore nel file di configurazione.
  • Il flag -- vuoto contrassegna la fine dei flag specifici gcloud e l'inizio di USER_ARGS che vuoi passare alla tua applicazione.
  • I flag specifici per AI Platform Training, come --module-name, --runtime-version e --job-dir, devono precedere il flag -- vuoto. Questi flag vengono interpretati dal servizio AI Platform Training.
  • Il flag --job-dir, se specificato, deve precedere il flag -- vuoto, perché AI Platform Training utilizza --job-dir per convalidare il percorso.
  • L'applicazione deve gestire anche il flag --job-dir, se specificato. Anche se il flag precede il carattere -- vuoto, --job-dir viene passato anche all'applicazione sotto forma di flag della riga di comando.
  • Puoi definire tutti gli elementi USER_ARGS di cui hai bisogno. AI Platform Training passa --user_first_arg, --user_second_arg e così via alla tua applicazione.

Python

Puoi utilizzare la libreria client delle API di Google per Python per chiamare l'API AI Platform Training and Prediction senza creare manualmente richieste HTTP. Prima di eseguire il seguente esempio di codice, devi configurare l'autenticazione.

  1. Salva l'ID progetto nel formato necessario alle API ('projects/_projectname'):

    project_name = 'my_project_name'
    project_id = 'projects/{}'.format(project_name)
    
  2. Ottieni una rappresentazione Python dei servizi di AI Platform Training:

    cloudml = discovery.build('ml', 'v1')
    
  3. Compila la richiesta e inviala. Tieni presente che job_spec è stato creato nel passaggio precedente in cui hai formattato i parametri di configurazione

    request = cloudml.projects().jobs().create(body=job_spec,
                  parent=project_id)
    response = request.execute()
    
  4. Individua eventuali errori HTTP. Il modo più semplice è inserire il comando precedente in un blocco try:

    try:
        response = request.execute()
        # You can put your code for handling success (if any) here.
    
    except errors.HttpError, err:
        # Do whatever error response is appropriate for your application.
        # For this example, just send some text to the logs.
        # You need to import logging for this to work.
        logging.error('There was an error creating the training job.'
                      ' Check the details:')
        logging.error(err._get_reason())
    

Passaggi successivi