Questa pagina mostra come utilizzare una shell interattiva per esaminare il container in cui viene eseguito il codice di addestramento. Puoi sfogliare 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 esaminare 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:
- Esegui strumenti di tracciamento e profilazione.
- Analizza l'utilizzo della GPU.
- Controlla Google Cloud le autorizzazioni disponibili per il contenitore.
Puoi anche utilizzare Cloud Profiler per eseguire il debug delle prestazioni dell'addestramento del modello per i tuoi job di addestramento personalizzati. Per saperne di più, vedi Prestazioni dell'addestramento del modello di profilo utilizzando 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. Mentre prepari il codice di addestramento e configuri la risorsa di addestramento personalizzato che preferisci, assicurati di soddisfare i seguenti requisiti:
Assicurati che il container di addestramento abbia installato
bash
.Tutti i container di addestramento predefiniti hanno
bash
installato. Se crei un container personalizzato per l'addestramento, utilizza un container di base che includabash
o installabash
nel Dockerfile.Esegui l'addestramento personalizzato in una regione 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 è in esecuzione l'addestramento personalizzato:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Se avvii l'addestramento personalizzato autonomamente, molto probabilmente disponi già di queste autorizzazioni e puoi accedere a una shell interattiva. Tuttavia, se vuoi utilizzare una shell interattiva per esaminare una risorsa di addestramento personalizzata creata da un altro utente della tua organizzazione, potresti dover ottenere queste autorizzazioni.
Un modo per ottenere queste autorizzazioni è chiedere a un amministratore della tua organizzazione di concederti il ruolo Vertex AI User (
roles/aiplatform.user
).
Requisiti per i casi avanzati
Se utilizzi determinate funzionalità avanzate, soddisfa i seguenti requisiti aggiuntivi:
Se colleghi un service account personalizzato alla risorsa di addestramento personalizzata, assicurati che qualsiasi utente che voglia accedere a una shell interattiva disponga dell'autorizzazione
iam.serviceAccounts.actAs
per il account di servizio collegato.La guida agli account di servizio personalizzati indica che devi disporre di questa autorizzazione per collegare un service account. 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 il account di servizio. Se uno dei tuoi colleghi vuole visualizzare una shell interattiva per questoCustomJob
, deve disporre anche della stessa autorizzazioneiam.serviceAccounts.actAs
.Se hai configurato il progetto per utilizzare Controlli di servizio VPC con Vertex AI, tieni conto delle seguenti limitazioni aggiuntive:
Non puoi utilizzare l'IP privato per l'addestramento personalizzato. Se hai bisogno di VPC-SC con il peering VPC, è necessaria una configurazione aggiuntiva per utilizzare la shell interattiva. Segui le istruzioni riportate in Ray Dashboard e shell interattiva con VPC-SC + peering VPC per configurare la shell interattiva con VPC-SC e peering VPC nel tuo progetto utente.
Da una shell interattiva, non puoi accedere a internet pubblico o Google Cloud a risorse esterne al perimetro di servizio.
Per proteggere l'accesso alle shell interattive, devi aggiungere
notebooks.googleapis.com
come servizio con limitazioni 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 al di fuori del perimetro di servizio, il che riduce il vantaggio in termini di sicurezza dell'utilizzo di Controlli di servizio VPC.
Abilita shell interattive
Per attivare le shell interattive per una risorsa di addestramento personalizzata, imposta il
campo API enableWebAccess
su true
quando crei un CustomJob
, un HyperparameterTuningJob
o un
TrainingPipeline
personalizzato.
I seguenti esempi mostrano come eseguire questa operazione utilizzando diversi strumenti:
Console
Segui la guida per
creare un TrainingPipeline
personalizzato nella Google Cloud console. Nel riquadro
Addestra nuovo modello, quando raggiungi il passaggio Dettagli modello, procedi nel
seguente modo:
Fai clic su Opzioni avanzate.
Seleziona la casella di controllo Abilita 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
in questo comando.Se vuoi creare un
HyperparameterTuningJob
, esegui il comandogcloud ai hp-tuning-jobs create
e specifica il flag--enable-web-access
in questo comando.
Per scoprire come utilizzare questi comandi, consulta la guida alla
creazione di un CustomJob
e la guida
alla creazione di un HyperparameterTuningJob
.
API
I seguenti corpi parziali delle richieste REST mostrano dove specificare il
campo enableWebAccess
per ogni tipo di risorsa di addestramento personalizzato:
CustomJob
Il seguente esempio è un corpo della richiesta parziale per il
metodo projects.locations.customJobs.create
API:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Per un esempio di invio di una richiesta API per creare un CustomJob
, vedi
Creare job di addestramento personalizzati.
HyperparameterTuningJob
Il seguente esempio è un corpo della richiesta parziale per il
metodo projects.locations.hyperparameterTuningJobs.create
API:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Per un esempio di invio di una richiesta API per creare un
HyperparameterTuningJob
, consulta Utilizzo dell'ottimizzazione
degli iperparametri.
Custom TrainingPipeline
Gli esempi seguenti mostrano i corpi delle richieste parziali per il
metodo projects.locations.trainingPipelines.create
API.
Seleziona una delle seguenti schede, a seconda che tu stia utilizzando
l'ottimizzazione degli iperparametri:
Senza ottimizzazione degli iperparametri
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Con l'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 Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, 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
TrainingPipeline
personalizzato, utilizza uno dei seguenti metodi:
Vai a una shell interattiva
Dopo aver avviato l'addestramento personalizzato in base alle indicazioni della 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 job.
Puoi passare a una shell interattiva in uno dei seguenti modi:
- Fare clic su un link nella console Google Cloud
- Utilizza l'API Vertex AI per ottenere l'URI di accesso web della shell
Navigare dalla console Google Cloud
Nella console Google Cloud , nella sezione Vertex AI, vai a una delle seguenti pagine:
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 personalizzata.
Se hai creato un
TrainingPipeline
per l'addestramento personalizzato, fai clic sul nome delCustomJob
o delHyperparameterTuningJob
creato dal tuoTrainingPipeline
. Ad esempio, se la pipeline ha il nomePIPELINE_NAME
, potrebbe essere chiamataPIPELINE_NAME-custom-job
oPIPELINE_NAME-hyperparameter-tuning-job
.Nella pagina del job, fai clic su Avvia terminale web. Se il tuo job utilizza più nodi, fai clic su Avvia terminale web accanto al nodo per cui vuoi una shell interattiva.
Tieni presente che puoi accedere a una shell interattiva solo durante l'esecuzione del job. Se non vedi Avvia terminale web, il motivo potrebbe essere che Vertex AI non ha ancora iniziato a eseguire il job oppure che il job è già terminato o non è riuscito. Se lo Stato del job è
Queued
oPending
, attendi un minuto, poi prova ad aggiornare la pagina.Se utilizzi l'ottimizzazione degli iperparametri, sono disponibili link Avvia terminale web separati per ogni prova.
Recupera l'URI di accesso web dall'API
Utilizza il metodo
projects.locations.customJobs.get
API o il metodo
projects.locations.hyperparameterTuningJobs.get
API per
visualizzare gli URI che puoi utilizzare per accedere alle shell interattive.
A seconda del tipo di risorsa di addestramento personalizzata che utilizzi, seleziona una delle seguenti schede per visualizzare esempi di come trovare il campo API webAccessUris
, che contiene un URI della shell interattiva per ogni nodo del 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 quando hai creato il 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, apporta 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 quando hai creato il 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 di queste 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 job. Verifica che nel campo state
sia visualizzato
JOB_STATE_RUNNING
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto, poi prova di nuovo 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 quando hai creato il 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, apporta 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 quando hai creato il 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 di queste 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 job. Verifica che nel campo state
sia visualizzato
JOB_STATE_RUNNING
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto, poi riprova a recuperare le informazioni sul progetto.
Vertex AI fornisce un insieme di URI shell interattivi per ogni prova di ottimizzazione degli iperparametri quando la prova entra nello stato ACTIVE
. Se vuoi ottenere URI shell interattivi
per le prove successive, recupera di nuovo le informazioni sul job dopo l'inizio delle prove.
L'esempio precedente mostra l'output previsto per l'addestramento con una sola replica: 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 job ha un pool di worker principale con una replica e un
pool di worker secondario con due repliche, il campo webAccessUris
ha un aspetto
simile al seguente:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Utilizzare una shell interattiva
Per utilizzare la shell interattiva per un nodo di addestramento, vai a uno degli URI che hai trovato nella sezione precedente. Nel browser viene visualizzata una shell Bash, che ti consente di accedere al file system del container in cui Vertex AI esegue il codice di addestramento.
Le sezioni seguenti descrivono alcune cose da considerare quando utilizzi la shell e forniscono alcuni esempi di strumenti di monitoraggio che potresti utilizzare nella shell.
Impedire la chiusura del job
Quando Vertex AI termina l'esecuzione del job o della 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. Se hai creato file nel file system del container, questi non verranno conservati al termine del job.
In alcuni casi, potresti voler prolungare intenzionalmente l'esecuzione del job per eseguire il debug con una shell interattiva. Ad esempio, puoi aggiungere un codice come il seguente al codice di addestramento per fare in modo che il job continui a essere eseguito per almeno un'ora dopo che si è verificata 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 vengono addebitati costi di Vertex AI Training finché il job è in esecuzione.
Controllare i problemi relativi alle autorizzazioni
L'ambiente shell interattivo viene autenticato utilizzando le credenziali predefinite dell'applicazione (ADC) per il account di servizio utilizzato da Vertex AI per eseguire il codice di addestramento. Puoi eseguire gcloud auth list
nella shell per maggiori dettagli.
Nella shell, puoi utilizzare bq
e altri
strumenti che supportano ADC. In questo modo puoi verificare che il job sia in grado di accedere
a un determinato bucket Cloud Storage, a una tabella BigQuery o a un'altra
risorsaGoogle Cloud di cui ha bisogno il codice di addestramento.
Visualizzare l'esecuzione di 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:
Installa
py-spy
:pip3 install py-spy
Esegui
ps aux
nella shell e cerca il PID del programma di addestramento Python.Esegui uno qualsiasi 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 un secondo momento sul tuo computer locale. Ad esempio:gcloud storage cp profile.svg gs://BUCKET
Sostituisci BUCKET con il nome di un bucket a cui hai accesso.
Analizzare il rendimento con perf
perf
ti consente di analizzare il rendimento del nodo di addestramento.
Per installare la versione di perf
appropriata per il kernel Linux del tuo 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
Dopodiché, puoi eseguire uno qualsiasi dei sottocomandi descritti nella perf
documentazione.
Recuperare informazioni sull'utilizzo della GPU
I container abilitati per GPU in esecuzione su nodi con GPU in genere hanno preinstallati diversi strumenti a riga di comando che possono aiutarti a monitorare l'utilizzo della GPU. Ad esempio:
Utilizza
nvidia-smi
per monitorare l'utilizzo della GPU di vari processi.Utilizza
nvprof
per raccogliere una serie di informazioni sul profilo della GPU. Poichénvprof
non può essere collegato a un processo esistente, potresti 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 dell'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 computer locale. Ad esempio:
gcloud storage 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.Trasferisci poi il report in un bucket Cloud Storage per poterlo analizzare in un secondo momento sul tuo computer locale o inviarlo a NVIDIA. Ad esempio:
gcloud storage 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
a PATH
della shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Dashboard Ray e shell interattiva con Controlli di servizio VPC + peering VPC
-
Configura
peered-dns-domains
.{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME: Passa alla rete in peering.
-
LOCATION: la posizione desiderata (ad esempio,
us-central1
).
-
-
Configura
DNS managed zone
.{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
PROJECT_ID: il tuo ID progetto. Puoi trovare questi ID nella pagina Benvenuto della console Google Cloud .
-
-
Registra la transazione DNS.
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
Invia un job di addestramento con la shell interattiva + VPC-SC + peering VPC abilitato.
Passaggi successivi
- Scopri come ottimizzare il rendimento dei job di addestramento personalizzato utilizzando Profiler.
- Scopri di più su come Vertex AI orchestra l'addestramento personalizzato.
- Scopri di più sui requisiti del codice di addestramento.