Cette page explique comment utiliser un shell interactif pour inspecter le conteneur dans lequel votre code d'entraînement est exécuté. Vous pouvez parcourir le système de fichiers et exécuter des utilitaires de débogage dans chaque conteneur prédéfini ou conteneur personnalisé exécuté sur Vertex AI.
L'utilisation d'une interface système interactive pour inspecter votre conteneur d'entraînement peut vous aider à déboguer les problèmes de votre code d'entraînement ou de votre configuration de Vertex AI. Par exemple, vous pouvez utiliser un shell interactif 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
Vertex AI est également intégré à TensorFlow Profiler, que vous pouvez utiliser pour déboguer les performances d'entraînement des modèles pour vos jobs d'entraînement personnalisés. Pour en savoir plus, consultez la page Profiler les performances d'entraînement des modèles à l'aide de Profiler.
Avant de commencer
Vous pouvez utiliser une interface système interactive lorsque vous effectuez un entraînement personnalisé avec une ressource CustomJob
, HyperparameterTuningJob
ou TrainingPipeline
personnalisée. Lorsque vous préparez votre code d'entraînement et configurez la ressource d'entraînement personnalisée de votre choix, assurez-vous de répondre aux exigences suivantes :
Assurez-vous que
bash
est installé sur votre conteneur d'entraînement.bash
est installé sur tous les conteneurs d'entraînement prédéfinis. 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 personnalisé est en cours d'exécution :
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Si vous lancez vous-même un entraînement personnalisé, 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 ressource d'entraînement personnalisée 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 Utilisateur Vertex AI (
roles/aiplatform.user
).
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 ressource d'entraînement personnalisé, 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
CustomJob
avec un compte de service associé, vous devez disposer de l'autorisationiam.serviceAccounts.actAs
pour ce compte. Si l'un de vos collègues souhaite afficher une interface système interactive pour cette tâcheCustomJob
, il doit également disposer de la même autorisationiam.serviceAccounts.actAs
.Si vous avez configuré votre projet pour utiliser VPC Service Controls avec Vertex AI, tenez compte des limites supplémentaires suivantes :
Vous ne pouvez pas utiliser d'adresse IP privée pour l'entraînement personnalisé.
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 deaiplatform.googleapis.com
. Si vous limitez uniquementaiplatform.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 ressource d'entraînement personnalisée, définissez le champ d'API enableWebAccess
sur true
lorsque vous créez une ressource CustomJob
, HyperparameterTuningJob
ou une ressource personnalisée TrainingPipeline
.
Les exemples suivants montrent comment effectuer cette opération à l'aide de différents outils :
Console
Suivez le guide pour créer un objet TrainingPipeline
personnalisé dans Google Cloud Console. Dans le volet Entraîner un nouveau modèle, lorsque vous atteignez l'étape Détails du modèle, procédez comme suit :
Cliquez sur Options avancées.
Cochez la case Activer le débogage de l'entraînement.
Effectuez ensuite le reste du workflow pour l'entraînement du nouveau modèle.
gcloud
Si vous souhaitez créer une tâche
CustomJob
, exécutez la commandegcloud ai custom-jobs create
et spécifiez l'option--enable-web-access
sur cette commande.Si vous souhaitez créer une tâche
HyperparameterTuningJob
, exécutez la commandegcloud ai hp-tuning-jobs create
et spécifiez l'option--enable-web-access
sur cette commande.
Pour apprendre à utiliser ces commandes, consultez les sections Créer un objet CustomJob
et Créer un objet HyperparameterTuningJob
.
API
Les corps de requête REST partiels suivants indiquent où spécifier le champ enableWebAccess
pour chaque type de ressource d'entraînement personnalisé :
Tâche personnalisée
L'exemple suivant est un corps de requête partiel pour la méthode projects.locations.customJobs.create
de l'API :
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Pour obtenir un exemple d'envoi d'une requête API pour créer une tâche personnalisée CustomJob
, consultez la page Créer des tâches d'entraînement personnalisées.
HyperparameterTuningJob
L'exemple suivant est un corps de requête partiel pour la méthode projects.locations.hyperparameterTuningJobs.create
de l'API :
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Pour obtenir un exemple d'envoi d'une requête API pour créer un objet HyperparameterTuningJob
, consultez la page Utiliser les réglages d'hyperparamètres.
Pipeline d'entraînement personnalisé
Les exemples suivants montrent les corps de requête partiels pour la méthode projects.locations.trainingPipelines.create
de l'API.
Sélectionnez l'un des onglets suivants, selon que vous utilisez ou non les réglages d'hyperparamètres :
Sans réglages d'hyperparamètres
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Avec réglages d'hyperparamètres
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Pour obtenir un exemple d'envoi d'une requête API pour créer un pipeline d'entraînement personnalisé (TrainingPipeline
), consultez la page Créer des pipelines d'entraînement.
Python
Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.
Définissez le paramètre enable_web_access
sur true
lorsque vous exécutez l'une des méthodes suivantes :
Si vous souhaitez créer un
CustomJob
, utilisez la méthodeCustomJob.run
.Si vous souhaitez créer un
HyperparameterTuningJob
, utilisez la méthodeHyperparameterTuningJob.run
.Si vous souhaitez créer un
TrainingPipeline
personnalisé, utilisez l'une des méthodes suivantes :
Accéder à une interface système interactive
Une fois que vous avez lancé un entraînement personnalisé en suivant les instructions de la section précédente, Vertex AI génère un ou plusieurs URI que vous pouvez utiliser pour accéder aux interfaces système interactives. Vertex AI génère un URI unique pour chaque nœud d'entraînement de votre tâche.
Vous pouvez accéder à un shell interactif de l'une des manières suivantes :
- Cliquez sur un lien dans la cnsole Google Cloud.
- Utilisez l'API Vertex AI pour obtenir l'URI d'accès Web du shell
Naviguer depuis la console Google Cloud
Dans la console Google Cloud, dans la section Vertex AI, accédez à l'une des pages suivantes :
Si vous n'utilisez pas les réglages d'hyperparamètres, accédez à la page Tâches personnalisées :
Si vous utilisez les réglages d'hyperparamètres, accédez à la page Tâches de réglage d'hyperparamètres :
Cliquez sur le nom de votre ressource d'entraînement personnalisé.
Si vous avez créé un
TrainingPipeline
pour l'entraînement personnalisé, cliquez sur le nom deCustomJob
ouHyperparameterTuningJob
créé par votreTrainingPipeline
. Par exemple, si votre pipeline porte le nomPIPELINE_NAME
, celui-ci peut être nomméPIPELINE_NAME-custom-job
ouPIPELINE_NAME-hyperparameter-tuning-job
.Sur la page de votre tâche, cliquez sur Lancer le terminal Web. Si votre tâche utilise plusieurs nœuds, cliquez sur Lancer le terminal Web à côté du nœud pour lequel vous souhaitez une interface système interactive.
Notez que vous ne pouvez accéder à une interface système interactive que pendant l'exécution de la tâche. Si le bouton Lancer un terminal Web ne s'affiche pas, il est possible que Vertex AI n'ait pas encore commencé à exécuter votre tâche, ou que la tâche soit déjà terminée ou qu'elle ait échoué. Si l'état de la tâche est
Queued
ouPending
, attendez une minute. puis actualisez la page.Si vous utilisez les réglages d'hyperparamètres, il existe des liens distincts pour Lancer un terminal Web pour chaque essai.
Obtenir l'URI d'accès Web à partir de l'API
Utilisez la méthode de l'API projects.locations.customJobs.get
ou la méthode de l'API projects.locations.hyperparameterTuningJobs.get
pour voir les URI que vous pouvez utiliser pour accéder aux shells interactifs.
Selon le type de ressource d'entraînement personnalisé que vous utilisez, sélectionnez l'un des onglets suivants pour voir des exemples sur la façon de 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 personnalisée
Les onglets suivants montrent différentes manières d'envoyer une requête projects.locations.customJobs.get
:
gcloud
Exécutez la commande gcloud ai custom-jobs describe
:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Remplacez l'élément suivant :
JOB_ID : ID numérique de la tâche. Cet ID correspond à la dernière partie du champ
name
de la tâche. Vous avez peut-être vu l'ID lorsque vous avez créé la tâche. (Si vous ne connaissez pas l'ID de votre tâche, vous pouvez exécuter la commandegcloud ai custom-jobs list
et rechercher la tâche concernée.)LOCATION : région dans laquelle vous avez créé la tâche.
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
LOCATION : région dans laquelle vous avez créé la tâche.
PROJECT_ID : l'ID de votre projet.
JOB_ID : ID numérique de la tâche. Cet ID correspond à la dernière partie du champ
name
de la tâche. Vous avez peut-être vu l'ID lorsque vous avez créé la tâche.
Méthode HTTP et URL :
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
Pour envoyer votre requête, développez l'une des options suivantes :
Dans le résultat, recherchez ce qui suit :
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Si le champ webAccessUris
ne s'affiche pas, il est possible que Vertex AI n'ait pas encore commencé à exécuter votre tâche. Vérifiez que JOB_STATE_RUNNING
s'affiche dans le champ state
. Si l'état est JOB_STATE_QUEUED
ou JOB_STATE_PENDING
, attendez une minute, puis réessayez d'obtenir les informations sur le projet.
HyperparameterTuningJob
Les onglets suivants montrent différentes manières d'envoyer une requête projects.locations.hyperparameterTuningJobs.get
:
gcloud
Exécutez la commande gcloud ai hp-tuning-jobs describe
:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Remplacez l'élément suivant :
JOB_ID : ID numérique de la tâche. Cet ID correspond à la dernière partie du champ
name
de la tâche. Vous avez peut-être vu l'ID lorsque vous avez créé la tâche. (Si vous ne connaissez pas l'ID de votre tâche, vous pouvez exécuter la commandegcloud ai hp-tuning-jobs list
et rechercher la tâche concernée.)LOCATION : région dans laquelle vous avez créé la tâche.
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
LOCATION : région dans laquelle vous avez créé la tâche.
PROJECT_ID : l'ID de votre projet.
JOB_ID : ID numérique de la tâche. Cet ID correspond à la dernière partie du champ
name
de la tâche. Vous avez peut-être vu l'ID lorsque vous avez créé la tâche.
Méthode HTTP et URL :
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
Pour envoyer votre requête, développez l'une des options suivantes :
Dans le résultat, recherchez ce qui suit :
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Si le champ webAccessUris
ne s'affiche pas, il est possible que Vertex AI n'ait pas encore commencé à exécuter votre tâche. Vérifiez que JOB_STATE_RUNNING
s'affiche dans le champ state
. Si l'état est JOB_STATE_QUEUED
ou JOB_STATE_PENDING
, attendez une minute, puis réessayez d'obtenir les informations sur le projet.
Vertex AI 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 ACTIVE
. Si vous souhaitez obtenir des URI d'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 pool de nœuds de calcul.
Par exemple, si votre tâche comporte un pool de nœuds de calcul principal avec une instance dupliquée et un pool de nœuds de calcul secondaire avec deux instances dupliquées, le champ webAccessUris
ressemble à ceci :
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
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 Vertex AI 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 Vertex AI 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 de Vertex AI vous sont facturés tant que la tâche continue de s'exécuter.
Vérifier les problèmes d'autorisation
L'environnement shell interactif est authentifié à l'aide des identifiants par défaut de l'application (ADC) du compte de service utilisé par Vertex AI 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 gsutil
, 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 :gsutil 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
.
Récupérer 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 :
gsutil 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 de Vertex AI), 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 :
gsutil 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}"
Étapes suivantes
- Découvrez comment optimiser les performances de vos tâches d'entraînement personnalisé à l'aide de Vertex AI TensorBoard Profiler.
- Découvrez comment Vertex AI orchestre l'entraînement personnalisé.
- Consultez les exigences concernant le code d'entraînement.