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 su projects.jobs.create.

Prima di iniziare

Prima di poter inviare un job di addestramento, devi Pacchettizzare la tua applicazione e caricarla. ed eventuali dipendenze insolite in un bucket Cloud Storage. Nota: se utilizzi Google Cloud CLI per inviare il tuo job, puoi pacchettizzare per presentare la candidatura e inviare il lavoro nello stesso passaggio.

Configurazione del job

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

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

  • Specifica i parametri di addestramento più comuni come flag Comando gcloud ai-platform jobs submit training.
  • Passa i parametri rimanenti in un file di configurazione YAML, config.yaml per convenzione. Il file di configurazione rispecchia della rappresentazione JSON della risorsa Job. Tu passa il percorso del tuo file di configurazione nel flag --config dell'oggetto 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 (lettere minuscole, numeri e trattini bassi) iniziando con una lettera).
Configurazione del cluster (scaleTier)
Un livello di scalabilità specificando il tipo di cluster di elaborazione su cui eseguire il job. Può essere il 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 avvio da 100 GB pd-ssd del disco. La specifica di questo campo potrebbe comportare costi aggiuntivi per il disco.
Pacchetto dell'applicazione di addestramento (packageUris)
Un'applicazione di addestramento in pacchetto che si trova in una fase intermedia in un ambiente Cloud Storage in ogni località. Se utilizzi Google Cloud CLI, l'applicazione di pacchettizzazione è in gran parte automatizzata. Leggi 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 utilizzi gcloud per inviare il job, specifica il nome del modulo principale nel Flag --module-name. Consulta la guida per la pacchettizzazione dell'applicazione.
Regione (region)
La regione Compute Engine in cui vuoi eseguire il job. Dovresti il job di addestramento nella stessa regione di Cloud Storage in cui sono archiviati i dati di addestramento. Consulta le regioni disponibili per AI Platform Training servizi.
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 addestrato in un file al termine del job. È necessaria una Percorso di Cloud Storage in cui salvarle. Il tuo progetto Google Cloud deve avere accesso in scrittura al bucket. La il servizio di addestramento passa automaticamente il percorso impostato per la directory del job all'applicazione di addestramento come argomento della riga di comando denominato job_dir. Tu può analizzarlo insieme agli altri argomenti dell'applicazione e usarlo il tuo codice. Il vantaggio di usare la directory dei job è che l'addestramento convalida la directory prima di avviare l'applicazione.
Versione runtime (runtimeVersion)
Il runtime di AI Platform Training da utilizzare per il job.
Versione Python (pythonVersion)
La versione Python da utilizzare per il lavoro. Python 3.5 è disponibile nelle versioni del runtime 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 es. 3600s) che determina per quanto tempo consenti al tuo job di rimanere in QUEUED e PREPARING stati. AI Platform Training non inizia sempre a eseguire il job immediatamente a causa di vincoli delle risorse; specificare questo campo se non è disposto ad attendere più a lungo di una determinata durata per l'esecuzione del job. La una durata limitata inizia quando crei il job. Se il job non è stato ancora è entrato nello stato RUNNING entro la fine di questo periodo, AI Platform Training annulla il job. 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 tuo job di addestramento. La durata limitata inizia quando il job entra nello stato RUNNING. Se il job è ancora in esecuzione dopo questo intervallo di di addestramento, AI Platform Training annulla il job. Questo campo è facoltativo e predefinito a 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 puoi addestrare delle applicazioni alle risorse Google Cloud senza concedere l'accesso all'agente di servizio AI Platform del tuo progetto. Questo campo è facoltativo. Scopri di più sui requisiti per il servizio personalizzato Google Cloud.

Formattazione dei parametri di configurazione

Il modo in cui specifichi i dettagli di configurazione dipende da come stai avviando un job di addestramento:

gcloud

Fornisci i dettagli di configurazione del job 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 un nome questo file come preferisci. Per convenzione il nome è config.yaml.

Anche se utilizzi un file YAML, alcuni dettagli devono essere forniti come dalla 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 un valore predefinito regione per gcloud di destinazione. Queste opzioni, e tutte quelle fornite come flag della riga di comando, sostituiranno per queste opzioni nel file di configurazione.

Esempio 1: in questo esempio, hai scelto un cluster di macchine preconfigurato e fornisci tutti i dettagli richiesti sotto forma di flag della riga di comando quando 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 della configurazione per un job con un'elaborazione personalizzata cluster. Il file di configurazione include ma non tutti i dettagli di configurazione, supponendo che tu fornisca l'altra dettagli richiesti come i flag della riga di comando quando si invia 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 Python la versione 3.7, disponibile quando si utilizza il runtime di AI Platform Training 1.15 o versioni successive. Inoltre, configura le macchine virtuali worker e server dei parametri; solo configurare queste macchine se esegui l'addestramento distribuito con TensorFlow di container personalizzati. Scopri di più sulla macchina di classificazione.

Python

Quando invii un job di addestramento utilizzando la libreria client dell'API di Google per Python, imposta la tua configurazione in un dizionario con la stessa struttura Job. Si tratta di un dizionario con due chiavi: jobId e trainingInput, con i rispettivi dati corrispondenti al nome per il job e un secondo dizionario con chiavi per gli oggetti 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: tu puoi assegnare a questi dizionari il nome che preferisci. Tuttavia, le chiavi del dizionario deve essere denominato esattamente come mostrato, affinché corrisponda a quelli in Job e TrainingInput.

L'esempio precedente specifica Python la versione 3.7, disponibile quando si utilizza il runtime di AI Platform Training 1.15 o versioni successive. Inoltre, configura le macchine virtuali worker e server dei parametri; solo configurare queste macchine se esegui l'addestramento distribuito con TensorFlow di container personalizzati. Scopri di più sulla macchina di classificazione.

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 impostare le risorse nel cloud ed esegui il deployment della tua applicazione su ciascun nodo di elaborazione.
  • Argomenti utente o parametri dell'applicazione. Pass di AI Platform Training il valore di questi flag alla tua applicazione.

Crea il tuo job:

gcloud

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

Innanzitutto, è utile definire alcune variabili di ambiente contenenti della configurazione. Per creare un nome job, il seguente codice aggiunge la macro data e 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 configurazione qui sopra, dove scegli un livello di scalabilità preconfigurato (basic) e se deciderai di fornire tutti i dettagli della configurazione tramite flag della riga di comando. Là 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 all'esempio 2 di configurazione qui sopra, dove parte della configurazione è 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) e come flag della riga di comando, il valore nel riga di comando sostituisce il valore nel file di configurazione.
  • Il flag -- vuoto segna la fine del gcloud di segnalazioni specifiche e l'inizio del USER_ARGS da trasferire alla tua richiesta.
  • I flag specifici per AI Platform Training, --module-name, --runtime-version e --job-dir, deve precedere il flag -- vuoto. Il servizio AI Platform Training interpreta questi flag.
  • Il flag --job-dir, se specificato, deve precedere il carattere 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 la bandiera precede il campo -- vuoto, Inoltre, il --job-dir viene passato alla tua richiesta come flag della riga di comando.
  • Puoi definire tutti i USER_ARGS di cui hai bisogno. Pass di AI Platform Training: --user_first_arg, --user_second_arg e così via fino alla tua domanda.

Python

Puoi utilizzare lo Libreria client dell'API di Google per Python per chiamare il metodo API AI Platform Training e Prediction senza creare manualmente richieste HTTP. Prima di eseguire nell'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 la pagina job_spec è stata creata nel passaggio precedente in cui hai formattato 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 è 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