Surveiller et déboguer l'entraînement avec un shell interactif

Au cours de l'entraînement, vous pouvez utiliser un shell interactif pour inspecter le conteneur dans lequel votre code d'entraînement s'exécute. Vous pouvez parcourir le système de fichiers et exécuter des utilitaires de débogage dans chaque version d'exécution ou dans chaque conteneur personnalisé exécuté sur AI Platform Training.

L'utilisation d'une interface système interactive pour inspecter votre conteneur d'entraînement peut vous aider à résoudre les problèmes liés à votre code d'entraînement ou à la configuration d'AI Platform Training. Par exemple, vous pouvez utiliser une interface système interactive pour effectuer les opérations suivantes :

  • Exécuter des outils de traçage et de profilage
  • Analyser l'utilisation des GPU
  • Vérifier les autorisations Google Cloud disponibles pour le conteneur

Avant de commencer

Vous pouvez utiliser une interface système interactive lorsque vous exécutez une tâche d'entraînement ou de réglage des hyperparamètres. Lorsque vous préparez votre code d'entraînement et que vous exécutez une tâche d'entraînement, assurez-vous de remplir les conditions suivantes :

  • Assurez-vous que bash est installé sur votre conteneur d'entraînement.

  • bash est installé sur tous les conteneurs de la version d'exécution. Si vous créez un conteneur personnalisé pour l'entraînement, utilisez un conteneur de base incluant bash ou installez bash dans votre Dockerfile.

  • Effectuer un entraînement dans une région compatible avec les interfaces systèmes interactives.

  • Assurez-vous que toute personne souhaitant accéder à une interface système interactive dispose des autorisations suivantes pour le projet Google Cloud dans lequel l'entraînement est en cours d'exécution :

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

    Si vous lancez l'entraînement vous-même, vous disposez probablement déjà de ces autorisations et pouvez accéder à une interface système interactive. Toutefois, si vous souhaitez utiliser une interface système interactive pour inspecter une tâche d'entraînement créée par un autre membre de votre organisation, vous devrez peut-être obtenir ces autorisations.

    Pour obtenir ces autorisations, vous pouvez demander à un administrateur de votre organisation de vous accorder le rôle Administrateur AI Platform Training (roles/ml.admin). Le rôle Développeur AI Platform Training (roles/ml.developer) vous permet d'accéder à l'interface système interactive des tâches que vous créez.

Conditions requises pour les cas avancés

Si vous utilisez certaines fonctionnalités avancées, remplissez les exigences supplémentaires suivantes :

  • Si vous associez un compte de service personnalisé à votre tâche d'entraînement, assurez-vous que tout utilisateur souhaitant accéder à une interface système interactive dispose de l'autorisation iam.serviceAccounts.actAs pour le compte de service associé.

    Le guide des comptes de service personnalisés indique que vous devez disposer de cette autorisation pour associer un compte de service. Vous devez également disposer de cette autorisation pour afficher une interface système interactive lors de l'entraînement personnalisé.

    Par exemple, pour créer une tâche avec un compte de service associé, vous devez disposer de l'autorisation iam.serviceAccounts.actAs pour ce compte. Si l'un de vos collègues souhaite afficher une interface système interactive pour cette tâche, il doit également disposer de la même autorisation iam.serviceAccounts.actAs.

  • Si vous avez configuré votre projet pour utiliser VPC Service Controls avec AI Platform Training, tenez compte des limites supplémentaires suivantes :

    • Vous ne pouvez pas utiliser VPC Service Controls avec l'appairage de réseaux VPC.

    • Depuis une interface système interactive, vous ne pouvez pas accéder aux ressources Internet publiques ou Google Cloud en dehors de votre périmètre de service.

    • Pour sécuriser l'accès aux interfaces système interactives, vous devez ajouter notebooks.googleapis.com en tant que service restreint dans votre périmètre de service, en plus de ml.googleapis.com. Si vous limitez uniquement ml.googleapis.com et non notebooks.googleapis.com, les utilisateurs peuvent accéder aux interfaces système interactives à partir de machines situées en dehors du périmètre de service, ce qui réduit les avantages en termes de sécurité liés à l'utilisation de VPC Service Controls.

Activer les interfaces système interactives

Pour activer les interfaces systèmes interactives pour une tâche d'entraînement, définissez le champ enableWebAccess de l'API sur true dans le champ trainingInput de votre tâche lorsque vous créez une tâche d'entraînement.

L'exemple suivant montre comment procéder en ajoutant l'indicateur --enable-web-access lorsque vous utilisez gcloud CLI. Vous ne pouvez pas créer de job d'entraînement avec un shell interactif activé dans la console Google Cloud.

L'exemple suppose que vous disposez d'une application d'entraînement sur votre système de fichiers local dans un répertoire nommé trainer avec un module nommé task.

Pour créer la tâche d'entraînement, exécutez la commande suivante :

  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

Dans cette commande, remplacez les espaces réservés suivants :

  • JOB_ID : nom que vous avez choisi pour la tâche.
  • JOB_DIR : chemin d'accès à un répertoire Cloud Storage dans lequel votre application d'entraînement devra être importée.
  • REGION : région dans laquelle vous prévoyez de créer la tâche d'entraînement. Notez qu'il doit s'agir d'une région compatible avec les interfaces système interactives.

    La commande, si elle aboutit, génère le résultat suivant :

    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
    

Obtenir l'URI d'accès au Web

Après avoir lancé l'entraînement conformément aux instructions de la section précédente, utilisez la console Google Cloud ou l'outil de ligne de commande gcloud pour afficher les URI que vous pouvez utiliser pour accéder aux shells interactifs. AI Platform Training fournit un URI pour chaque nœud d'entraînement faisant partie de votre tâche.

Selon le type de tâche d'entraînement que vous avez créé, sélectionnez l'un des onglets suivants pour voir comment trouver le champ d'API webAccessUris, qui contient un URI d'interface système interactive pour chaque nœud de votre tâche.

Tâche d'entraînement

Les onglets suivants présentent différentes manières d'accéder à TrainingOutput pour un job d'entraînement standard.

gcloud

Exécutez la commande gcloud ai-platform jobs describe :

gcloud ai-platform jobs describe JOB_ID

Remplacez l'élément suivant :

  • JOB_ID : ID de votre tâche. Vous le définissez lors de la création de la tâche (si vous ne connaissez pas l'ID de votre tâche, vous pouvez exécuter la commande gcloud ai-platform jobs list et rechercher la tâche appropriée).

Dans le résultat, recherchez ce qui suit :

trainingOutput:
  webAccessUris:
    master-replica-0: INTERACTIVE_SHELL_URI

Console

  1. Ouvrez la page Tâches d'AI Platform Training dans la console Google Cloud.

    Accéder aux tâches dans la console Google Cloud

  2. Cliquez sur le nom de votre tâche dans la liste pour afficher la page Informations sur la tâche.

  3. Cliquez sur le bouton Afficher Json dans la section Résultats de l'entraînement pour développer une vue JSON de TrainingOutput pour la tâche.

Dans le résultat, recherchez ce qui suit :

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

Si le champ webAccessUris ne s'affiche pas, cela peut être dû au fait qu'AI Platform Training n'a pas encore commencé à exécuter votre tâche ou votre essai. Vérifiez que RUNNING apparaît dans le champ state. Si l'état est QUEUED ou PREPARING, attendez une minute, puis réessayez d'obtenir les informations sur la tâche.

Tâche de réglage des hyperparamètres

Les onglets suivants présentent différentes manières d'accéder à TrainingOutput pour une tâche de réglage d'hyperparamètres.

gcloud

Exécutez la commande gcloud ai-platform jobs describe :

gcloud ai-platform jobs describe JOB_ID

Remplacez l'élément suivant :

  • JOB_ID : ID de votre tâche. Vous le définissez lors de la création de la tâche (si vous ne connaissez pas l'ID de votre tâche, vous pouvez exécuter la commande gcloud ai-platform jobs list et rechercher la tâche appropriée).

Dans le résultat, recherchez ce qui suit :

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

Console

  1. Ouvrez la page Tâches d'AI Platform Training dans la console Google Cloud.

    Accéder aux tâches dans la console Google Cloud

  2. Cliquez sur le nom de votre tâche dans la liste pour afficher la page Informations sur la tâche.

  3. Cliquez sur le bouton Afficher Json dans la section Résultats de l'entraînement pour développer une vue JSON de TrainingOutput pour la tâche.

Dans le résultat, recherchez ce qui suit :

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

Si le champ webAccessUris ne s'affiche pas, cela peut être dû au fait qu'AI Platform Training n'a pas encore commencé à exécuter votre tâche ou votre essai. Vérifiez que RUNNING apparaît dans le champ state. Si l'état est QUEUED ou PREPARING, attendez une minute, puis réessayez d'obtenir les informations sur la tâche.

AI Platform Training fournit un ensemble d'URI d'interfaces système interactives pour chaque essai de réglage d'hyperparamètres lorsque l'essai passe à l'état RUNNING. Si vous souhaitez obtenir des URI pour les interfaces système interactives pour des essais ultérieurs, récupérez à nouveau les informations sur la tâche après le début de ces essais.

L'exemple précédent montre le résultat attendu pour l'entraînement à instance dupliquée unique : un URI pour le nœud d'entraînement principal. Si vous effectuez un entraînement distribué, le résultat contient un URI pour chaque nœud d'entraînement, identifié par le nom de tâche.

Par exemple, si votre tâche comporte un maître et deux nœuds de calcul, le champ webAccessUris ressemble à ceci :

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

Régions disponibles

L'utilisation d'une interface système interactive pour AI Platform Training est compatible avec les régions suivantes :

Amériques

  • Oregon (us-west1)
  • Los Angeles (us-west2)
  • Iowa (us-central1)
  • Caroline du Sud (us-east1)
  • Virginie du Nord (us-east4)
  • Montréal (northamerica-northeast1)

Europe

  • Londres (europe-west2)
  • Belgique (europe-west1)
  • Zurich (europe-west6)
  • Francfort (europe-west3)

Asie-Pacifique

  • Singapour (asia-southeast1)
  • Taïwan (asia-east1)
  • Tokyo (asia-northeast1)
  • Sydney (australia-southeast1)
  • Séoul (asia-northeast3)

AI Platform Training fournit également des régions supplémentaires pour l'entraînement.

Utiliser une interface système interactive

Pour utiliser l'interface système interactive avec un nœud d'entraînement, accédez à l'un des URI que vous avez trouvés dans la section précédente. Une interface système Bash apparaît dans votre navigateur et vous donne accès au système de fichiers du conteneur dans lequel AI Platform Training exécute votre code d'entraînement.

Les sections suivantes décrivent certains éléments à prendre en compte lorsque vous utilisez l'interface système. Elles fournissent également des exemples d'outils de surveillance que vous pouvez utiliser dans cette interface système.

Empêcher la tâche de se terminer

Lorsque AI Platform Training termine l'exécution de votre tâche ou de votre essai, vous perdez immédiatement l'accès à votre interface système interactive. Dans ce cas, le message command terminated with exit code 137 ou l'interface système peuvent cesser de répondre. Si vous avez créé des fichiers dans le système de fichiers du conteneur, ils ne persisteront pas une fois la tâche terminée.

Dans certains cas, vous souhaiterez peut-être prolonger intentionnellement l'exécution de votre tâche afin de la déboguer avec une interface système interactive. Par exemple, vous pouvez ajouter du code comme suit à votre code d'entraînement pour que la tâche continue de s'exécuter pendant au moins une heure après qu'une exception se produit :

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

Notez toutefois que des frais d'entraînement AI Platform Training vous sont facturés tant que la tâche continue de s'exécuter.

Vérifier les problèmes d'autorisation

L'environnement de l'interface système interactive est authentifié à l'aide des identifiants par défaut de l'application (ADC, application default credentials) du compte de service utilisé par AI Platform Training pour exécuter votre code d'entraînement. Vous pouvez exécuter gcloud auth list dans l'interface système pour plus de détails.

Dans l'interface système, vous pouvez utiliser gcloud storage, bq et d'autres outils compatibles avec les ADC. Cela peut vous aider à vérifier que la tâche peut accéder à un bucket Cloud Storage, à une table BigQuery ou à une autre ressource Google Cloud spécifique dont votre code d'entraînement a besoin.

Visualiser l'exécution Python avec py-spy

py-spy vous permet de profiler un programme Python en cours d'exécution, sans le modifier. Pour utiliser py-spy dans une interface système interactive, procédez comme suit :

  1. Installez py-spy :

    pip3 install py-spy
    
  2. Exécutez ps aux dans l'interface système et recherchez le PID du programme d'entraînement Python.

  3. Exécutez l'une des sous-commandes décrites dans la documentation py-spy, en utilisant le PID trouvé à l'étape précédente.

  4. Si vous utilisez py-spy record pour créer un fichier SVG, copiez ce fichier dans un bucket Cloud Storage afin de pouvoir le consulter sur votre ordinateur local ultérieurement. Exemple :

    gcloud storage cp profile.svg gs://BUCKET
    

    Remplacez BUCKET par le nom d'un bucket auquel vous avez accès.

Analyser les performances avec perf

perf vous permet d'analyser les performances de votre nœud d'entraînement. Pour installer la version de perf appropriée pour le noyau Linux de votre nœud, exécutez les commandes suivantes :

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

Vous pouvez ensuite exécuter l'une des sous-commandes décrites dans la documentation de perf.

Obtenir des informations sur l'utilisation des GPU

Les conteneurs compatibles GPU s'exécutant sur des nœuds avec des GPU disposent généralement de plusieurs outils de ligne de commande préinstallés qui peuvent vous aider à surveiller l'utilisation des GPU. Exemple :

  • Utilisez nvidia-smi pour surveiller l'utilisation des GPU de divers processus.

  • Utilisez nvprof pour collecter diverses informations de profilage de GPU. Comme nvprof ne peut pas s'associer à un processus existant, vous pouvez utiliser l'outil pour démarrer un processus supplémentaire exécutant votre code d'entraînement (cela signifie que votre code d'entraînement s'exécutera deux fois sur le nœud). Exemple :

    nvprof -o prof.nvvp python3 -m MODULE_NAME
    

    Remplacez MODULE_NAME par le nom complet du module de point d'entrée de votre application d'entraînement, par exemple trainer.task.

    Ensuite, transférez le fichier de sortie dans un bucket Cloud Storage afin de pouvoir l'analyser ultérieurement sur votre ordinateur local. Exemple :

    gcloud storage cp prof.nvvp gs://BUCKET
    

    Remplacez BUCKET par le nom d'un bucket auquel vous avez accès.

  • Si vous rencontrez une erreur de GPU (qui n'est pas liée à un problème de configuration ou d'AI Platform Training), utilisez nvidia-bug-report.sh pour créer un rapport de bug.

    Ensuite, transférez le rapport dans un bucket Cloud Storage afin de pouvoir l'analyser ultérieurement sur votre ordinateur local ou l'envoyer à NVIDIA. Exemple :

    gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
    

    Remplacez BUCKET par le nom d'un bucket auquel vous avez accès.

Si bash ne trouve aucune de ces commandes NVIDIA, essayez d'ajouter /usr/local/nvidia/bin et /usr/local/cuda/bin au fichier PATH de l'interface système :

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

Étape suivante