I job di addestramento personalizzato (CustomJob
risorse nell'API Vertex AI) sono il modo di base per eseguire il codice di addestramento di machine learning personalizzato (ML) in Vertex AI.
Prima di inviare un lavoro
Prima di creare un CustomJob
in Vertex AI, devi creare un'applicazione di addestramento Python o un'immagine container personalizzata per definire il codice e le dipendenze di addestramento che vuoi eseguire su Vertex AI.
Ti consigliamo di utilizzare la funzionalità autopackaging di Google Cloud CLI,
descritta in una sezione successiva di questa guida, per creare un'immagine container Docker
dal codice sulla tua macchina locale, eseguire il push di questa immagine container
in Container Registry e creare un CustomJob
, il tutto con un solo comando.
In caso contrario, devi creare manualmente un'applicazione di addestramento Python o un'immagine container personalizzata.
Se non sai quale di queste opzioni scegliere, consulta i requisiti del codice di addestramento per saperne di più.
Che cosa include un job personalizzato
Quando crei un job personalizzato, specifichi le impostazioni necessarie a Vertex AI per eseguire il codice di addestramento, tra cui:
- Un pool di worker per l'addestramento a nodo singolo (
WorkerPoolSpec
) o più pool di worker per l'addestramento distribuito - Impostazioni facoltative per la configurazione della pianificazione dei job (
Scheduling
), l'impostazione di determinate variabili di ambiente per il codice di addestramento, l'utilizzo di un account di servizio personalizzato e l'utilizzo del peering di rete VPC.
All'interno dei pool di worker, puoi specificare le seguenti impostazioni:
- Tipi di macchine e acceleratori
- Configurazione del tipo di codice di addestramento eseguito dal pool di worker: un'applicazione di addestramento Python (
PythonPackageSpec
) o un container personalizzato (ContainerSpec
).
Puoi anche configurare job personalizzati in modo che vengano eseguiti su una risorsa permanente anziché creare nuove risorse di calcolo durante l'avvio del job. Per scoprire di più sulla risorsa permanente, consulta Creare e utilizzare una risorsa permanente.
Configura addestramento distribuito
Puoi configurare un CustomJob
per l'addestramento distribuito specificando più pool di worker.
La maggior parte degli esempi in questa pagina mostra job di addestramento a replica singola con un pool di worker. Per modificarle per l'addestramento distribuito:
- Utilizza il primo pool di worker per configurare la replica principale e imposta il numero di repliche su 1.
- Aggiungi altri pool di worker per configurare repliche di worker, repliche di server dei parametri o repliche di valutazione, se il tuo framework di machine learning supporta queste attività aggiuntive del cluster per l'addestramento distribuito.
Scopri di più sull'utilizzo dell'addestramento distribuito.
Crea un CustomJob
Per creare un CustomJob
, segui le istruzioni fornite in una delle seguenti schede,
a seconda dello strumento che vuoi utilizzare. Se utilizzi gcloud CLI, puoi utilizzare un singolo comando per creare un pacchetto automatico del codice di addestramento sulla tua macchina locale in un'immagine container Docker, eseguire il push dell'immagine del container in Container Registry e creare un CustomJob
. Altre opzioni presuppongono che tu abbia già creato un'applicazione di addestramento Python o un'immagine container personalizzata.
gcloud
Negli esempi seguenti viene utilizzato il comando gcloud ai custom-jobs create
.
Se il codice di addestramento è sul computer locale, ti consigliamo di seguire la sezione Con autopackaging. In alternativa, se hai già creato un'applicazione di addestramento Python o un'immagine container personalizzata, passa alla sezione Senza pacchettizzazione automatica.
Con imballaggio automatico
Se il codice di addestramento è sul computer locale, puoi utilizzare un singolo comando per eseguire le seguenti operazioni:
- Crea un'immagine Docker personalizzata in base al tuo codice.
- Esegui il push dell'immagine a Container Registry.
- Avvia una
CustomJob
basata sull'immagine.
Il risultato è simile alla creazione di un oggetto CustomJob
utilizzando qualsiasi altro container personalizzato; puoi utilizzare questa versione del comando se opportuno per il tuo flusso di lavoro.
Prima di iniziare
Poiché questa versione del comando crea ed esegue il push di un'immagine Docker, devi eseguire la seguente configurazione sul tuo computer locale:
Se utilizzi Linux, configura Docker in modo da poterlo eseguire senza
sudo
.Attiva l'API Container Registry.
Configura l'autenticazione per Docker in modo da poter eseguire il push delle immagini Docker in Container Registry:
gcloud auth configure-docker
Crea ed esegui il push dell'immagine Docker, quindi crea un CustomJob
Il seguente comando crea un'immagine Docker basata su un'immagine container di addestramento predefinita e sul codice Python locale, esegue il push dell'immagine in Container Registry e crea un elemento CustomJob
.
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH
Sostituisci quanto segue:
LOCATION: la regione in cui verrà eseguito il container o il pacchetto Python.
JOB_NAME: obbligatorio. Un nome visualizzato per
CustomJob
.MACHINE_TYPE: il tipo di macchina. Consulta i tipi di macchine disponibili per l'addestramento.
REPLICA_COUNT: il numero di repliche worker da utilizzare. Nella maggior parte dei casi, impostalo su
1
per il primo pool di worker.EXECUTOR_IMAGE_URI: l'URI dell'immagine container che esegue il codice fornito. Consulta i container predefiniti disponibili per l'addestramento.
Questa immagine funge da immagine di base per la nuova immagine Docker che stai creando con questo comando.
WORKING_DIRECTORY: una directory nel tuo file system locale contenente lo script del punto di ingresso che esegue il tuo codice di addestramento (vedi il seguente elemento dell'elenco).
Puoi utilizzare la directory padre dello script o una directory di livello superiore. Potrebbe essere necessario utilizzare una directory di livello superiore per specificare un nome completo per il modulo Python (vedi il seguente elemento dell'elenco). È consigliabile utilizzare anche una directory di livello superiore se contiene un file
requirements.txt
osetup.py
. Per saperne di più, consulta Installare le dipendenze.Tieni presente che, anche se specifichi una directory di livello superiore, questo comando copia solo la directory padre dello script del punto di ingresso nell'immagine Docker.
SCRIPT_PATH: il percorso, relativo a WORKING_DIRECTORY sul tuo file system locale, dello script che è il punto di ingresso per il codice di addestramento. Può essere uno script Python (che termina con
.py
) o uno script Bash.Ad esempio, se vuoi eseguire
/hello-world/trainer/task.py
e WORKING_DIRECTORY è/hello-world
, utilizzatrainer/task.py
per questo valore.Utilizza
python-module
anzichéscript
Facoltativamente, puoi sostituire
script=SCRIPT_PATH
conpython-module=PYTHON_MODULE
per specificare il nome di un modulo Python in WORKING_DIRECTORY da eseguire come punto di contatto per l'addestramento. Ad esempio, invece discript=trainer/task.py
, potresti specificarepython-module=trainer.task
.In questo caso, il container Docker risultante carica il codice come modulo anziché come script. Ti consigliamo di utilizzare questa opzione se lo script del punto di ingresso importa altri moduli Python in WORKING_DIRECTORY.
Installa le dipendenze
Quando utilizzi l'autopackaging, puoi installare le dipendenze Python nel container negli stessi modi disponibili quando utilizzi il comando local-run
dell'interfaccia a riga di comando gcloud. Per informazioni sui vari modi per installare le dipendenze Python, leggi la sezione Installare le dipendenze della guida al comando local-run
.
La sintassi per specificare le dipendenze è leggermente diversa quando utilizzi
autopackaging rispetto a quando utilizzi il comando local-run
. Anziché utilizzare i flag della riga di comando per specificare le dipendenze, devi utilizzare le opzioni nel valore del flag --worker-pool-spec
. Inoltre, i valori in queste opzioni devono essere separati da punto e virgola anziché da virgole. Nello specifico, la sintassi:
Anziché il flag
--local-package-path
del comandolocal-run
, usa l'opzionelocal-package-path
nel valore del flag--worker-pool-spec
. Se la directory di lavoro specificata con questa opzione contiene un filerequirements.txt
osetup.py
, la pacchettizzazione automatica installa le dipendenze in base a questo file.L'esempio precedente mostra questa sintassi.
(Facoltativo) Al posto del flag
--requirements
, usa l'opzionerequirements
nel valore del flag--worker-pool-spec
. Anziché separare le dipendenze PyPI con virgole, utilizza il punto e virgola.(Facoltativo) Al posto del flag
--extra-packages
, usa l'opzioneextra-packages
nel valore del flag--worker-pool-spec
. Anziché separare le dipendenze locali con virgole, utilizza il punto e virgola.(Facoltativo) Al posto del flag
--extra-dirs
, usa l'opzioneextra-dirs
nel valore del flag--worker-pool-spec
. Anziché separare i percorsi delle directory con virgole, usa il punto e virgola.
L'esempio seguente mostra come installare le dipendenze utilizzando tutte le tecniche facoltative. Puoi specificare qualsiasi sottoinsieme. Per dimostrare la sintassi con punto e virgola, l'esempio specifica due valori per ogni opzione. Per ridurre
la lunghezza dell'esempio, le altre opzioni --worker-pool-spec
vengono sostituite con
[...]
.
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=[...],requirements=PYPI_DEP_1;PYPI_DEP_2,extra-packages=LOCAL_DEP_1;LOCAL_DEP_2,extra-dirs=EXTRA_DIR_1;EXTRA_DIR_2
Per informazioni sui valori appropriati per questi segnaposto, consulta "Dipendenze di installazione" nella guida al comando local-run
.
Senza imballaggio automatico
Se non utilizzi l'autopackaging, puoi creare un CustomJob
con un comando
simile a uno dei seguenti. A seconda che tu abbia creato un'applicazione di addestramento Python o un'immagine container personalizzata, scegli una delle seguenti schede:
App di addestramento Python
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE
Sostituisci quanto segue:
- LOCATION: la regione in cui verrà eseguito il container o il pacchetto Python.
-
JOB_NAME: obbligatorio. Un nome visualizzato per
CustomJob
. - PYTHON_PACKAGE_URIS: elenco separato da virgole di URI Cloud Storage che specificano i file dei pacchetti Python che sono il programma di addestramento e i relativi pacchetti dipendenti. Il numero massimo di URI di pacchetto è 100.
- MACHINE_TYPE: il tipo di macchina. Consulta i tipi di macchine disponibili per l'addestramento.
-
REPLICA_COUNT: il numero di repliche worker da utilizzare. Nella maggior parte dei casi,
impostalo su
1
per il primo pool di worker. - EXECUTOR_IMAGE_URI: l'URI dell'immagine container che esegue il codice fornito. Consulta i container predefiniti disponibili per l'addestramento.
- PYTHON_MODULE: il nome del modulo Python da eseguire dopo l'installazione dei pacchetti.
Immagine del container personalizzato
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI
Sostituisci quanto segue:
- LOCATION: la regione in cui verrà eseguito il container o il pacchetto Python.
-
JOB_NAME: obbligatorio. Un nome visualizzato per
CustomJob
. - MACHINE_TYPE: il tipo di macchina. Consulta i tipi di macchine disponibili per l'addestramento.
-
REPLICA_COUNT: il numero di repliche worker da utilizzare. Nella maggior parte dei casi,
impostalo su
1
per il primo pool di worker. - CUSTOM_CONTAINER_IMAGE_URI: l'URI di un'immagine container in Artifact Registry, Container Registry o Docker Hub da eseguire su ogni replica worker.
Addestramento distribuito
Per eseguire l'addestramento distribuito, specifica il flag --worker-pool-spec
più volte, una per ogni pool di worker.
Se utilizzi l'autopackaging, devi specificare solo local-package-path
,
script
e altre opzioni relative all'autopackaging nel primo pool di worker.
Ometti i campi relativi al codice di addestramento nei pool di worker successivi, che utilizzeranno tutti lo stesso container di addestramento creato dall'autopackaging.
Ad esempio, il seguente comando adatta un esempio di imballaggio automatico precedente per utilizzare un secondo pool di worker:
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT
Se non utilizzi la pacchettizzazione automatica, specifica ogni pool di worker in modo completo e indipendente; non omettere alcun campo.
I comandi seguenti adattano gli esempi precedenti in modo da utilizzare un secondo pool di worker:
App di addestramento Python
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--python-package-uris=PYTHON_PACKAGE_URIS \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,python-module=PYTHON_MODULE \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COUNT,executor-image-uri=SECOND_POOL_EXECUTOR_IMAGE_URI,python-module=SECOND_POOL_PYTHON_MODULE
Immagine del container personalizzato
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI \
--worker-pool-spec=machine-type=SECOND_POOL_MACHINE_TYPE,replica-count=SECOND_POOL_REPLICA_COU