Questa pagina mostra come usare una shell interattiva per ispezionare nel container su cui è in esecuzione il codice di addestramento. Puoi sfogliare il file system ed eseguire utilità di debug in ogni ambiente container o personalizzato container in esecuzione su Vertex AI.
L'uso di una shell interattiva per ispezionare il container di addestramento può aiutarti a eseguire il debug con il codice di addestramento o la 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.
Puoi anche utilizzare Cloud Profiler per eseguire il debug delle prestazioni di addestramento del modello per i tuoi job di addestramento personalizzato. Per maggiori dettagli, vedi Prestazioni di addestramento del modello di profilo utilizzando Profiler.
Prima di iniziare
Puoi usare una shell interattiva quando esegui l'addestramento personalizzato
CustomJob
risorsa, una risorsa HyperparameterTuningJob
o una risorsa
TrainingPipeline
risorsa. Mentre prepari la formazione
codice e configurare l'addestramento personalizzato
risorsa di tua scelta, assicurati di
devono soddisfare i seguenti requisiti:
Assicurati che il container di addestramento
bash
installata.Tutti i container di addestramento predefiniti hanno App
bash
installata. Se crei un container personalizzato , utilizza un container di base includebash
o installabash
nel tuo Dockerfile.Eseguire l'addestramento personalizzato in una regione che supporta shell.
Assicurati che chiunque voglia accedere a una shell interattiva disponga di quanto segue le autorizzazioni per il progetto Google Cloud in cui viene eseguito l'addestramento personalizzato in esecuzione:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Se avvii l'addestramento personalizzato, molto probabilmente hai già queste autorizzazioni e possono accedere a una shell interattiva. Tuttavia, se vuoi una shell interattiva per ispezionare una risorsa di addestramento nella tua organizzazione, potresti dover richiedere questi autorizzazioni aggiuntive.
Un modo per ottenere queste autorizzazioni è chiedere a un amministratore del tuo che ti offra la funzionalità Vertex AI User ruolo (
roles/aiplatform.user
).
Requisiti per le richieste avanzate
Se utilizzi determinate funzionalità avanzate, verifica quanto segue requisiti:
Se collegare un account di servizio personalizzato alla risorsa di addestramento personalizzata, quindi assicurati che tutti gli utenti che vogliano accedere a una shell interattiva dispone dell'autorizzazione
iam.serviceAccounts.actAs
per l'account di servizio collegato.Nella guida agli account di servizio personalizzati viene indicato che devi disporre di questa autorizzazione per collegare un account di servizio. Devi disporre 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 dispongono dell'autorizzazioneiam.serviceAccounts.actAs
per l'account di servizio. Se uno dei tuoi colleghi vuole visualizzare una shell interattivaCustomJob
, devono avere lo stessoiam.serviceAccounts.actAs
autorizzazione.Se hai configurato il progetto per utilizzare i Controlli di servizio VPC con Vertex AI, quindi prendi in considerazione le seguenti limitazioni aggiuntive:
Non puoi utilizzare 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 fornite in Dashboard Ray e shell interattiva con VPC-SC + peering VPC per configurare la configurazione della shell interattiva con VPC-SC e peering VPC in del progetto utente.
Da una shell interattiva non puoi accedere alla rete internet pubblica di 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 tuo servizio perimetrale, oltre aaiplatform.googleapis.com
. Se limitaaiplatform.googleapis.com
e nonnotebooks.googleapis.com
, gli utenti potranno accedere alle shell interattive da macchine esterne al servizio il che riduce i vantaggi per la sicurezza derivanti dall'uso dei Controlli di servizio VPC.
Abilita shell interattive
Per abilitare le shell interattive per una risorsa di addestramento personalizzata, imposta
API enableWebAccess
campo a true
quando crei un'entità CustomJob
, HyperparameterTuningJob
o un'istanza
TrainingPipeline
.
I seguenti esempi mostrano come eseguire questa operazione utilizzando diversi strumenti:
Console
Segui la guida per
creando un TrainingPipeline
personalizzato nella console Google Cloud. Nella
Nel riquadro Addestra nuovo modello, quando raggiungi il passaggio Dettagli modello, esegui la
seguenti:
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
, eseguigcloud ai custom-jobs create
e specifica--enable-web-access
per questo comando.Se vuoi creare un
HyperparameterTuningJob
, eseguigcloud ai hp-tuning-jobs create
e specifica--enable-web-access
per questo comando.
Per imparare a usare questi comandi, consulta la guida
creando un CustomJob
e la guida
alla creazione di un HyperparameterTuningJob
.
API
I seguenti corpi di richieste REST parziali mostrano dove specificare
Campo enableWebAccess
per ogni tipo di risorsa di addestramento personalizzato:
CustomJob
L'esempio seguente è un corpo della richiesta parziale per
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 personalizzati.
HyperparameterTuningJob
L'esempio seguente è un corpo della richiesta parziale per
API projects.locations.hyperparameterTuningJobs.create
:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Per un esempio di invio di una richiesta API per creare un
HyperparameterTuningJob
, consulta Utilizzo dell'iperparametro
dell'ottimizzazione.
Pipeline di addestramento personalizzata
I seguenti esempi mostrano i corpi delle richieste parziali per
API projects.locations.trainingPipelines.create
gcloud.
Seleziona una delle seguenti schede, a seconda che utilizzi o meno
Ottimizzazione degli iperparametri:
Senza ottimizzazione degli iperparametri
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Con ottimizzazione degli iperparametri
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Esempio di invio di una richiesta API per la creazione di una richiesta
TrainingPipeline
, consulta la sezione Creazione di un corso di formazione
di grandi dimensioni.
Python
Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, vedi Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta documentazione di riferimento dell'API Python.
Imposta il parametro enable_web_access
su true
quando esegui una delle
seguenti metodi:
Se vuoi creare un
CustomJob
, utilizza il metodoCustomJob.run
.Se vuoi creare un
HyperparameterTuningJob
usa MetodoHyperparameterTuningJob.run
.Se vuoi creare un
TrainingPipeline
personalizzato, utilizza una delle seguenti opzioni metodo:
Accedi a una shell interattiva
Dopo aver avviato l'addestramento personalizzato in base alle indicazioni fornite nel precedente, Vertex AI genera uno o più URI che per accedere alle shell interattive. Vertex AI genera un'architettura URI 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 alla sezione Vertex AI, vai a una delle pagine seguenti:
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 nomeCustomJob
oHyperparameterTuningJob
creato da teTrainingPipeline
. Ad esempio, se la pipeline ha il nomePIPELINE_NAME
, potrebbe chiamarsiPIPELINE_NAME-custom-job
oPIPELINE_NAME-hyperparameter-tuning-job
.Nella pagina del job, fai clic su Avvia terminale web. Se il tuo job utilizza nodi, fai clic su Avvia terminale web accanto al nodo una shell interattiva.
Tieni presente che puoi accedere a una shell interattiva solo mentre il job è in esecuzione. Se non vedi Avvia terminale web, potrebbe essere perché Vertex AI non ha ancora iniziato a eseguire il job o perché il job è già stato completato o non è riuscito. Se lo stato del job è
Queued
oPending
, attendi un minuto; quindi prova ad aggiornare la pagina.Se utilizzi l'ottimizzazione degli iperparametri, esistono lanciamenti web separati del terminale per ogni prova.
Recupera l'URI di accesso web dall'API
Utilizzare l'API projects.locations.customJobs.get
o il metodo
API projects.locations.hyperparameterTuningJobs.get
su
vedrai gli URI che puoi usare per accedere alle shell interattive.
A seconda del tipo di risorsa di addestramento personalizzato che utilizzi, seleziona una delle
le seguenti schede per vedere esempi su come trovare il campo API webAccessUris
,
che contiene un URI della shell interattivo per ciascun nodo del tuo job:
CustomJob
Le seguenti schede mostrano diversi modi per inviare un
Richiesta di projects.locations.customJobs.get
:
gcloud
Esegui l'gcloud ai custom-jobs describe
comando:
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 job, puoi eseguiregcloud ai custom-jobs list
e cerca il comando lavoro 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
, il motivo potrebbe essere che
Vertex AI non ha ancora iniziato a eseguire il job. Verifica che sia visualizzato
JOB_STATE_RUNNING
nel campo state
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto; quindi prova a recuperare di nuovo
le informazioni sul progetto.
HyperparameterTuningJob
Le seguenti schede mostrano diversi modi per inviare un
Richiesta di projects.locations.hyperparameterTuningJobs.get
:
gcloud
Esegui l'gcloud ai hp-tuning-jobs describe
comando:
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 job, puoi eseguiregcloud ai hp-tuning-jobs list
e cerca il comando lavoro 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
, il motivo potrebbe essere che
Vertex AI non ha ancora iniziato a eseguire il job. Verifica che sia visualizzato
JOB_STATE_RUNNING
nel campo state
. Se lo stato è JOB_STATE_QUEUED
o
JOB_STATE_PENDING
, attendi un minuto; quindi prova a recuperare di nuovo
le informazioni sul progetto.
Vertex AI fornisce un set di URI della shell interattivi per ogni
ottimizzazione degli iperparametri
di prova come
la prova entra nello stato ACTIVE
. Se vuoi ottenere URI della 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 a replica singola: uno 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
viene visualizzato
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 usare la shell interattiva per un nodo di addestramento, passa a uno degli URI che hai trovato nella sezione precedente. Nel browser viene visualizzata una shell Bash, dandoti accesso al file system del container, Vertex AI sta eseguendo il codice di addestramento.
Le seguenti sezioni descrivono alcuni aspetti da considerare durante l'utilizzo della shell fornire 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,
perderà immediatamente l'accesso alla tua shell interattiva. In questo caso,
vedi il messaggio command terminated with exit code 137
o la shell potrebbe interrompersi
a rispondere. Se hai creato dei file nel file system del container, questi
non vengono 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 codice come seguendo il codice di addestramento per fare in modo che il job continui a essere eseguito 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 utilizzi Vertex AI Training gli addebiti 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 impostazioni predefinite dell'applicazione
(ADC) per l'account
che Vertex AI utilizza per eseguire il codice di addestramento. Tu
può eseguire gcloud auth list
nella shell per ulteriori dettagli.
Nella shell puoi usare 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, tabella BigQuery o un altro account Google Cloud
risorse necessarie per il tuo codice di addestramento.
Visualizza l'esecuzione in Python con py-spy
py-spy
ti consente di profilare
di un programma Python in esecuzione, senza modificarlo. Per utilizzare py-spy
in un
shell interattiva, procedi nel seguente modo:
Installa
py-spy
:pip3 install py-spy
Esegui
ps aux
nella shell e cerca il PID dell'addestramento in 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 il bucket Cloud Storage per poterlo visualizzare in seguito sul tuo computer. 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
i seguenti 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 in perf
documentazione.
Recuperare informazioni sull'utilizzo delle GPU
I container abilitati per GPU in esecuzione su nodi con GPU hanno in genere diverse strumenti a riga di comando preinstallati che possono aiutarti a monitorare l'utilizzo delle GPU. Per esempio:
Utilizza
nvidia-smi
per monitorare l'utilizzo della GPU delle a vari processi.Utilizza
nvprof
per raccogliere una serie di profilazioni GPU informazioni. Poichénvprof
non può collegarsi a un processo esistente, potresti vuoi utilizzare lo strumento per avviare un altro processo che esegue le API nel tuo codice. 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 tuo corso di formazione il punto di ingresso dell'applicazione module; ad esempio
trainer.task
.Quindi trasferisci il file di output in un bucket Cloud Storage in modo da poter analizzarlo in un secondo momento sul 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 di 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 analizzarlo in un secondo momento sul 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
al PATH
della shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Dashboard Ray e shell interattiva con VPC-SC + peering VPC
-
Configura
peered-dns-domains
.{ VPC_NAME=default # Change to peered network REGION=us-central1 # Change to desired region 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); }
-
Configura
DNS managed zone
.{ PROJECT_ID=Your-Project-ID. You can find these IDs in the Google Cloud console welcome page. 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" }
-
Registra 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 le prestazioni dei tuoi job di addestramento personalizzato utilizzando Profiler.
- Scopri di più su come Vertex AI orchestra i processi personalizzati addestramento.
- Leggi i requisiti del codice di addestramento.