Esecuzione di un job di addestramento

L'addestramento di AI Platform fornisce 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 da riga di comando o inviando una richiesta all'API al servizio projects.jobs.create.

Prima di iniziare

Prima di poter inviare un job di addestramento, devi paccogare l'applicazione e caricarla insieme a 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

Trasmetti 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 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 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 deve iniziare 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 disco di avvio pd-ssd da 100 GB. 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, il passaggio di imballaggio dell'applicazione è in gran parte automatizzato. Leggi i dettagli nella guida per la pacchettizzazione dell'applicazione.
Nome del modulo (pythonModule)
Il nome del modulo principale nel pacchetto. Il modulo principale è il file Python che chiami per avviare l'applicazione. Se utilizzi 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 il job di addestramento nella stessa regione di Cloud Storage in cui sono archiviati i dati di addestramento. Consulta le regioni disponibili per i servizi 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 controlli regolari durante l'addestramento e il modello 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 a questo bucket. 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. 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 formazione 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 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 il tempo per cui consenti al job di rimanere negli stati QUEUED e PREPARING. 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 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 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).
Service account (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 fornire all'applicazione di addestramento l'accesso alle risorse di Google Cloud senza concedere l'accesso diretto all'agente di servizio della piattaforma AI del tuo progetto. Questo campo è facoltativo. Scopri di più sui requisiti per gli account servizio personalizzati.

Formattazione dei parametri di configurazione

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

gcloud

Fornisci i dettagli di configurazione del job Comando gcloud ai-platform jobs submit training. Puoi eseguire questa operazione in due modi:

  • Con i flag della riga di comando.
  • In un file YAML che rappresenta la risorsa Job. Puoi assegnare al file qualsiasi nome. Per convenzione, il nome è config.yaml.

Anche se utilizzi un file YAML, alcuni dettagli devono essere forniti come parametri a 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 cliente gcloud. Queste opzioni, e quelle eventualmente fornite come flag della riga di comando, sostituiranno per queste opzioni nel file di configurazione.

Esempio 1: in questo esempio scegli un cluster di macchine preconfigurato e fornisci tutti i dettagli richiesti come flag a riga di comando al momento dell'invio del 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 personalizzato. 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. Configura inoltre le macchine virtuali dei worker e dei server dei parametri. Configura queste macchine solo se esegui l'addestramento distribuito utilizzando TensorFlow o 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 la versione 3.7 di Python, che è disponibile quando utilizzi la versione 1.15 o successive dell'ambiente di runtime di AI Platform Training. 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, specifichi due insiemi di flag:

  • Parametri di configurazione del job. AI Platform Training ha bisogno di questi valori per configurare le risorse nel cloud e implementare l'applicazione su ogni nodo del cluster di elaborazione.
  • Argomenti utente o parametri dell'applicazione. AI Platform Training passa il valore di questi flag alla tua applicazione.

Crea il job:

gcloud

Invia un job di addestramento utilizzando il 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"

L'invio del job riportato di seguito corrisponde all'esempio 1 di configurazione riportato sopra, in cui scegli un livello di scalabilità preconfigurato (basic) e decidi di fornire tutti i dettagli di configurazione tramite i flag a 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) sia come flag della riga di comando, il valore nella riga di comando sostituisce il valore nel file di configurazione.
  • Il flag -- vuoto indica la fine dei flag specifici gcloud e l'inizio dei flag USER_ARGS che vuoi passare all'applicazione.
  • I flag specifici per AI Platform Training, ad esempio --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 il --job-dir per convalidare il percorso.
  • La tua applicazione deve gestire anche il flag --job-dir se specificato. Anche se la bandiera viene prima del 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 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. Crea 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 è 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