Addestramento di monitoraggio e debug con una shell interattiva

Durante l'addestramento, puoi 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 versione runtime o un container personalizzato in esecuzione su AI Platform Training.

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 AI Platform Training. Ad esempio, puoi utilizzare una shell interattiva per eseguire le seguenti operazioni:

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

Prima di iniziare

Puoi usare una shell interattiva quando esegui un addestramento o un iperparametro un job di ottimizzazione. Durante la preparazione del codice di addestramento ed eseguire un job di addestramento, accertati di soddisfare i seguenti requisiti:

  • Assicurati che il container di addestramento bash installata.

  • Tutti i container delle versioni di runtime hanno App bash installata. Se crei un container personalizzato per l'addestramento, utilizza un container di base che includa bash o installa bash nel tuo Dockerfile.

  • Eseguire l'addestramento in una regione che supporta il shell.

  • Assicurati che chiunque voglia accedere a una shell interattiva disponga di quanto segue autorizzazioni per il progetto Google Cloud in cui è in esecuzione l'addestramento:

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

    Se inizi l'addestramento, molto probabilmente hai già queste autorizzazioni e possono accedere a una shell interattiva. Tuttavia, se vuoi utilizzare una shell interattiva per ispezionare un job di addestramento creato da qualcun altro dell'organizzazione, potrebbe essere necessario ottenere queste autorizzazioni.

    Un modo per ottenere queste autorizzazioni è chiedere a un amministratore del tuo organizzazione che ti concederà l'Amministratore di AI Platform Training ruolo (roles/ml.admin). Se ti viene assegnato lo Sviluppatore AI Platform Training ruolo (roles/ml.developer), avrai accesso alla shell interattiva per i job che crei.

Requisiti per le richieste avanzate

Se utilizzi determinate funzionalità avanzate, verifica quanto segue requisiti:

  • Se colleghi un account di servizio personalizzato al tuo job di addestramento, quindi verifica che tutti gli utenti che vogliano accedere la shell interattiva dispone dell'autorizzazione iam.serviceAccounts.actAs per con un 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 job con un account di servizio collegato, devi avere l'autorizzazione iam.serviceAccounts.actAs per l'account di servizio. Se uno dei tuoi colleghi vuole vedere una shell interattiva per questo lavoro anche questi devono avere la stessa autorizzazione iam.serviceAccounts.actAs.

  • Se hai configurato il progetto per utilizzare i Controlli di servizio VPC con AI Platform Training, quindi tieni conto le 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 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 a ml.googleapis.com. Se limiti solo ml.googleapis.com e non notebooks.googleapis.com, gli utenti possono per accedere a shell interattive da macchine esterne al perimetro di servizio, riduce i vantaggi per la sicurezza derivanti dall'uso dei Controlli di servizio VPC.

Attivazione delle shell interattive

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

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

L'esempio presuppone che tu abbia una formazione sul tuo file system locale 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 scelto da te per il job.
  • 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 una regione che supporta la shell.

    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 in base alle indicazioni fornite nella precedente, usa la console Google Cloud o la riga di comando gcloud per vedere gli URI che puoi usare per accedere alle shell interattive. AI Platform Training fornisce un URI per ogni addestramento nodo che fa parte del tuo job.

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

Job di addestramento

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

gcloud

Esegui l'gcloud ai-platform jobs describe comando:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del job. Hai impostato questo ID quando hai creato un lavoro. Se non conosci l'ID del job, puoi eseguire gcloud ai-platform jobs list e cerca il comando lavoro 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 i 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 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, il motivo potrebbe essere che AI Platform Training non ha 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; quindi prova a recuperare di nuovo le informazioni sul job.

Job di ottimizzazione degli iperparametri

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

gcloud

Esegui l'gcloud ai-platform jobs describe comando:

gcloud ai-platform jobs describe JOB_ID

Sostituisci quanto segue:

  • JOB_ID: l'ID del job. Hai impostato questo ID quando hai creato un lavoro. Se non conosci l'ID del job, puoi eseguire gcloud ai-platform jobs list e cerca il comando lavoro 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 i 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 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, il motivo potrebbe essere che AI Platform Training non ha 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; quindi prova a recuperare di nuovo le informazioni sul job.

AI Platform Training fornisce un set di URI della shell interattivi per ogni ottimizzazione degli iperparametri di prova come la prova entra nello stato RUNNING. Se vuoi ottenere l'interfaccia 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 primario. Se esegui attività distribuite durante l'addestramento, l'output contiene un URI per ogni nodo di addestramento, il nome dell'attività.

Ad esempio, se il job ha un master e due worker, il valore 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'uso di una shell interattiva per AI Platform Training è supportato nella le 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 offre anche altre regioni per l'addestramento.

Utilizzo di 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, AI Platform Training sta eseguendo il tuo 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.

Impedire la fine del job

Quando AI Platform Training termina l'esecuzione del job o della 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 partecipi al corso di formazione di AI Platform Training gli addebiti per tutto il tempo in cui il job continua a essere in esecuzione.

Controllo dei problemi relativi alle autorizzazioni in corso...

L'ambiente shell interattivo viene autenticato utilizzando le impostazioni predefinite dell'applicazione (ADC) per l'account l'account di servizio che AI Platform Training utilizza per eseguire il codice di addestramento. Tu può eseguire gcloud auth list nella shell per ulteriori dettagli.

Nella shell puoi usare gcloud storage, 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.

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

  1. Installa py-spy:

    pip3 install py-spy
    
  2. Esegui ps aux nella shell e cerca il PID dell'addestramento in Python .

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

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

    gcloud storage cp profile.svg gs://BUCKET
    

    Sostituisci BUCKET con il nome di un bucket a cui hai accesso.

Analisi del 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.

Recupero di 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:

    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 di configurazione o con AI Platform Training), 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:

    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 al PATH della shell:

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

Passaggi successivi