Addestramento di monitoraggio e debug con una shell interattiva

Durante l'addestramento, puoi utilizzare una shell interattiva per ispezionare il container su cui viene eseguito il codice di addestramento. Puoi sfogliare il file system ed eseguire utilità di debug in ogni versione di runtime o container personalizzato in esecuzione su AI Platform Training.

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 AI Platform Training. Ad esempio, puoi utilizzare una shell interattiva per fare quanto segue:

  • Esegui strumenti di tracciamento e profilazione
  • Analizza l'utilizzo della GPU
  • Verifica le autorizzazioni Google Cloud disponibili per il container

Prima di iniziare

Puoi utilizzare una shell interattiva quando esegui un job di addestramento o ottimizzazione degli iperparametri. Durante la preparazione del codice di addestramento e l'esecuzione di un job di addestramento, assicurati di soddisfare i seguenti requisiti:

  • Assicurati che nel container di addestramento sia installato bash.

  • Tutti i container della versione di runtime hanno bash installato. Se crei un container personalizzato per l'addestramento, usa un container di base che includa bash o installa bash nel tuo Dockerfile.

  • Esegui l'addestramento in una regione che supporti 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:

    • ml.jobs.create
    • ml.jobs.get
    • ml.jobs.cancel

    Se avvii l'addestramento in autonomia, è molto probabile che tu disponga già di queste autorizzazioni e possa accedere a una shell interattiva. Tuttavia, se vuoi utilizzare una shell interattiva per ispezionare un job di addestramento creato da qualcun altro nella 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 Amministratore di AI Platform Training (roles/ml.admin). Se ti viene concesso il ruolo Sviluppatore AI Platform Training (roles/ml.developer), avrai accesso alla shell interattiva per i job che crei.

Requisiti per le richieste avanzate

Se utilizzi determinate funzionalità avanzate, devi soddisfare i seguenti requisiti aggiuntivi:

  • Se colleghi un account di servizio personalizzato al job di addestramento, assicurati che tutti gli utenti che vogliono accedere a una shell interattiva abbiano l'autorizzazione iam.serviceAccounts.actAs per l'account di servizio associato.

    La guida agli account di servizio personalizzati rileva che devi disporre di questa autorizzazione per collegare un account di servizio. Questa autorizzazione è necessaria anche per visualizzare una shell interattiva durante l'addestramento personalizzato.

    Ad esempio, per creare un job a cui è collegato un account di servizio, devi avere l'autorizzazione iam.serviceAccounts.actAs per l'account di servizio. Se uno dei tuoi colleghi vuole poi visualizzare una shell interattiva per questo job, deve avere la stessa autorizzazione iam.serviceAccounts.actAs.

  • Se hai configurato il progetto in modo da utilizzare i Controlli di servizio VPC con AI Platform Training, tieni conto delle seguenti limitazioni aggiuntive:

    • Non puoi utilizzare i Controlli di servizio VPC con il peering di rete VPC.

    • Da una shell interattiva, non puoi accedere alla rete internet pubblica o alle risorse Google Cloud all'esterno 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 a ml.googleapis.com. Se limiti solo ml.googleapis.com e non notebooks.googleapis.com, gli utenti possono accedere alle shell interattive da macchine esterne al perimetro di servizio, il che riduce i vantaggi in termini di sicurezza derivanti dall'utilizzo dei Controlli di servizio VPC.

Abilitazione delle shell interattive

Per abilitare shell interattive per un job di addestramento, imposta il campo API enableWebAccess su true nel campo trainingInput del job quando crei un job di addestramento.

L'esempio seguente mostra come eseguire questa operazione aggiungendo il flag --enable-web-access quando si utilizza gcloud CLI. Al momento non puoi creare un job di addestramento con una shell interattiva abilitata nella console Google Cloud.

L'esempio presuppone che tu abbia un'applicazione di addestramento sul file system locale in una directory denominata trainer con un modulo denominato task.

Per creare il job di addestramento, esegui questo comando:

  gcloud ai-platform jobs submit training JOB_ID \
    --enable-web-access \
    --job-dir=JOB_DIR \
    --module-name=trainer.task \
    --package-path=trainer \
    --python-version=3.7 \
    --region=REGION \
    --runtime-version=2.11 \
    --scale-tier=CUSTOM \
    --master-machine-type=n1-highmem-8

In questo comando, sostituisci i seguenti segnaposto:

  • JOB_ID: un nome che scegli per il lavoro.
  • JOB_DIR: un percorso di una directory Cloud Storage in cui verrà caricata l'applicazione di addestramento.
  • REGION: la regione in cui prevedi di creare il job di addestramento. Tieni presente che deve essere un'area geografica che supporta le shell interattive.

    In caso di esito positivo, il comando produce il seguente output:

    Job [JOB_ID] submitted successfully.
    Your job is still active. You may view the status of your job with the command
    
      $ gcloud ai-platform jobs describe JOB_ID
    
    or continue streaming the logs with the command
    
      $ gcloud ai-platform jobs stream-logs JOB_ID
    jobId: JOB_ID
    state: QUEUED
    

Recupero dell'URI di accesso web

Dopo aver avviato l'addestramento secondo le indicazioni della sezione precedente, utilizza la console Google Cloud o lo strumento a riga di comando gcloud per visualizzare gli URI che puoi utilizzare per accedere alle shell interattive. AI Platform Training fornisce un URI per ogni nodo di addestramento che fa parte del tuo job.

A seconda del tipo di job di addestramento che hai creato, seleziona una delle schede seguenti per visualizzare esempi su come trovare il campo dell'API webAccessUris, che contiene un URI shell interattivo per ciascun nodo nel job.

Job di addestramento

Le seguenti schede mostrano diversi modi per accedere a TrainingOutput per un job di addestramento standard.

gcloud

Esegui il comando gcloud ai-platform jobs describe:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del job. Hai impostato questo ID al momento della creazione del job. Se non conosci l'ID del job, puoi eseguire il comando gcloud ai-platform jobs list e cercare il job appropriato.

Nell'output, cerca quanto segue:

trainingOutput:
  webAccessUris:
    master-replica-0: INTERACTIVE_SHELL_URI

Console

  1. Apri la pagina Job di AI Platform Training nella console Google Cloud.

    Apri job nella console Google Cloud

  2. Fai clic sul nome del job nell'elenco per aprire la pagina Dettagli job.

  3. Fai clic sul pulsante Mostra Json nella sezione Output di addestramento per espandere una visualizzazione JSON di TrainingOutput per il job.

Nell'output, cerca quanto segue:

{
  "webAccessUris": {
    "master-replica-0": "INTERACTIVE_SHELL_URI"
  }
}

Se non vedi il campo webAccessUris, è possibile che AI Platform Training non abbia ancora iniziato a eseguire il job o la prova. Verifica che il campo state sia visualizzato RUNNING. Se lo stato è QUEUED o PREPARING, attendi un minuto e riprova a recuperare le informazioni sul lavoro.

Job di ottimizzazione degli iperparametri

Le seguenti schede mostrano diversi modi per accedere a TrainingOutput per un job di ottimizzazione degli iperparametri.

gcloud

Esegui il comando gcloud ai-platform jobs describe:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del job. Hai impostato questo ID al momento della creazione del job. Se non conosci l'ID del job, puoi eseguire il comando gcloud ai-platform jobs list e cercare il job appropriato.

Nell'output, cerca quanto segue:

trainingOutput:
  trials:
  - trialId: '1'
    webAccessUris:
      master-replica-0: INTERACTIVE_SHELL_URI

Console

  1. Apri la pagina Job di AI Platform Training nella console Google Cloud.

    Apri job nella console Google Cloud

  2. Fai clic sul nome del job nell'elenco per aprire la pagina Dettagli job.

  3. Fai clic sul pulsante Mostra Json nella sezione Output di addestramento per espandere una visualizzazione JSON di TrainingOutput per il job.

Nell'output, cerca quanto segue:

{
  "trials": [
    {
      ...
      "webAccessUris": {
        "master-replica-0": "INTERACTIVE_SHELL_URI"
      }
    },
    ...
  ]
}

Se non vedi il campo webAccessUris, è possibile che AI Platform Training non abbia ancora iniziato a eseguire il job o la prova. Verifica che il campo state sia visualizzato RUNNING. Se lo stato è QUEUED o PREPARING, attendi un minuto e riprova a recuperare le informazioni sul lavoro.

AI Platform Training fornisce un set di URI shell interattivi per ogni prova di ottimizzazione degli iperparametri quando la prova entra nello stato RUNNING. Se vuoi ottenere gli URI della shell interattivi per le prove successive, recupera le informazioni sul job dopo l'inizio delle prove.

L'esempio precedente mostra l'output previsto per l'addestramento a replica singola: un URI per il nodo di addestramento principale. Se esegui un addestramento distribuito, l'output contiene un URI per ogni nodo di addestramento, identificato dal nome dell'attività.

Ad esempio, se il job ha un master e due worker, il campo webAccessUris sarà simile al seguente:

{
  "master-replica-0": "URI_FOR_PRIMARY",
  "worker-replica-0": "URI_FOR_FIRST_SECONDARY",
  "worker-replica-1": "URI_FOR_SECOND_SECONDARY"
}

Aree geografiche disponibili

L'utilizzo di una shell interattiva per AI Platform Training è supportato nelle regioni seguenti:

Americhe

  • Oregon (us-west1)
  • Los Angeles (us-west2)
  • Iowa (us-central1)
  • Carolina del Sud (us-east1)
  • N. Virginia (us-east4)
  • Montréal (northamerica-northeast1)

Europa

  • Londra (europe-west2)
  • Belgio (europe-west1)
  • Zurigo (europe-west6)
  • Francoforte (europe-west3)

Asia Pacifico

  • Singapore (asia-southeast1)
  • Taiwan (asia-east1)
  • Tokyo (asia-northeast1)
  • Sydney (australia-southeast1)
  • Seul (asia-northeast3)

AI Platform Training offre inoltre regioni aggiuntive per l'addestramento.

Utilizzo di 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 in cui AI Platform Training esegue il codice di addestramento.

Le seguenti sezioni descrivono alcuni aspetti da considerare durante l'utilizzo della shell e forniscono alcuni esempi di strumenti di monitoraggio che potresti utilizzare nella shell.

Impedire la fine del job

Al termine dell'esecuzione del job o della prova da parte di AI Platform Training, perderai immediatamente l'accesso alla tua 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 rendere volutamente più lungo l'esecuzione del job per eseguire il debug con una shell interattiva. Ad esempio, puoi aggiungere al codice di addestramento codice come quello riportato di seguito in modo che il job rimanga in esecuzione per almeno un'ora dopo che si verifica 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 i costi per l'addestramento di AI Platform Training finché il job continua a essere eseguito.

Controllo dei problemi relativi alle autorizzazioni in corso...

L'ambiente shell interattivo viene autenticato utilizzando le credenziali predefinite dell'applicazione (ADC) per l'account di servizio che AI Platform Training utilizza per eseguire il tuo 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. Ciò può aiutarti a verificare che il job sia in grado di accedere a un particolare bucket Cloud Storage, tabella BigQuery o altra risorsa Google Cloud necessaria per il tuo codice di addestramento.

Visualizzazione dell'esecuzione 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:

  1. Installa py-spy:

    pip3 install py-spy
    
  2. Esegui ps aux nella shell e cerca il PID del programma di addestramento Python.

  3. Esegui uno dei sottocomandi descritti nella documentazione py-spy, utilizzando il PID che hai trovato nel passaggio precedente.

  4. Se utilizzi py-spy record per creare un file SVG, copia questo file in un bucket Cloud Storage per 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.

Analisi del rendimento con perf in corso...

perf consente di analizzare le prestazioni 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

Successivamente, puoi eseguire uno qualsiasi dei sottocomandi descritti nella documentazione di perf.

Ottenere informazioni sull'utilizzo della 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 della GPU. Ad esempio:

  • Utilizza nvidia-smi per monitorare l'utilizzo della GPU per vari processi.

  • Utilizza nvprof per raccogliere una serie di informazioni sulla profilazione delle GPU. Poiché nvprof non può essere collegato a un processo esistente, potresti voler utilizzare lo strumento per avviare un processo aggiuntivo che esegue il codice di addestramento. Ciò significa che il tuo 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 richiesta di addestramento; ad esempio, trainer.task.

    Poi trasferisci il file di output in un bucket Cloud Storage per 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 AI Platform Training), utilizza nvidia-bug-report.sh per creare una segnalazione di bug.

    Poi trasferisci il report in un bucket Cloud Storage in modo da poterlo analizzare in un secondo momento 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 al PATH della shell:

export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"

Passaggi successivi