Addestramento di monitoraggio e debug con una shell interattiva

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

L'utilizzo di una shell interattiva per ispezionare il contenitore di addestramento può aiutarti a eseguire il debug di problemi relativi al codice di addestramento o alla configurazione di AI Platform Training. Ad esempio, puoi utilizzare una shell interattiva per:

  • Esegui strumenti di monitoraggio e profilazione
  • Analizzare l'utilizzo della GPU
  • Controlla le autorizzazioni di Google Cloud disponibili per il contenitore

Prima di iniziare

Puoi utilizzare una shell interattiva quando esegui un job di addestramento o ottimizzazione dell'iperparametro. Quando prepari il codice di addestramento e esegui un job di addestramento, assicurati di soddisfare i seguenti requisiti:

  • Assicurati che nel contenitore di addestramento sia installato bash.

  • Tutti i contenitori delle versioni di runtime sono stati installati conbash. Se crei un container personalizzato per la formazione, utilizza un container di base che includa bash o installa bash nel tuo Dockerfile.

  • Esegui la formazione in una regione che supporta i prompt interattivi.

  • Assicurati che chiunque voglia accedere a una shell interattiva disponga delle seguenti autorizzazioni per il progetto Google Cloud in cui viene eseguito l'addestramento:

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

    Se avvii la formazione autonomamente, è molto probabile che tu abbia già queste autorizzazioni e che tu possa accedere a una shell interattiva. Tuttavia, se vuoi utilizzare una shell interattiva per ispezionare un job di addestramento creato da un'altra persona 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 di amministratore di AI Platform Training (roles/ml.admin). Se ti viene concesso il ruolo di sviluppatore di 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 tuo job di addestramento, assicurati che qualsiasi utente che voglia accedere a una shell interattiva disponga dell'autorizzazione iam.serviceAccounts.actAs per l'account di servizio collegato.

    La guida agli account di servizio personalizzati indica 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 con un account di servizio collegato, devi disporre dell'autorizzazione iam.serviceAccounts.actAs per l'account di servizio. Se uno dei tuoi colleghi vuole visualizzare una shell interattiva per questo job, deve disporre anche della stessa autorizzazione iam.serviceAccounts.actAs.

  • Se hai configurato il tuo progetto per utilizzare Controlli di servizio VPC con Training di AI Platform, 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 all'internet pubblico o alle risorse Google Cloud al di fuori del perimetro del servizio.

    • Per proteggere l'accesso alle shell interattive, oltre a ml.googleapis.com devi aggiungere notebooks.googleapis.com come servizio limitato nel perimetro di servizio. Se limiti soloml.googleapis.com e non notebooks.googleapis.com, gli utenti possono accedere alle shell interattive da macchine esterne al perimetro di servizio, il che riduce il vantaggio in termini di sicurezza dell'utilizzo di Controlli di servizio VPC.

Attivazione delle shell interattive

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

Il seguente esempio mostra come eseguire questa operazione aggiungendo il --enable-web-access flag quando utilizzi 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 nel file system locale in una directory denominata trainer con un modulo denominato task.

Per creare il job di addestramento, esegui il seguente 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 scelto per il job.
  • JOB_DIR: un percorso a 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 una regione che supporta i shell interattivi.

    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
    

Ottenere l'URI di accesso web

Dopo aver avviato la formazione in base alle indicazioni riportate nella sezione precedente, utilizza la console Google Cloud o lo strumento gcloudriga di comando 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 job.

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

Job di addestramento

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

gcloud

Esegui il gcloud ai-platform jobs describe comando:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del tuo job. Hai impostato questo ID quando hai creato il job. Se non conosci l'ID del job, puoi eseguire il gcloud ai-platform jobs list comando 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.

    Aprire 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 dell'addestramento per espandere una visualizzazione JSON del 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 di vedere RUNNING nel campo state. Se lo stato è QUEUED o PREPARING, attendi un minuto, quindi riprova a recuperare le informazioni sul job.

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 gcloud ai-platform jobs describe comando:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del tuo job. Hai impostato questo ID quando hai creato il job. Se non conosci l'ID del job, puoi eseguire il gcloud ai-platform jobs list comando 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.

    Aprire 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 dell'addestramento per espandere una visualizzazione JSON del 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 di vedere RUNNING nel campo state. Se lo stato è QUEUED o PREPARING, attendi un minuto, quindi riprova a recuperare le informazioni sul job.

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

L'esempio precedente mostra l'output previsto per l'addestramento con una singola 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 nome dell'attività.

Ad esempio, se il job ha un master e due worker, il campo webAccessUris è 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 seguenti regioni:

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 fornisce anche 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 contenitore in cui AI Platform Training 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 puoi utilizzare nella shell.

Impedire il completamento del job

Quando AI Platform Training termina l'esecuzione del job o della prova, perderai immediatamente l'accesso alla shell interattiva. In questo caso, potresti vedere il messaggio command terminated with exit code 137 o la shell potrebbe smettere di rispondere. Se hai creato file nel file system del contenitore, questi non rimangono 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 codice come quello riportato di seguito al codice di addestramento per fare in modo che il job continui a funzionare per almeno un'ora dopo l'occorrenza 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 vengono addebitati costi di addestramento di AI Platform finché il job continua a essere eseguito.

Controllo dei problemi di autorizzazione

L'ambiente della shell interattiva viene autenticato utilizzando le credenziali predefinite dell'applicazione (ADC) per l'account di servizio utilizzato da AI Platform Training per eseguire il codice di addestramento. Puoi eseguire gcloud auth list nella shell per maggiori dettagli.

Nella shell, puoi utilizzare gcloud storage, 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 risorsa Google Cloud di cui ha bisogno il codice di addestramento.

Visualizzazione dell'esecuzione di Python con py-spy

py-spy consente di eseguire il profiling di 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 formazione in Python.

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

  4. 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:

    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 tuo nodo di addestramento. Per installare la versione di perf appropriata per il kernel Linux del tuo 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 dei sottocomandi descritti nella documentazione di perf.

Visualizzare le informazioni sull'utilizzo della GPU

I container abilitati per GPU in esecuzione su nodi con GPU hanno in genere 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 di vari processi.

  • Utilizza nvprof per raccogliere una serie di informazioni sul profiling della GPU. Poiché nvprof non può collegarsi 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 accesso dell'applicazione di formazione, ad esempio trainer.task.

    Trasferisci poi il file di output in un bucket Cloud Storage per 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 riscontri 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.

    Trasferisci poi il report in un bucket Cloud Storage per analizzarlo 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}"

Passaggi successivi