En esta página, se muestra cómo usar una shell interactivo para inspeccionar el contenedor en el que se ejecuta tu código de entrenamiento. Puedes explorar el sistema de archivos y ejecutar utilidades de depuración en cada contenedor compilado previamente o contenedor personalizado que se ejecuta en Vertex AI.
El uso de una shell interactiva para inspeccionar el contenedor de entrenamiento puede ayudarte a depurar problemas del código de entrenamiento o la configuración de Vertex AI. Por ejemplo, puedes usar una shell interactiva para hacer lo siguiente:
- Ejecuta herramientas de seguimiento y generación de perfiles.
- Analiza el uso de GPU.
- Verifica los permisos de Google Cloud disponibles para el contenedor.
También puedes usar Cloud Profiler para depurar el rendimiento del entrenamiento de modelos en los trabajos de entrenamiento personalizados. Para obtener más detalles, consulta Genera perfiles de rendimiento de entrenamiento de modelos con Profiler.
Antes de comenzar
Puedes usar una shell interactiva cuando realizas un entrenamiento personalizado con un recurso CustomJob
, HyperparameterTuningJob
o TrainingPipeline
personalizado. A medida que preparas tu código de entrenamiento y configuras el recurso de entrenamiento personalizado que elijas, asegúrate de cumplir con los siguientes requisitos:
Asegúrate de que tu contenedor de entrenamiento tenga
bash
instalado.Todos los contenedores de entrenamiento compilados con anterioridad tienen
bash
instalado. Si creas un contenedor personalizado para el entrenamiento, usa un contenedor base que incluyabash
o instalabash
en tu Dockerfile.Realiza el entrenamiento personalizado en una región que admita shells interactivas.
Asegúrate de que cualquier persona que desee acceder a una shell interactiva tenga los siguientes permisos para el proyecto de Google Cloud en el que se ejecuta el entrenamiento personalizado:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Si inicias un entrenamiento personalizado, lo más probable es que ya tengas estos permisos y puedas acceder a una shell interactiva. Sin embargo, si deseas usar una shell interactiva para inspeccionar un recurso de entrenamiento personalizado que creó otra persona de tu organización, es posible que debas obtener estos permisos.
Una forma de obtener estos permisos es solicitarle a un administrador de tu organización que te otorgue la función de usuario de IA de Vertex (
roles/aiplatform.user
).
Requisitos para casos avanzados
Si usas ciertas funciones avanzadas, cumple con los siguientes requisitos adicionales:
Si adjuntas una cuenta de servicio personalizada a tu recurso de entrenamiento personalizado, asegúrate de que cualquier usuario que desee acceder a una shell interactiva tenga el permiso
iam.serviceAccounts.actAs
para la cuenta de servicio adjunta.En la guía sobre las cuentas de servicio personalizadas, se indica que debes tener este permiso para conectar una cuenta de servicio. También necesitas este permiso para ver un shell interactivo durante el entrenamiento personalizado.
Por ejemplo, a fin de crear un
CustomJob
con una cuenta de servicio adjunta, debes tener el permisoiam.serviceAccounts.actAs
para la cuenta de servicio. Si uno de tus colegas quiere ver una shell interactiva para esteCustomJob
, también debe tener el mismo permisoiam.serviceAccounts.actAs
.Si configuraste tu proyecto para usar los Controles del servicio de VPC con Vertex AI, ten en cuenta las siguientes limitaciones adicionales:
No puedes usar una IP privada para el entrenamiento personalizado. Si necesitas VPC-SC con intercambio de tráfico entre VPC, se requiere una configuración adicional para usar la shell interactiva. Sigue las instrucciones que se abordan en el panel de Ray y la shell interactiva con VPC-SC + intercambio de tráfico entre VPC para configurar la configuración de shell interactiva con VPC-SC y el intercambio de tráfico de VPC en tu proyecto de usuario.
Desde un shell interactivo, no puedes acceder a la Internet pública ni a los recursos de Google Cloud fuera del perímetro de servicio.
Para proteger el acceso a shells interactivos, debes agregar
notebooks.googleapis.com
como servicio restringido en el perímetro de servicio, además deaiplatform.googleapis.com
. Si solo restringesaiplatform.googleapis.com
y nonotebooks.googleapis.com
, los usuarios pueden acceder a shells interactivos desde máquinas fuera del perímetro de servicio, lo que reduce el beneficio de seguridad de usar los Controles del servicio de VPC.
Habilita shells interactivas
A fin de habilitar shells interactivos para un recurso de entrenamiento personalizado, establece el campo de API enableWebAccess
en true
cuando crees un CustomJob
, un HyperparameterTuningJob
o una TrainingPipeline
personalizada.
En los siguientes ejemplos, se muestra cómo hacerlo con varias herramientas diferentes:
Console
Sigue la guía para crear un TrainingPipeline
personalizado en la consola de Google Cloud. En el panel Entrenar un modelo nuevo, cuando alcances el paso Detalles del modelo, haz lo siguiente:
Haz clic en Opciones avanzadas.
Selecciona la casilla de verificación Habilitar la depuración de entrenamiento.
Luego, completa el resto del flujo de trabajo del Entrenar un modelo nuevo.
gcloud
Si deseas crear un
CustomJob
, ejecuta el comandogcloud ai custom-jobs create
y especifica la marca--enable-web-access
en este comando.Si deseas crear un
HyperparameterTuningJob
, ejecuta el comandogcloud ai hp-tuning-jobs create
y especifica la marca--enable-web-access
en este comando.
Si deseas obtener información sobre cómo usar estos comandos, consulta la guía para crear un CustomJob
y la guía sobre cómo crear un HyperparameterTuningJob
.
API
En los siguientes cuerpos de solicitud de REST parciales, se muestra 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
}
...
}
Si deseas ver un ejemplo de envío de una solicitud a la API para crear un CustomJob
, consulta Crea 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
}
...
}
Si deseas ver un ejemplo de cómo enviar una solicitud a la API para crear un HyperparameterTuningJob
, consulta Usa el ajuste de hiperparámetros.
TrainingPipeline personalizada
En los siguientes ejemplos, se muestran cuerpos de solicitud parciales para el método de la API projects.locations.trainingPipelines.create
.
Selecciona una de las siguientes pestañas, según si usas el ajuste de hiperparámetros:
Sin ajuste de hiperparámetros
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Con ajuste de hiperparámetros
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Si deseas obtener un ejemplo del envío de una solicitud a la API para crear una TrainingPipeline
personalizada, consulta Crea canalizaciones de entrenamiento.
Python
Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.
Configura el parámetro enable_web_access
como true
cuando ejecutes uno de los siguientes métodos:
Si deseas crear un
CustomJob
, usa el métodoCustomJob.run
.Si deseas crear un
HyperparameterTuningJob
, usa el métodoHyperparameterTuningJob.run
.Si deseas crear un
TrainingPipeline
personalizado, usa uno de los siguientes métodos:
Navega a una shell interactiva
Después de iniciar el entrenamiento personalizado de acuerdo con las instrucciones de la sección anterior, Vertex AI genera uno o más URI que puedes usar para acceder a shells interactivos. Vertex AI genera un URI único para cada nodo de entrenamiento en tu trabajo.
Puede navegar a una shell interactiva de una de las siguientes maneras:
- Haz clic en un vínculo en la consola de Google Cloud
- Usa la API de Vertex AI para obtener el URI de acceso web de la shell
Navega desde la consola de Google Cloud
En la sección AI de la consola de Cloud de la consola de Google Cloud, ve a una de las siguientes páginas:
Si no usas el ajuste de hiperparámetros, ve a la página Trabajos personalizados:
Si usas el ajuste de hiperparámetros, ve a la página Trabajos de ajuste de hiperparámetros:
Haz clic en el nombre de tu recurso de entrenamiento personalizado.
Si creaste un
TrainingPipeline
para el entrenamiento personalizado, haz clic en el nombre delCustomJob
oHyperparameterTuningJob
que creó tuTrainingPipeline
. Por ejemplo, si tu canalización tiene el nombrePIPELINE_NAME
, podría llamarsePIPELINE_NAME-custom-job
oPIPELINE_NAME-hyperparameter-tuning-job
.En la página de tu trabajo, haz clic en Iniciar terminal web. Si tu trabajo usa varios nodos, haz clic en Iniciar terminal web junto al nodo para el que deseas una shell interactiva.
Ten en cuenta que solo puedes acceder a una shell interactiva mientras se ejecuta el trabajo. Si no ves Iniciar terminal web, es posible que Vertex AI aún no comience a ejecutar tu trabajo o que el trabajo ya finalizó o falle. Si el Estado del trabajo es
Queued
oPending
, espera un minuto. Luego, intenta actualizar la página.Si usas el ajuste de hiperparámetros, hay vínculos Iniciar terminal web independientes para cada prueba.
Obtén el URI de acceso web desde la API
Usa el método de la API projects.locations.customJobs.get
o el método de la API projects.locations.hyperparameterTuningJobs.get
si deseas ver los URI que puedes usar para acceder a shells interactivos.
Según el tipo de recurso de entrenamiento personalizado que uses, 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 del trabajo:
CustomJob
En las siguientes pestañas, se muestran diferentes formas de enviar una solicitud projects.locations.customJobs.get
:
gcloud
Ejecuta el comando gcloud ai custom-jobs describe
:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Reemplaza lo siguiente:
JOB_ID: el ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID cuando creaste el trabajo. (Si no conoces 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 creaste el trabajo.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
LOCATION: La región en la que creaste el trabajo.
PROJECT_ID: El ID del proyecto.
JOB_ID: el ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID cuando creaste 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, expande una de estas opciones:
En el resultado, busca lo siguiente:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Si no ves el campo webAccessUris
, es posible que Vertex AI aún no comience a ejecutar tu trabajo. Verifica que veas JOB_STATE_RUNNING
en el campo state
. Si el estado es JOB_STATE_QUEUED
o JOB_STATE_PENDING
, espera un minuto. Luego, intenta obtener la información del proyecto nuevamente.
HyperparameterTuningJob
En las siguientes pestañas, se muestran diferentes formas de enviar una solicitud projects.locations.hyperparameterTuningJobs.get
:
gcloud
Ejecuta el comando gcloud ai hp-tuning-jobs describe
:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Reemplaza lo siguiente:
JOB_ID: el ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID cuando creaste el trabajo. (Si no conoces 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 creaste el trabajo.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
LOCATION: La región en la que creaste el trabajo.
PROJECT_ID: El ID del proyecto.
JOB_ID: el ID numérico de tu trabajo. Este ID es la última parte del campo
name
del trabajo. Es posible que hayas visto el ID cuando creaste 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, expande una de estas opciones:
En el resultado, busca lo siguiente:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Si no ves el campo webAccessUris
, es posible que Vertex AI aún no comience a ejecutar tu trabajo. Verifica que veas JOB_STATE_RUNNING
en el campo state
. Si el estado es JOB_STATE_QUEUED
o JOB_STATE_PENDING
, espera un minuto. Luego, intenta obtener la información del proyecto nuevamente.
Vertex AI proporciona un conjunto de URI de shell interactivos para cada prueba de ajuste de hiperparámetros a medida que la prueba ingresa al estado ACTIVE
. Si deseas obtener URI de shell interactivos para pruebas posteriores, vuelve a obtener la información del trabajo después de que se inicien esas pruebas.
En el ejemplo anterior, se muestra el resultado esperado para el 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 principales con una réplica y un grupo de trabajadores secundario con dos réplicas, el campo webAccessUris
será similar al siguiente:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Usa una shell interactiva
A fin de usar la shell interactiva para un nodo de entrenamiento, navega a uno de los URI que encontraste en la sección anterior. Aparece una shell de Bash en el navegador, lo que te brinda acceso al sistema de archivos del contenedor en el que Vertex AI ejecuta el código de entrenamiento.
En las siguientes secciones, se describen algunos aspectos que debes tener en cuenta cuando usas la shell y se proporcionan algunos ejemplos de herramientas de supervisión que puedes usar.
Evitar que finalice el trabajo
Cuando Vertex AI termine de ejecutar tu trabajo o prueba, perderás inmediatamente el acceso a tu shell interactiva. Si esto sucede, es posible que veas el mensaje command terminated with exit code 137
o que la shell deje de responder. Si creaste algún archivo en el sistema de archivos del contenedor, este no persistirá después de que finalice el trabajo.
En algunos casos, es posible que desees que tu trabajo se ejecute a propósito para poder depurar con una shell interactiva. Por ejemplo, puedes agregar código como el siguiente a tu código de entrenamiento para que el trabajo se siga ejecutando 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 aplican cargos de Vertex AI Training, siempre y cuando el trabajo se siga ejecutando.
Verifica los problemas de permisos
El entorno de shell interactivo se autentica mediante las credenciales predeterminadas de la aplicación (ADC) de la cuenta de servicio que Vertex AI usa para ejecutar tu código de entrenamiento. Puedes ejecutar gcloud auth list
en la shell para obtener más detalles.
En la shell, puedes usar bq
y otras herramientas compatibles con ADC. Esto puede ayudarte a verificar que el trabajo pueda acceder a un bucket de Cloud Storage en particular, a una tabla de BigQuery o a otro recurso de Google Cloud que tu código de entrenamiento necesita.
Visualiza la ejecución de Python con py-spy
py-spy
te permite generar un perfil de un programa de Python en ejecución sin modificarlo. Para usar py-spy
en una shell interactiva, haz lo siguiente:
Instala
py-spy
:pip3 install py-spy
Ejecuta
ps aux
en la shell y busca el PID del programa de entrenamiento de Python.Ejecuta cualquiera de los subcomandos que se describen en la documentación de
py-spy
con el PID que encontraste en el paso anterior.Si usas
py-spy record
para crear un archivo SVG, copia este archivo en un bucket de Cloud Storage para que puedas verlo más adelante en tu computadora local. Por ejemplo:gcloud storage cp profile.svg gs://BUCKET
Reemplaza BUCKET por el nombre de un bucket al que tienes acceso.
Analiza el rendimiento con perf
perf
te permite analizar el rendimiento de tu nodo de entrenamiento.
Si quieres 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 de esto, puedes ejecutar cualquiera de los subcomandos que se describen en la documentación de perf
.
Recupera información sobre el uso de GPU
Los contenedores habilitados para GPU que se ejecutan en nodos con GPU suelen tener varias herramientas de línea de comandos preinstaladas que pueden ayudarte a supervisar el uso de la GPU. Por ejemplo:
Usa
nvidia-smi
para supervisar el uso de GPU de varios procesos.Usa
nvprof
para recopilar una variedad de información de generación de perfiles de GPU. Dado quenvprof
no puede adjuntarse a un proceso existente, tal vez quieras usar la herramienta para iniciar un proceso adicional que ejecuta tu código de entrenamiento. (esto significa que tu código de entrenamiento se ejecutará dos veces en el nodo). Por ejemplo:nvprof -o prof.nvvp python3 -m MODULE_NAME
Reemplaza MODULE_NAME por el nombre completamente calificado del módulo de punto de entrada de la aplicación de entrenamiento; por ejemplo,
trainer.task
.Luego, transfiere el archivo de salida a un bucket de Cloud Storage para que puedas analizarlo más tarde en tu computadora local. Por ejemplo:
gcloud storage cp prof.nvvp gs://BUCKET
Reemplaza BUCKET por el nombre de un bucket al que tienes acceso.
Si encuentras 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.Luego, transfiere el informe a un bucket de Cloud Storage para que puedas analizarlo más tarde en tu computadora local o enviarlo a NVIDIA. Por ejemplo:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
Reemplaza BUCKET por el nombre de un bucket al que tienes acceso.
Si bash
no puede encontrar ninguno de estos comandos de NVIDIA, intenta agregar /usr/local/nvidia/bin
y /usr/local/cuda/bin
al PATH
de la shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Panel de Ray y shell interactivo con VPC-SC + intercambio de tráfico entre VPC
-
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 con intercambio de tráfico.
-
LOCATION: La 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: ID del proyecto Puedes encontrar estos ID en la página de bienvenida de la consola de Google Cloud.
-
-
Registro de la transacción de 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 la shell interactiva + VPC-SC + intercambio de tráfico entre VPC habilitado.
¿Qué sigue?
- Aprende a optimizar el rendimiento de tus trabajos de entrenamiento personalizados con Profiler.
- Obtén más información sobre cómo Vertex AI organiza el entrenamiento personalizado.
- Lee sobre los requisitos del código de entrenamiento.