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 incluantbash
ou installezbash
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 autorisationiam.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 deml.googleapis.com
. Si vous limitez uniquementml.googleapis.com
et nonnotebooks.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
Ouvrez la page Tâches d'AI Platform Training dans la console Google Cloud.
Cliquez sur le nom de votre tâche dans la liste pour afficher la page Informations sur la tâche.
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
Ouvrez la page Tâches d'AI Platform Training dans la console Google Cloud.
Cliquez sur le nom de votre tâche dans la liste pour afficher la page Informations sur la tâche.
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 :
Installez
py-spy
:pip3 install py-spy
Exécutez
ps aux
dans l'interface système et recherchez le PID du programme d'entraînement Python.Exécutez l'une des sous-commandes décrites dans la documentation
py-spy
, en utilisant le PID trouvé à l'étape précédente.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. Commenvprof
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
- Apprenez-en plus sur le service AI Platform Training.
- Découvrez comment empaqueter une application d'entraînement.