Durante el entrenamiento, puedes 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 versión del entorno de ejecución o contenedor personalizado que se ejecuta en AI Platform Training.
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 AI Platform Training. 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
Antes de comenzar
Puedes usar una shell interactiva cuando ejecutes un trabajo de entrenamiento o ajuste de hiperparámetros. A medida que preparas tu código de entrenamiento y ejecutas un trabajo de entrenamiento, asegúrate de cumplir con los siguientes requisitos:
Asegúrate de que tu contenedor de entrenamiento tenga
bash
instalado.Todos los contenedores de la versión del entorno de ejecución 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 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:
ml.jobs.create
ml.jobs.get
ml.jobs.cancel
Si inicias un entrenamiento, 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 trabajo de entrenamiento que creó otra persona de tu organización, es posible que debas obtener estos permisos.
Una forma de obtener estos permisos es pedirle a un administrador de la organización que te otorgue la función de administrador de AI Platform Training (
roles/ml.admin
). Si se te otorga la función de desarrollador de AI Platform Training (roles/ml.developer
), tendrás acceso a la shell interactiva para los trabajos que crees.
Requisitos para casos avanzados
Si usas ciertas funciones avanzadas, cumple con los siguientes requisitos adicionales:
Si adjuntas una cuenta de servicio personalizada a tu trabajo de entrenamiento, 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 trabajo con una cuenta de servicio adjunta, debes tener el permiso
iam.serviceAccounts.actAs
para la cuenta de servicio. Si uno de tus colegas quiere ver una shell interactiva para este trabajo, también debe tener el mismo permisoiam.serviceAccounts.actAs
.Si configuraste tu proyecto para usar los Controles del servicio de VPC con AI Platform Training, ten en cuenta las siguientes limitaciones adicionales:
No puedes usar los Controles del servicio de VPC con el intercambio de tráfico entre redes de VPC.
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 deml.googleapis.com
. Si solo restringesml.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 trabajo de entrenamiento, establece el campo de la API enableWebAccess
en true
en el campo trainingInput
del trabajo cuando crees un trabajo de entrenamiento.
En el siguiente ejemplo, se muestra cómo hacerlo mediante la adición de la marca --enable-web-access
cuando se usa la CLI de gcloud. En la actualidad, no puedes crear un trabajo de entrenamiento con una shell interactiva habilitada en la consola de Google Cloud.
En el ejemplo, se supone que tienes una aplicación de entrenamiento en el sistema de archivos local dentro de un directorio llamado trainer
con un módulo llamado task
.
Para crear el trabajo de entrenamiento, ejecuta el siguiente comando:
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
En este comando, reemplaza los siguientes marcadores de posición:
- JOB_ID: Es el nombre que elijas para el trabajo.
- JOB_DIR: Es la ruta de acceso a un directorio de Cloud Storage al que se subirá tu aplicación de entrenamiento.
REGION: Es la región en la que planeas crear el trabajo de entrenamiento. Ten en cuenta que debe ser una región que admita shells interactivas.
El comando produce el siguiente resultado si se ejecuta de forma correcta:
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
Obtén el URI de acceso web
Después de iniciar el entrenamiento de acuerdo con la guía de la sección anterior, usa la consola de Google Cloud o la herramienta de línea de comandos de gcloud
para ver los URI que puedes usar a fin de acceder a shells interactivas.
AI Platform Training proporciona un URI para cada nodo de entrenamiento que forma parte de tu trabajo.
Según el tipo de trabajo de entrenamiento que hayas creado, selecciona una de las siguientes pestañas para ver ejemplos de cómo encontrar el campo de la API de webAccessUris
, que contiene un URI interactivo de la shell para cada nodo del trabajo.
Trabajo de entrenamiento
En las siguientes pestañas, se muestran diferentes formas de acceder a TrainingOutput
para un trabajo de entrenamiento estándar.
gcloud
Ejecuta el comando gcloud ai-platform jobs describe
:
gcloud ai-platform jobs describe JOB_ID
Reemplaza lo siguiente:
-
JOB_ID: Es el ID de tu trabajo. Configuraste este ID cuando creaste el trabajo.
(Si no conoces el ID de tu trabajo, puedes ejecutar el comando
gcloud ai-platform jobs list
y buscar el trabajo adecuado).
En el resultado, busca el campo.
trainingOutput:
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Abre la página Trabajos de AI Platform Training en la consola de Google Cloud.
Haz clic en el nombre de tu trabajo en la lista para abrir la página Detalles del trabajo.
Haz clic en el botón Mostrar Json en la sección en la sección para expandir una vista JSON del
TrainingOutput
del trabajo.
En el resultado, busca el campo:
{
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
}
Si no ves el campo webAccessUris
, esto podría deberse a que AI Platform Training aún no comenzó a ejecutar el trabajo o la prueba.
Verifica que veas RUNNING
en el campo state
. Si el estado es QUEUED
o PREPARING
, espera un minuto. Luego, intenta volver a obtener la información del trabajo.
Trabajo de ajuste de hiperparámetros
En las siguientes pestañas, se muestran diferentes formas de acceder a TrainingOutput
para un trabajo de ajuste de hiperparámetros.
gcloud
Ejecuta el comando gcloud ai-platform jobs describe
:
gcloud ai-platform jobs describe JOB_ID
Reemplaza lo siguiente:
-
JOB_ID: Es el ID de tu trabajo. Configuraste este ID cuando creaste el trabajo.
(Si no conoces el ID de tu trabajo, puedes ejecutar el comando
gcloud ai-platform jobs list
y buscar el trabajo adecuado).
En el resultado, busca el campo.
trainingOutput:
trials:
- trialId: '1'
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Abre la página Trabajos de AI Platform Training en la consola de Google Cloud.
Haz clic en el nombre de tu trabajo en la lista para abrir la página Detalles del trabajo.
Haz clic en el botón Mostrar Json en la sección en la sección para expandir una vista JSON del
TrainingOutput
del trabajo.
En el resultado, busca el campo:
{
"trials": [
{
...
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
},
...
]
}
Si no ves el campo webAccessUris
, esto podría deberse a que AI Platform Training aún no comenzó a ejecutar el trabajo o la prueba.
Verifica que veas RUNNING
en el campo state
. Si el estado es QUEUED
o PREPARING
, espera un minuto. Luego, intenta volver a obtener la información del trabajo.
AI Platform Training proporciona un conjunto de URI de shell interactivos para cada prueba de ajuste de hiperparámetros a medida que la prueba entra en el estado RUNNING
. Si deseas obtener los 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, que se identifica por el nombre de la tarea.
Por ejemplo, si tu trabajo tiene una instancia principal y dos trabajadores, el campo webAccessUris
será similar al siguiente:
{
"master-replica-0": "URI_FOR_PRIMARY",
"worker-replica-0": "URI_FOR_FIRST_SECONDARY",
"worker-replica-1": "URI_FOR_SECOND_SECONDARY"
}
Regiones disponibles
El uso de una shell interactiva para AI Platform Training es compatible con las siguientes regiones:
América
- Oregón (us-west1)
- Los Ángeles (us-west2)
- Iowa (us-central1)
- Carolina del Sur (us-east1)
- Virginia del Norte (us-east4)
- Montreal (northamerica-northeast1)
Europa
- Londres (europe-west2)
- Bélgica (europe-west1)
- Zúrich (europe-west6)
- Fráncfort (europe-west3)
Asia-Pacífico
- Singapur (asia-southeast1)
- Taiwán (asia-east1)
- Tokio (asia-northeast1)
- Sídney (australia-southeast1)
- Seúl (asia-northeast3)
AI Platform Training también proporciona regiones adicionales para el entrenamiento.
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 Bash en el navegador, lo que te brinda acceso al sistema de archivos del contenedor en el que AI Platform Training 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.
Evita que el trabajo finalice
Cuando AI Platform Training termine de ejecutar el trabajo o la prueba, perderás de inmediato el acceso a la 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 aplicarán cargos de entrenamiento de AI Platform Training mientras el trabajo se siga ejecutando.
Verifica problemas de permisos
El entorno de shell interactivo se autentica mediante credenciales predeterminadas de la aplicación (ADC) para la cuenta de servicio que AI Platform Training usa a fin de ejecutar tu código de entrenamiento. Puedes ejecutar gcloud auth list
en la shell para obtener más detalles.
En la shell, puedes usar gcloud storage
, 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 mediante 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
.
Obtén 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 experimentas un error de GPU (no un problema con la configuración o con AI Platform Training), 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}"
¿Qué sigue?
- Obtén más información sobre el servicio AI Platform Training.
- Lee Empaqueta una aplicación de entrenamiento.