L'AI Platform Training 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 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
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 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 risorsaJob
. Devi passare il percorso del file di configurazione nel flag--config
del comandogcloud 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
Le seguenti proprietà vengono utilizzate per definire il job.
- Nome job (
jobId
) - Un nome da utilizzare per il job (solo lettere maiuscole e minuscole, numeri e trattini bassi, che devono iniziare 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
, in tal caso devi specificare anche esplicitamente il numero e il tipo di macchine da utilizzare. - Configurazione del 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 lo spazio su disco. - Pacchetto di applicazioni di addestramento (
packageUris
) - Un'applicazione di addestramento pacchettizzata di cui è stato eseguito il deployment in una posizione Cloud Storage. Se utilizzi Google Cloud CLI, il passaggio di imballaggio dell'applicazione è in gran parte automatizzato. Consulta la guida al 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. 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 AI Platform Training.
- Directory del job (
jobDir
) - Il percorso di una posizione 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. Devi avere una
posizione Cloud Storage in cui salvarli. Il 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
) - La versione del runtime di AI Platform Training da utilizzare per il job.
- Versione Python (
pythonVersion
) - La versione di Python da utilizzare per il job. Python 3.5 è disponibile nelle versioni del runtime da 1.13 a 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 statiQUEUED
ePREPARING
. AI Platform Training non avvia sempre l'esecuzione del job immediatamente a causa di limitazioni 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 statoRUNNING
entro la fine di questo periodo, AI Platform Training lo annulla. Questo campo è facoltativo e per impostazione predefinita non è previsto alcun limite. Se specifichi questo campo, devi impostare il valore su almeno1800s
(30 minuti). - Tempo di esecuzione massimo (
scheduling.maxRunningTime
) - Una durata massima di esecuzione in secondi con il suffisso
s
(ad es.7200s
) per il job di addestramento. La durata limitata inizia quando il job entra nello statoRUNNING
. 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
). - Service account (
serviceAccount
) - L'indirizzo email di un account di servizio da utilizzare da parte di AI Platform Training quando esegue l'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 AI Platform 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 al
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 tutte le altre fornite come flag della riga di comando sostituiranno i valori di 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 alcuni, ma non tutti, i dettagli di configurazione, supponendo che tu fornisca gli altri dettagli richiesti come 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 3.7 di Python, che è disponibile quando utilizzi la versione 1.15 o successive dell'ambiente di runtime di AI Platform Training. 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ù 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
. Ha la forma di un dizionario con due chiavi: jobId
e trainingInput
, i cui rispettivi dati sono il nome del job e un secondo dizionario con le chiavi per gli oggetti nella risorsa TrainingInput
.
L'esempio seguente mostra come creare una rappresentazione di 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 i nomi 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 la versione 3.7 di Python, che è disponibile quando utilizzi la versione 1.15 o successive dell'ambiente di runtime di AI Platform Training. 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ù sui tipi di macchine.
Invio del job
Quando invii un job di addestramento, specifichi due insiemi di flag:
- Parametri di configurazione dei 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 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"
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. 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
L'invio del job riportato di seguito corrisponde all'esempio 2 di configurazione riportato sopra, in cui parte della configurazione è nel file e fornisci gli altri dettagli tramite i flag a 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 specificigcloud
e l'inizio dei flagUSER_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. - L'applicazione deve gestire anche il flag
--job-dir
, se specificato. Anche se il flag precede il--
vuoto,--job-dir
viene passato anche all'applicazione come flag a 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 delle API di Google per Python per chiamare l'API AI Platform Training and Prediction senza creare manualmente le richieste HTTP. Prima di eseguire il seguente esempio di codice, devi configurare l'autenticazione.
Salva l'ID progetto nel formato richiesto dalle API ('projects/_projectname'):
project_name = 'my_project_name' project_id = 'projects/{}'.format(project_name)
Ottieni una rappresentazione Python dei servizi AI Platform Training:
cloudml = discovery.build('ml', 'v1')
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()
Cattura 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
- Monitora o visualizza il job di addestramento durante l'esecuzione.
- Scopri di più sulla specifica dei tipi di macchine.
- Scopri come configurare un job di ottimizzazione degli iperparametri.
- Preparati a eseguire il deployment del modello addestrato per la previsione.