Esecuzione di un job di addestramento

AI Platform Training fornisce l'addestramento del modello 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 insieme a eventuali dipendenze insolite in un bucket Cloud Storage. Nota: se utilizzi Google Cloud CLI per inviare il job, puoi pacchettizzare l'applicazione e inviare il job nello stesso passaggio.

Configurazione del job

Per passare i parametri al servizio di addestramento, imposta 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 restanti parametri in un file di configurazione YAML, denominato config.yaml per convenzione. Il file di configurazione rispecchia la struttura della rappresentazione JSON della risorsa Job. Il percorso del file di configurazione viene trasmesso 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 del 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. Se specifichi questo campo, potrebbero essere applicati costi aggiuntivi del disco.
Pacchetto dell'applicazione di addestramento (packageUris)
Un'applicazione di addestramento in pacchetto archiviata in una località di Cloud Storage. Se usi Google Cloud CLI, la fase di confezione delle applicazioni è in gran parte automatizzata. Consulta i dettagli nella guida alla pacchettizzazione dell'applicazione.
Nome modulo (pythonModule)
Il nome del modulo principale nel tuo pacchetto. Il modulo principale è il file Python che chiami per avviare l'applicazione. Se usi il comando gcloud per inviare il job, specifica il nome del modulo principale 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 in cui sono archiviati i dati di addestramento. Consulta le regioni disponibili per i servizi di AI Platform Training.
Directory dei 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 il modello addestrato in un file alla fine del job. È necessaria una posizione in 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 del 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 di utilizzare la 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 consenti al job di rimanere negli stati 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 l'esecuzione del job per più di un determinato periodo di tempo. 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 per impostazione predefinita non è previsto alcun limite. Se specifichi questo campo, devi impostare il valore almeno su 1800s (30 minuti).
Tempo di esecuzione massimo (scheduling.maxRunningTime)
Una durata massima di esecuzione 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 il job è ancora in esecuzione dopo questo periodo di tempo, AI Platform Training lo annulla. Questo campo è facoltativo e per impostazione predefinita è impostato su 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'agente di servizio AI Platform del tuo 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 della 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 un flag --package-path o --packages. Se usi --package-path, devi includere anche --job-dir o --staging-bucket. Inoltre, devi fornire il flag --region o impostare una regione predefinita per il tuo cliente gcloud. Queste opzioni, e tutti gli altri che fornisci come flag della riga di comando, sostituiranno i valori per queste opzioni nel file di configurazione.

Esempio 1: in questo esempio scegli un cluster di macchine preconfigurate e fornisci tutti i dettagli richiesti sotto forma di flag della riga di comando al momento dell'invio del job. Non è necessario alcun file di configurazione. Consulta la guida per l'invio del job nella sezione successiva.

Esempio 2: l'esempio seguente mostra i contenuti del file di configurazione per un job con un cluster di elaborazione personalizzata. Il file di configurazione include alcuni ma non tutti i dettagli di configurazione, supponendo che tu fornisca gli altri dettagli richiesti sotto forma di flag della riga di comando al momento dell'invio del 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 Python versione 3.7, disponibile quando utilizzi AI Platform Training del runtime 1.15 o versioni successive. Inoltre, configura le macchine virtuali worker e server dei parametri. Configura queste macchine solo se esegui l'addestramento distribuito utilizzando TensorFlow o container personalizzati. Ulteriori informazioni sui tipi di macchine.

Python

Quando invii un job di addestramento utilizzando la libreria client delle API di Google per Python, imposta la tua configurazione in un dizionario con la stessa struttura della risorsa Job. Si tratta di un dizionario con due chiavi: jobId e trainingInput, con i rispettivi dati come nome del job e un secondo dizionario con chiavi per gli 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 Python versione 3.7, disponibile quando utilizzi AI Platform Training del runtime 1.15 o versioni successive. Inoltre, configura le macchine virtuali worker e server dei parametri. Configura queste macchine solo se esegui l'addestramento distribuito utilizzando TensorFlow o container personalizzati. Ulteriori informazioni 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 ha bisogno 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 all'applicazione.

Crea il tuo job:

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 all'esempio 1 di cui sopra, in cui puoi scegliere un livello di scalabilità preconfigurato (basic) e decidere di fornire tutti i dettagli di 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 di cui sopra, in cui una parte della configurazione è presente nel file e gli altri dettagli vengono forniti 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 di gcloud e l'inizio di USER_ARGS che vuoi passare all'applicazione.
  • I flag specifici dell'AI Platform Training, come --module-name, --runtime-version e --job-dir, devono precedere il flag -- vuoto. Il servizio AI Platform Training interpreta questi flag.
  • Il flag --job-dir, se specificato, deve precedere il flag -- vuoto, perché AI Platform Training utilizza --job-dir per convalidare il percorso.
  • La tua applicazione deve gestire anche il flag --job-dir, se specificato. Anche se il flag precede il carattere -- vuoto, --job-dir viene passato all'applicazione anche sotto forma di flag della riga di comando.
  • Puoi definire tutti gli elementi USER_ARGS che ti servono. AI Platform Training passa --user_first_arg, --user_second_arg e così via all'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 richiesto dalle 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. Forma la tua 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