Esecuzione di un job di addestramento

AI Platform Training offre l'addestramento dei 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 ed 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

Puoi passare i parametri al servizio di addestramento impostando i membri della risorsa Job, che include gli elementi della 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. Devi 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 del cluster (scaleTier)
Un livello di scalabilità che specifica il tipo di cluster di elaborazione su cui eseguire il job. Può trattarsi del livello di scalabilità CUSTOM, nel qual caso devi specificare anche in modo esplicito 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 addebiti aggiuntivi per il disco.
Pacchetto dell'applicazione di addestramento (packageUris)
Un'applicazione di addestramento in pacchetto che si trova in una posizione temporanea in una località di Cloud Storage. Se utilizzi Google Cloud CLI, la fase di pacchettizzazione dell'applicazione è in gran parte automatizzata. Consulta i dettagli nella guida per la 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 Compute Engine in cui vuoi eseguire il job. Dovresti eseguire il job di addestramento nella stessa regione del bucket Cloud Storage in cui sono archiviati i dati di addestramento. Vedi le regioni disponibili per i servizi di AI Platform Training.
Directory del job (jobDir)
Il percorso di una località di 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. Hai bisogno di una località 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 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 codice. Il vantaggio di usare la directory dei job è che il servizio di addestramento convalida la directory prima di avviare l'applicazione.
Versione runtime (runtimeVersion)
La versione del 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 nella versione 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 più di una determinata durata per l'esecuzione del job. La durata limitata inizia quando crei il job. Se il job non è ancora entrato nello stato RUNNING entro la fine di questo periodo, AI Platform Training lo annulla. Questo campo è facoltativo e per impostazione predefinita non ha alcun limite. Se specifichi questo campo, devi impostare il valore su almeno 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 trascorso 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 può utilizzare durante l'esecuzione dell'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 di configurazione dipende da come stai avviando 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 i 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 tutte le altre da te fornite come flag della riga di comando, sostituiranno i valori per queste opzioni nel tuo file di configurazione.

Esempio 1: in questo esempio, scegli un cluster di macchine preconfigurato 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 per un job con un cluster di elaborazione personalizzata. Il file di configurazione include alcuni dettagli di configurazione, ma non tutti, supponendo che tu fornisca gli altri dettagli obbligatori come 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 si utilizza il runtime di AI Platform Training versione 1.15 o successive. Configura inoltre le macchine virtuali worker e server dei parametri. Configurale 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 dell'API di Google per Python, imposta la configurazione in un dizionario con la stessa struttura della risorsa Job. Ha la forma di un dizionario con due chiavi: jobId e trainingInput, dove i rispettivi dati sono il nome del job e un secondo dizionario con chiavi per gli oggetti nella risorsa TrainingInput.

L'esempio seguente mostra come creare una rappresentazione di un 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 denominate esattamente come mostrato, in modo che corrispondano ai nomi nelle risorse Job e TrainingInput.

L'esempio precedente specifica Python versione 3.7, disponibile quando si utilizza il runtime di AI Platform Training versione 1.15 o successive. Configura inoltre le macchine virtuali worker e server dei parametri. Configurale 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, devi specificare due set 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 passa 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.

In primo luogo, è utile definire alcune variabili di ambiente contenenti i dettagli della 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 invio del job corrisponde all'esempio 1 di configurazione riportato sopra, in cui scegli un livello di scalabilità preconfigurato (basic) e decidi 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 invio del job corrisponde all'esempio 2 di configurazione riportato sopra, in cui parte della configurazione si trova 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 segna la fine dei flag specifici di gcloud e l'inizio del USER_ARGS che vuoi passare all'applicazione.
  • I flag specifici di 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.
  • L'applicazione deve gestire anche il flag --job-dir, se specificato. Anche se il flag precede il campo -- vuoto, --job-dir viene passato anche all'applicazione come flag della riga di comando.
  • Puoi definire tutti i 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 dell'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 AI Platform Training:

    cloudml = discovery.build('ml', 'v1')
    
  3. Forma 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. Rileva eventuali errori HTTP. Il modo più semplice consiste nell'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