Questa pagina mostra come utilizzare una shell interattiva per ispezionare il container su cui è in esecuzione il codice di addestramento. Puoi esaminare il file system ed eseguire utilità di debug in ogni container predefinito o container personalizzato in esecuzione su Vertex AI.
L'utilizzo di una shell interattiva per ispezionare il container di addestramento può aiutarti a eseguire il debug dei problemi relativi al codice di addestramento o alla configurazione di Vertex AI. Ad esempio, puoi utilizzare una shell interattiva per eseguire le seguenti operazioni:
- Esegui strumenti di tracciamento e profilazione.
- Analizzare l'utilizzo delle GPU.
- Controlla le autorizzazioni di Google Cloud disponibili per il container.
Inoltre, Vertex AI è integrato in TensorFlow Profiler, utile per eseguire il debug delle prestazioni dell'addestramento dei modelli per i job di addestramento personalizzato. Per maggiori dettagli, consulta Prestazioni dell'addestramento del modello di profilo con Profiler.
Prima di iniziare
Puoi utilizzare una shell interattiva quando esegui l'addestramento personalizzato con una risorsa CustomJob
, una risorsa HyperparameterTuningJob
o una risorsa TrainingPipeline
personalizzata. Quando prepari il codice di addestramento e configuri la risorsa di addestramento personalizzato che preferisci, assicurati di soddisfare i seguenti requisiti:
Assicurati che sul container di addestramento sia installato
bash
.In tutti i container di addestramento predefiniti è installato
bash
. Se crei un container personalizzato per l'addestramento, utilizza un container di base che includabash
o installabash
nel tuo Dockerfile.Eseguire l'addestramento personalizzato in un'area geografica che supporta le shell interattive.
Assicurati che chiunque voglia accedere a una shell interattiva disponga delle seguenti autorizzazioni per il progetto Google Cloud in cui viene eseguito l'addestramento personalizzato:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Se avvii l'addestramento personalizzato, molto probabilmente hai già queste autorizzazioni e puoi accedere a una shell interattiva. Tuttavia, se vuoi utilizzare una shell interattiva per ispezionare una risorsa di addestramento personalizzata creata da un altro utente della tua organizzazione, potrebbe essere necessario ottenere queste autorizzazioni.
Un modo per ottenere queste autorizzazioni è chiedere a un amministratore della tua organizzazione di concederti il ruolo Utente Vertex AI (
roles/aiplatform.user
).
Requisiti per le richieste avanzate
Se utilizzi determinate funzionalità avanzate, devi soddisfare i seguenti requisiti aggiuntivi:
Se colleghi un account di servizio personalizzato alla risorsa di addestramento personalizzato, assicurati che l'utente che voglia accedere a una shell interattiva disponga dell'autorizzazione
iam.serviceAccounts.actAs
per l'account di servizio associato.Nella guida agli account di servizio personalizzati è indicato che è necessario disporre di questa autorizzazione per collegare un account di servizio. Hai bisogno di questa autorizzazione anche per visualizzare una shell interattiva durante l'addestramento personalizzato.
Ad esempio, per creare un
CustomJob
con un account di servizio collegato, devi disporre dell'autorizzazioneiam.serviceAccounts.actAs
per l'account di servizio. Se uno dei tuoi colleghi vuole visualizzare una shell interattiva per questoCustomJob
, deve disporre della stessa autorizzazioneiam.serviceAccounts.actAs
.Se hai configurato il progetto per utilizzare i Controlli di servizio VPC con Vertex AI, tieni conto delle seguenti limitazioni aggiuntive:
Non puoi utilizzare l'IP privato per l'addestramento personalizzato.
Dall'interno di una shell interattiva, non puoi accedere alla rete internet pubblica o alle risorse Google Cloud al di fuori del tuo perimetro di servizio.
Per proteggere l'accesso alle shell interattive, devi aggiungere
notebooks.googleapis.com
come servizio limitato nel perimetro di servizio, oltre aaiplatform.googleapis.com
. Se limiti soloaiplatform.googleapis.com
e nonnotebooks.googleapis.com
, gli utenti possono accedere alle shell interattive da macchine esterne al perimetro di servizio, il che riduce i vantaggi per la sicurezza dell'utilizzo dei Controlli di servizio VPC.
Abilita shell interattive
Per abilitare shell interattive per una risorsa di addestramento personalizzata, imposta il campo API enableWebAccess
su true
quando crei CustomJob
, HyperparameterTuningJob
o TrainingPipeline
personalizzato.
I seguenti esempi mostrano come eseguire questa operazione utilizzando diversi strumenti:
Console
Segui la guida per
creare un TrainingPipeline
personalizzato nella console Google Cloud. Nel riquadro Addestra nuovo modello, quando raggiungi il passaggio Dettagli modello, segui questi passaggi:
Fai clic su Opzioni avanzate.
Seleziona la casella di controllo Abilita il debug dell'addestramento.
Quindi, completa il resto del flusso di lavoro Addestra nuovo modello.
gcloud
Se vuoi creare un
CustomJob
, esegui il comandogcloud ai custom-jobs create
e specifica il flag--enable-web-access
su questo comando.Se vuoi creare un
HyperparameterTuningJob
, esegui il comandogcloud ai hp-tuning-jobs create
e specifica il flag--enable-web-access
su questo comando.
Per informazioni su come utilizzare questi comandi, consulta le guide alla creazione di un CustomJob
e la guida alla creazione di un HyperparameterTuningJob
.
API
I seguenti corpi di richieste REST parziali mostrano dove specificare il campo enableWebAccess
per ogni tipo di risorsa di addestramento personalizzato:
CustomJob
L'esempio seguente è un corpo della richiesta parziale per il metodo API projects.locations.customJobs.create
:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Per un esempio di invio di una richiesta API per creare un CustomJob
, consulta
Creazione di job di addestramento personalizzato.
HyperparameterTuningJob
L'esempio seguente è un corpo della richiesta parziale per il metodo API projects.locations.hyperparameterTuningJobs.create
:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Per un esempio di invio di una richiesta API per creare un HyperparameterTuningJob
, consulta Utilizzo dell'ottimizzazione degli iperparametri.
Pipeline di addestramento personalizzata
I seguenti esempi mostrano i corpi delle richieste parziali per il metodo API projects.locations.trainingPipelines.create
.
Seleziona una delle seguenti schede, a seconda che tu stia utilizzando
l'ottimizzazione degli iperparametri:
Senza ottimizzazione degli iperparametri
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Con ottimizzazione degli iperparametri
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Per un esempio di invio di una richiesta API per creare un TrainingPipeline
personalizzato, consulta Creazione di pipeline di addestramento.
Python
Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, vedi Installare l'SDK Vertex AI per Python. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python.
Imposta il parametro enable_web_access
su true
quando esegui uno dei seguenti metodi:
Se vuoi creare un
CustomJob
, utilizza il metodoCustomJob.run
.Se vuoi creare un
HyperparameterTuningJob
, utilizza il metodoHyperparameterTuningJob.run
.Se vuoi creare un elemento
TrainingPipeline
personalizzato, utilizza uno dei seguenti metodi:
Accedi a una shell interattiva
Dopo aver avviato l'addestramento personalizzato in base alle indicazioni nella sezione precedente, Vertex AI genera uno o più URI che puoi utilizzare per accedere alle shell interattive. Vertex AI genera un URI univoco per ogni nodo di addestramento nel tuo job.
Puoi accedere a una shell interattiva in uno dei seguenti modi:
- Fare clic su un link nella console Google Cloud
- Usa l'API Vertex AI per ottenere l'URI dell'accesso web della shell
Naviga dalla console Google Cloud
Nella console Google Cloud, vai a una delle pagine seguenti nella sezione Vertex AI:
Se non utilizzi l'ottimizzazione degli iperparametri, vai alla pagina Job personalizzati:
Se utilizzi l'ottimizzazione degli iperparametri, vai alla pagina Job di ottimizzazione degli iperparametri:
Fai clic sul nome della risorsa di addestramento personalizzato.
Se hai creato un
TrainingPipeline
per l'addestramento personalizzato, fai clic sul nome delCustomJob
o delHyperparameterTuningJob
creato dalTrainingPipeline
. Ad esempio, se la pipeline ha il nomePIPELINE_NAME
, questo potrebbe essere chiamatoPIPELINE_NAME-custom-job
oPIPELINE_NAME-hyperparameter-tuning-job
.Nella pagina del job, fai clic su Avvia terminale web. Se il job utilizza più nodi, fai clic su Avvia terminale web accanto al nodo per il quale vuoi una shell interattiva.
Tieni presente che puoi accedere a una shell interattiva solo mentre il job è in esecuzione. Se non vedi Avvia terminale web, è possibile che Vertex AI non abbia ancora iniziato a eseguire il job oppure che il job sia già terminato o non sia riuscito. Se lo stato del job è
Queued
oPending
, attendi un minuto, quindi prova ad aggiornare la pagina.Se utilizzi l'ottimizzazione degli iperparametri, esistono link Avvia terminale web separati per ogni prova.
Recupera l'URI di accesso web dall'API
Usa il metodo API projects.locations.customJobs.get
o il metodo API projects.locations.hyperparameterTuningJobs.get
per visualizzare gli URI che puoi usare per accedere alle shell interattive.
A seconda del tipo di risorsa di addestramento personalizzato che utilizzi, seleziona una delle seguenti schede per visualizzare esempi su come trovare il campo API webAccessUris
, che contiene un URI della shell interattivo per ciascun nodo nel tuo job:
CustomJob
Le seguenti schede mostrano diversi modi per inviare una
richiesta projects.locations.customJobs.get
:
gcloud
Esegui il comando gcloud ai custom-jobs describe
:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Sostituisci quanto segue:
JOB_ID: l'ID numerico del job. Questo ID è l'ultima parte del campo
name
del job. Potresti aver visto l'ID al momento della creazione del job. Se non conosci l'ID del tuo job, puoi eseguire il comandogcloud ai custom-jobs list
e cercare il job appropriato.LOCATION: la regione in cui hai creato il job.
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
LOCATION: la regione in cui hai creato il job.
PROJECT_ID: il tuo ID progetto.
JOB_ID: l'ID numerico del job. Questo ID è l'ultima parte del campo
name
del job. Potresti aver visto l'ID al momento della creazione del job.
Metodo HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
Per inviare la richiesta, espandi una delle seguenti opzioni:
Nell'output, cerca quanto segue:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Se non vedi il campo webAccessUris
, è possibile che
Vertex AI non abbia ancora iniziato a eseguire il tuo job. Verifica che nel campo state
sia visualizzato
JOB_STATE_RUNNING
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto, quindi prova a recuperare le informazioni sul progetto.
HyperparameterTuningJob
Le seguenti schede mostrano diversi modi per inviare una
richiesta projects.locations.hyperparameterTuningJobs.get
:
gcloud
Esegui il comando gcloud ai hp-tuning-jobs describe
:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Sostituisci quanto segue:
JOB_ID: l'ID numerico del job. Questo ID è l'ultima parte del campo
name
del job. Potresti aver visto l'ID al momento della creazione del job. Se non conosci l'ID del tuo job, puoi eseguire il comandogcloud ai hp-tuning-jobs list
e cercare il job appropriato.LOCATION: la regione in cui hai creato il job.
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
LOCATION: la regione in cui hai creato il job.
PROJECT_ID: il tuo ID progetto.
JOB_ID: l'ID numerico del job. Questo ID è l'ultima parte del campo
name
del job. Potresti aver visto l'ID al momento della creazione del job.
Metodo HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
Per inviare la richiesta, espandi una delle seguenti opzioni:
Nell'output, cerca quanto segue:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Se non vedi il campo webAccessUris
, è possibile che
Vertex AI non abbia ancora iniziato a eseguire il tuo job. Verifica che nel campo state
sia visualizzato
JOB_STATE_RUNNING
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto, quindi prova a recuperare le informazioni sul progetto.
Vertex AI fornisce un set di URI della shell interattivi per ogni prova di ottimizzazione degli iperparametri man mano che la prova entra nello stato ACTIVE
. Se vuoi ottenere URI della shell interattivi per le prove successive, recupera le informazioni sul job dopo l'inizio.
L'esempio precedente mostra l'output previsto per l'addestramento a replica singola: un URI per il nodo di addestramento principale. Se esegui l'addestramento distribuito, l'output contiene un URI per ogni nodo di addestramento, identificato dal pool di worker.
Ad esempio, se il tuo job ha un pool di worker principale con una replica e un pool di worker secondario con due repliche, il campo webAccessUris
è simile al seguente:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Utilizza una shell interattiva
Per utilizzare la shell interattiva per un nodo di addestramento, vai a uno degli URI trovati nella sezione precedente. Nel browser viene visualizzata una shell Bash, che ti consente di accedere al file system del container su cui Vertex AI esegue il codice di addestramento.
Le sezioni seguenti descrivono alcuni aspetti da considerare durante l'utilizzo della shell e forniscono alcuni esempi di strumenti di monitoraggio che potresti usare nella shell.
Impedisci la fine del job
Quando Vertex AI termina di eseguire il job o la prova, perderai immediatamente l'accesso alla shell interattiva. In questo caso, potresti visualizzare il messaggio command terminated with exit code 137
o la shell potrebbe smettere di rispondere. I file creati nel file system del container non verranno mantenuti al termine del job.
In alcuni casi, potresti voler prolungare deliberatamente l'esecuzione del job per eseguire il debug con una shell interattiva. Ad esempio, puoi aggiungere al codice di addestramento un codice simile al seguente per fare in modo che il job continui per almeno un'ora dopo il verificarsi di un'eccezione:
import time
import traceback
try:
# Replace with a function that runs your training code
train_model()
except Exception as e:
traceback.print_exc()
time.sleep(60 * 60) # 1 hour
Tuttavia, tieni presente che ti saranno applicati addebiti per Vertex AI Training per tutto il tempo in cui il job continua a essere in esecuzione.
Controlla i problemi relativi alle autorizzazioni
L'ambiente shell interattivo viene autenticato utilizzando le credenziali predefinite dell'applicazione (ADC) per l'account di servizio che Vertex AI utilizza per eseguire il codice di addestramento. Per ulteriori dettagli,
puoi eseguire gcloud auth list
nella shell.
Nella shell puoi utilizzare gsutil
,
bq
e altri strumenti che supportano ADC.
Questo può aiutarti a verificare che il job sia in grado di accedere a un particolare bucket Cloud Storage, una tabella BigQuery o un'altra risorsa Google Cloud di cui il tuo codice di addestramento ha bisogno.
Visualizza l'esecuzione in Python con py-spy
py-spy
ti consente di profilare
un programma Python in esecuzione, senza modificarlo. Per utilizzare py-spy
in una
shell interattiva, segui questi passaggi:
Installa
py-spy
:pip3 install py-spy
Esegui
ps aux
nella shell e cerca il PID del programma di addestramento Python.Esegui uno dei sottocomandi descritti nella documentazione di
py-spy
, utilizzando il PID trovato nel passaggio precedente.Se utilizzi
py-spy record
per creare un file SVG, copialo in un bucket Cloud Storage in modo da poterlo visualizzare in seguito sul tuo computer locale. Ad esempio:gsutil cp profile.svg gs://BUCKET
Sostituisci BUCKET con il nome di un bucket a cui hai accesso.
Analizza il rendimento con perf
perf
consente di analizzare le prestazioni del nodo di addestramento.
Per installare la versione di perf
appropriata per il kernel Linux del nodo, esegui
questi comandi:
apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf
A questo punto, puoi eseguire uno qualsiasi dei sottocomandi descritti nella documentazione di perf
.
Recuperare informazioni sull'utilizzo delle GPU
I container abilitati per GPU in esecuzione su nodi con GPU in genere hanno diversi strumenti a riga di comando preinstallati che possono aiutarti a monitorare l'utilizzo delle GPU. Ad esempio:
Utilizza
nvidia-smi
per monitorare l'utilizzo della GPU da parte di vari processi.Utilizza
nvprof
per raccogliere una serie di informazioni sulla profilazione GPU. Poichénvprof
non può essere associato a un processo esistente, ti consigliamo di utilizzare lo strumento per avviare un processo aggiuntivo che esegue il codice di addestramento. Ciò significa che il codice di addestramento verrà eseguito due volte sul nodo. Ad esempio:nvprof -o prof.nvvp python3 -m MODULE_NAME
Sostituisci MODULE_NAME con il nome completo del modulo del punto di ingresso della tua applicazione di addestramento, ad esempio
trainer.task
.Quindi trasferisci il file di output in un bucket Cloud Storage in modo da poterlo analizzare in un secondo momento sul tuo computer locale. Ad esempio:
gsutil cp prof.nvvp gs://BUCKET
Sostituisci BUCKET con il nome di un bucket a cui hai accesso.
Se si verifica un errore della GPU (non un problema con la configurazione o con Vertex AI), utilizza
nvidia-bug-report.sh
per creare una segnalazione di bug.Quindi trasferisci il report in un bucket Cloud Storage in modo da poterlo analizzare in seguito sul tuo computer locale o inviarlo a NVIDIA. Ad esempio:
gsutil cp nvidia-bug-report.log.gz gs://BUCKET
Sostituisci BUCKET con il nome di un bucket a cui hai accesso.
Se bash
non riesce a trovare nessuno di questi comandi NVIDIA, prova ad aggiungere /usr/local/nvidia/bin
e /usr/local/cuda/bin
all'elemento PATH
della shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Passaggi successivi
- Scopri come ottimizzare le prestazioni dei tuoi job di addestramento personalizzato utilizzando Vertex AI TensorBoard Profiler.
- Scopri di più su come Vertex AI orchestra l'addestramento personalizzato.
- Leggi i requisiti del codice di addestramento.