En esta página se explica cómo usar un shell interactivo para inspeccionar el contenedor en el que se ejecuta el código de entrenamiento. Puedes examinar el sistema de archivos y ejecutar utilidades de depuración en cada contenedor precompilado o contenedor personalizado que se ejecute en Vertex AI.
Usar una shell interactiva para inspeccionar tu contenedor de entrenamiento puede ayudarte a depurar problemas con tu código de entrenamiento o tu configuración de Vertex AI. Por ejemplo, puedes usar un shell interactivo para hacer lo siguiente:
- Ejecuta herramientas de seguimiento y creación de perfiles.
- Analiza el uso de la GPU.
- Consulta los Google Cloud permisos disponibles para el contenedor.
También puedes usar Cloud Profiler para depurar el rendimiento del entrenamiento de modelos en tus tareas de entrenamiento personalizadas. Para obtener más información, consulta Rendimiento del entrenamiento del modelo de perfil con Profiler.
Antes de empezar
Puedes usar un shell interactivo cuando realices un entrenamiento personalizado con un recurso CustomJob
, un recurso HyperparameterTuningJob
o un recurso TrainingPipeline
personalizado. Mientras preparas el código de entrenamiento y configuras el recurso de entrenamiento personalizado que elijas, asegúrate de cumplir los siguientes requisitos:
Asegúrate de que tu contenedor de entrenamiento tenga instalado
bash
.Todos los contenedores de entrenamiento prediseñados tienen
bash
instalado. Si crea un contenedor personalizado para el entrenamiento, utilice un contenedor base que incluyabash
o instalebash
en su Dockerfile.Realiza un entrenamiento personalizado en una región que admita shells interactivos.
Asegúrate de que cualquier persona que quiera acceder a una shell interactiva tenga los siguientes permisos en el Google Cloud proyecto en el que se esté ejecutando el entrenamiento personalizado:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Si inicias el entrenamiento personalizado por tu cuenta, es muy probable que ya tengas estos permisos y puedas acceder a una shell interactiva. Sin embargo, si quieres usar una shell interactiva para inspeccionar un recurso de entrenamiento personalizado creado por otra persona de tu organización, es posible que tengas que obtener estos permisos.
Una forma de obtener estos permisos es pedirle a un administrador de tu organización que te conceda el rol de usuario de Vertex AI (
roles/aiplatform.user
).
Requisitos para casos avanzados
Si utilizas determinadas funciones avanzadas, debes cumplir los siguientes requisitos adicionales:
Si adjuntas una cuenta de servicio personalizada a tu recurso de entrenamiento personalizado, asegúrate de que todos los usuarios que quieran acceder a una shell interactiva tengan el permiso
iam.serviceAccounts.actAs
para la cuenta de servicio adjunta.En la guía sobre cuentas de servicio personalizadas se indica que debes tener este permiso para adjuntar una cuenta de servicio. También necesitas este permiso para ver una shell interactiva durante el entrenamiento personalizado.
Por ejemplo, para crear un
CustomJob
con una cuenta de servicio adjunta, debes tener el permisoiam.serviceAccounts.actAs
para la cuenta de servicio. Si uno de tus compañeros quiere ver una shell interactiva para esteCustomJob
, también debe tener el mismo permisoiam.serviceAccounts.actAs
.Si has configurado tu proyecto para usar Controles de Servicio de VPC con Vertex AI, ten en cuenta las siguientes limitaciones adicionales:
No puedes usar IPs privadas para el entrenamiento personalizado. Si necesitas VPC-SC con el emparejamiento entre VPCs, debes realizar una configuración adicional para usar la shell interactiva. Sigue las instrucciones que se indican en Panel de control de Ray y shell interactivo con VPC-SC y emparejamiento de VPC para configurar el shell interactivo con VPC-SC y el emparejamiento de VPC en tu proyecto de usuario.
Desde una shell interactiva, no puedes acceder a Internet público ni aGoogle Cloud recursos que estén fuera de tu perímetro de servicio.
Para proteger el acceso a shells interactivos, debes añadir
notebooks.googleapis.com
como servicio restringido en tu perímetro de servicio, además deaiplatform.googleapis.com
. Si solo restringesaiplatform.googleapis.com
y nonotebooks.googleapis.com
, los usuarios podrán acceder a shells interactivos desde máquinas que estén fuera del perímetro del servicio, lo que reduce la ventaja de seguridad de usar Controles de Servicio de VPC.
Habilitar shells interactivos
Para habilitar shells interactivos en un recurso de entrenamiento personalizado, asigna el valor true
al campo enableWebAccess
API
cuando crees un CustomJob
, un HyperparameterTuningJob
o un TrainingPipeline
personalizado.
En los siguientes ejemplos se muestra cómo hacerlo con varias herramientas diferentes:
Consola
Sigue la guía para crear un TrainingPipeline
personalizado en la consola Google Cloud . En el panel Entrenar nuevo modelo, cuando llegues al paso Detalles del modelo, haz lo siguiente:
Haz clic en Advanced options (Opciones avanzadas).
Selecciona la casilla Habilitar depuración de entrenamiento.
A continuación, completa el resto del flujo de trabajo Entrenar modelo nuevo.
gcloud
Si quieres crear un
CustomJob
, ejecuta el comandogcloud ai custom-jobs create
y especifica la marca--enable-web-access
en este comando.Si quieres crear un
HyperparameterTuningJob
, ejecuta el comandogcloud ai hp-tuning-jobs create
y especifica la marca--enable-web-access
en este comando.
Para saber cómo usar estos comandos, consulta la guía para crear un CustomJob
y la guía para crear un HyperparameterTuningJob
.
API
Los siguientes cuerpos de solicitud REST parciales muestran dónde especificar el campo enableWebAccess
para cada tipo de recurso de entrenamiento personalizado:
CustomJob
El siguiente ejemplo es un cuerpo de solicitud parcial para el método de la API projects.locations.customJobs.create
:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Para ver un ejemplo de cómo enviar una solicitud de API para crear un CustomJob
, consulta Crear trabajos de entrenamiento personalizados.
HyperparameterTuningJob
El siguiente ejemplo es un cuerpo de solicitud parcial para el método de la API projects.locations.hyperparameterTuningJobs.create
:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Para ver un ejemplo de cómo enviar una solicitud de API para crear un HyperparameterTuningJob
, consulta Usar el ajuste de hiperparámetros.
Custom TrainingPipeline
En los ejemplos siguientes se muestran cuerpos de solicitud parciales del método de la API projects.locations.trainingPipelines.create
.
Selecciona una de las siguientes pestañas, en función de si usas la optimización de hiperparámetros:
Sin ajuste de hiperparámetros
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Con ajuste de hiperparámetros
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Para ver un ejemplo de cómo enviar una solicitud de API para crear un TrainingPipeline
personalizado, consulta Crear canalizaciones de entrenamiento.
Python
Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.
Asigne el valor true
al parámetro enable_web_access
cuando ejecute uno de los siguientes métodos:
Si quieres crear un
CustomJob
, usa el métodoCustomJob.run
.Si quieres crear un
HyperparameterTuningJob
, usa el métodoHyperparameterTuningJob.run
.Si quieres crear un
TrainingPipeline
personalizado, usa uno de los siguientes métodos:
Ir a un shell interactivo
Después de iniciar el entrenamiento personalizado siguiendo las instrucciones de la sección anterior, Vertex AI genera uno o varios URIs que puedes usar para acceder a shells interactivos. Vertex AI genera un URI único para cada nodo de entrenamiento de tu tarea.
Puedes ir a un shell interactivo de una de las siguientes formas:
- Hacer clic en un enlace de la Google Cloud consola
- Usar la API Vertex AI para obtener el URI de acceso web del shell
Desplazarse desde la Google Cloud consola
En la Google Cloud consola, en la sección Vertex AI, ve a una de las siguientes páginas:
Si no utilizas el ajuste de hiperparámetros, ve a la página Trabajos personalizados:
Si estás usando el ajuste de hiperparámetros, ve a la página Tareas de ajuste de hiperparámetros:
Haga clic en el nombre del recurso de formación personalizado.
Si has creado un
TrainingPipeline
para el entrenamiento personalizado, haz clic en el nombre delCustomJob
o delHyperparameterTuningJob
que haya creado tuTrainingPipeline
. Por ejemplo, si tu canal tiene el nombrePIPELINE_NAME
, podría llamarsePIPELINE_NAME-custom-job
oPIPELINE_NAME-hyperparameter-tuning-job
.En la página de tu tarea, haz clic en Iniciar terminal web. Si tu trabajo usa varios nodos, haz clic en Iniciar terminal web junto al nodo para el que quieras obtener un shell interactivo.
Ten en cuenta que solo puedes acceder a una shell interactiva mientras se esté ejecutando el trabajo. Si no ves la opción Iniciar terminal web, puede deberse a que Vertex AI aún no ha empezado a ejecutar tu trabajo o a que el trabajo ya ha finalizado o ha fallado. Si el Estado del trabajo es
Queued
oPending
, espera un minuto y, a continuación, prueba a actualizar la página.Si usas el ajuste de hiperparámetros, hay enlaces Iniciar terminal web independientes para cada prueba.
Obtener el URI de acceso web de la API
Usa el método de la API projects.locations.customJobs.get
o el método de la API projects.locations.hyperparameterTuningJobs.get
para ver los URIs que puedes usar para acceder a shells interactivos.
En función del tipo de recurso de entrenamiento personalizado que utilices, selecciona una de las siguientes pestañas para ver ejemplos de cómo encontrar el campo de la API webAccessUris
, que contiene un URI de shell interactivo para cada nodo de tu trabajo:
CustomJob
En las siguientes pestañas se muestran diferentes formas de enviar una solicitud projects.locations.customJobs.get
:
gcloud
Ejecuta el gcloud ai custom-jobs describe
comando:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Haz los cambios siguientes:
JOB_ID: ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID al crear el trabajo. Si no sabes cuál es el ID de tu trabajo, puedes ejecutar el comandogcloud ai custom-jobs list
y buscar el trabajo adecuado.LOCATION: la región en la que has creado el trabajo.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
LOCATION: la región en la que has creado el trabajo.
PROJECT_ID: tu ID de proyecto.
JOB_ID: ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID al crear el trabajo.
Método HTTP y URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
Para enviar tu solicitud, despliega una de estas opciones:
En la salida, busca lo siguiente:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Si no ves el campo webAccessUris
, puede deberse a que Vertex AI aún no ha empezado a ejecutar tu trabajo. Comprueba que veas JOB_STATE_RUNNING
en el campo state
. Si el estado es JOB_STATE_QUEUED
o JOB_STATE_PENDING
, espera un minuto y vuelve a intentar obtener la información del proyecto.
HyperparameterTuningJob
En las siguientes pestañas se muestran diferentes formas de enviar una solicitud projects.locations.hyperparameterTuningJobs.get
:
gcloud
Ejecuta el gcloud ai hp-tuning-jobs describe
comando:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Haz los cambios siguientes:
JOB_ID: ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID al crear el trabajo. Si no sabes cuál es el ID de tu trabajo, puedes ejecutar el comandogcloud ai hp-tuning-jobs list
y buscar el trabajo adecuado.LOCATION: la región en la que has creado el trabajo.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
LOCATION: la región en la que has creado el trabajo.
PROJECT_ID: tu ID de proyecto.
JOB_ID: ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID al crear el trabajo.
Método HTTP y URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
Para enviar tu solicitud, despliega una de estas opciones:
En la salida, busca lo siguiente:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Si no ves el campo webAccessUris
, puede deberse a que Vertex AI aún no ha empezado a ejecutar tu trabajo. Comprueba que veas JOB_STATE_RUNNING
en el campo state
. Si el estado es JOB_STATE_QUEUED
o JOB_STATE_PENDING
, espera un minuto y vuelve a intentar obtener la información del proyecto.
Vertex AI proporciona un conjunto de URIs de shell interactivos para cada prueba de ajuste de hiperparámetros cuando la prueba pasa al estado ACTIVE
. Si quieres obtener URIs de shell interactivos para pruebas posteriores, vuelve a obtener la información del trabajo después de que empiecen esas pruebas.
En el ejemplo anterior se muestra el resultado esperado del entrenamiento de una sola réplica: un URI para el nodo de entrenamiento principal. Si realizas un entrenamiento distribuido, el resultado contiene un URI para cada nodo de entrenamiento, identificado por el grupo de trabajadores.
Por ejemplo, si tu trabajo tiene un grupo de trabajadores principal con una réplica y un grupo de trabajadores secundario con dos réplicas, el campo webAccessUris
tendrá un aspecto similar al siguiente:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Usar un shell interactivo
Para usar la shell interactiva de un nodo de entrenamiento, ve a una de las URIs que has encontrado en la sección anterior. Aparecerá un shell de Bash en tu navegador, que te dará acceso al sistema de archivos del contenedor en el que Vertex AI ejecuta tu código de entrenamiento.
En las siguientes secciones se describen algunos aspectos que debes tener en cuenta al usar la shell y se proporcionan algunos ejemplos de herramientas de monitorización que puedes usar en la shell.
Evitar que finalice el trabajo
Cuando Vertex AI termine de ejecutar tu tarea o prueba, perderás inmediatamente el acceso a tu shell interactivo. Si esto ocurre, es posible que veas el mensaje command terminated with exit code 137
o que la shell deje de responder. Si has creado algún archivo en el sistema de archivos del contenedor, no se conservará después de que finalice el trabajo.
En algunos casos, puede que quieras que tu trabajo se ejecute durante más tiempo para depurarlo con una shell interactiva. Por ejemplo, puede añadir un código como el siguiente al código de entrenamiento para que el trabajo siga ejecutándose durante al menos una hora después de que se produzca una excepción:
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
Sin embargo, ten en cuenta que se te aplicarán cargos de Vertex AI Training mientras la tarea siga en ejecución.
Comprobar problemas de permisos
El entorno de shell interactivo se autentica mediante credenciales predeterminadas de la aplicación (ADC) para la cuenta de servicio que usa Vertex AI para ejecutar tu código de entrenamiento. Puedes ejecutar gcloud auth list
en el shell para obtener más información.
En el shell, puedes usar bq
y otras herramientas que admitan ADC. Esto puede ayudarte a verificar que la tarea puede acceder a un segmento de Cloud Storage, una tabla de BigQuery u otroGoogle Cloud recurso concreto que necesite tu código de entrenamiento.
Visualizar la ejecución de Python con py-spy
py-spy
te permite crear un perfil de un programa Python en ejecución sin modificarlo. Para usar py-spy
en un shell interactivo, sigue estos pasos:
Instalar
py-spy
:pip3 install py-spy
Ejecuta
ps aux
en el shell y busca el PID del programa de entrenamiento de Python.Ejecuta cualquiera de los subcomandos descritos en la documentación de
py-spy
, con el PID que has encontrado en el paso anterior.Si usas
py-spy record
para crear un archivo SVG, copia este archivo en un segmento de Cloud Storage para poder verlo más adelante en tu ordenador local. Por ejemplo:gcloud storage cp profile.svg gs://BUCKET
Sustituye BUCKET por el nombre de un segmento al que tengas acceso.
Analizar el rendimiento con perf
perf
te permite analizar el rendimiento de tu nodo de entrenamiento.
Para instalar la versión de perf
adecuada para el kernel de Linux de tu nodo, ejecuta los siguientes comandos:
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
Después, puedes ejecutar cualquiera de los subcomandos descritos en la perf
documentación.
Obtener información sobre el uso de la GPU
Los contenedores habilitados para GPU que se ejecutan en nodos con GPUs suelen tener preinstaladas varias herramientas de línea de comandos que pueden ayudarte a monitorizar el uso de la GPU. Por ejemplo:
Usa
nvidia-smi
para monitorizar el uso de la GPU de varios procesos.Usa
nvprof
para recoger información variada sobre el perfil de la GPU. Comonvprof
no puede asociarse a un proceso ya iniciado, puede que quieras usar la herramienta para iniciar un proceso adicional que ejecute tu código de entrenamiento. Esto significa que el código de entrenamiento se ejecutará dos veces en el nodo. Por ejemplo:nvprof -o prof.nvvp python3 -m MODULE_NAME
Sustituye MODULE_NAME por el nombre completo del módulo del punto de entrada de tu aplicación de entrenamiento; por ejemplo,
trainer.task
.Después, transfiere el archivo de salida a un segmento de Cloud Storage para poder analizarlo más adelante en tu ordenador local. Por ejemplo:
gcloud storage cp prof.nvvp gs://BUCKET
Sustituye BUCKET por el nombre de un segmento al que tengas acceso.
Si se produce un error de GPU (no un problema con tu configuración o con Vertex AI), usa
nvidia-bug-report.sh
para crear un informe de errores.A continuación, transfiere el informe a un segmento de Cloud Storage para poder analizarlo más adelante en tu ordenador local o enviarlo a NVIDIA. Por ejemplo:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
Sustituye BUCKET por el nombre de un segmento al que tengas acceso.
Si bash
no encuentra ninguno de estos comandos de NVIDIA, prueba a añadir /usr/local/nvidia/bin
y /usr/local/cuda/bin
al PATH
del shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Panel de control de Ray y shell interactivo con VPC-SC y emparejamiento entre VPCs
-
Configura
peered-dns-domains
.{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME: cambia a la red emparejada.
-
LOCATION: ubicación deseada (por ejemplo,
us-central1
).
-
-
Configura
DNS managed zone
.{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
PROJECT_ID: tu ID de proyecto. Puedes encontrar estos IDs en la página de bienvenida de la Google Cloud consola.
-
-
Registra la transacción DNS.
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
Envía un trabajo de entrenamiento con el shell interactivo, VPC-SC y el emparejamiento de VPC habilitados.
Siguientes pasos
- Consulta cómo optimizar el rendimiento de tus trabajos de entrenamiento personalizados con Profiler.
- Consulta más información sobre cómo coordina Vertex AI el entrenamiento personalizado.
- Consulta los requisitos del código de entrenamiento.