Prepararse para eventos de mantenimiento
Las VMs de TPU son instancias de VMs de Compute Engine con hardware de TPU conectado. Las máquinas virtuales de Compute Engine están sujetas a eventos de mantenimiento de máquinas virtuales de Compute Engine. Cada TPU está conectada a una VM de Compute Engine, por lo que, si usas más TPUs (por ejemplo, en un segmento de TPU), aumentará la probabilidad de que una de tus VMs sufra un evento de mantenimiento.
En este documento se describen las formas de gestionar los eventos de mantenimiento de los trabajos de entrenamiento de larga duración en las TPUs de Cloud. Para obtener información sobre cómo gestionar eventos de mantenimiento de TPUs en Google Kubernetes Engine (GKE), consulta Gestionar interrupciones de nodos de GKE para GPUs y TPUs.
Ver notificaciones de mantenimiento programado
Puedes ver las notificaciones de los próximos eventos de mantenimiento del host. Si monitorizas las próximas ventanas de mantenimiento de tu instancia, puedes preparar de forma proactiva tus cargas de trabajo para que se sometan al mantenimiento con las mínimas interrupciones posibles. Para obtener más información, consulta Ver notificaciones de mantenimiento.
Usar puntos de control para recuperarse rápidamente de eventos de mantenimiento
Los puntos de control son fundamentales para recuperarse rápidamente de los eventos de mantenimiento y deben guardarse con frecuencia. Por norma general, se recomienda guardar puntos de control aproximadamente cada hora. Si no se crean puntos de control con la frecuencia suficiente, se corre el riesgo de perder gran parte del progreso del entrenamiento debido a tareas de mantenimiento u otras interrupciones.
.Los puntos de control suelen hacer referencia a todos los parámetros guardados que se usan en el entrenamiento, como los pesos del modelo. El tiempo que se tarda en guardar un punto de control puede variar desde segundos hasta minutos.
Aunque las TPUs pueden recuperarse automáticamente de la mayoría de los eventos de mantenimiento y los trabajos de entrenamiento continúan sin intervención manual, puede haber casos extremos en los que el trabajo no se reinicie y continúe automáticamente. Cuando esto ocurra, tendrás que eliminar y volver a crear los recursos de TPU y reiniciar el trabajo de entrenamiento desde un punto de control guardado. Para obtener información sobre cómo detectar y recuperarse de los fallos de recuperación automática, consulta Detectar y recuperarse de los fallos de TPU.
Cada framework de aprendizaje automático tiene mecanismos diferentes para guardar y cargar puntos de control. Los modelos de TPU de Cloud compatibles suelen tener la función de creación de puntos de control integrada. Para obtener más información sobre la creación de puntos de control, consulta TensorFlow 2.x, PyTorch o JAX/flax.
Usar Autocheckpoint
Puedes usar la función de punto de control automático para conservar el progreso del entrenamiento configurando tu código para que guarde un punto de control no programado cuando se produzca un evento de mantenimiento. Para obtener más información sobre Autocheckpoint, consulta Autocheckpoint de TPU de Cloud.
Volver a intentar ejecutar el script de entrenamiento
Es posible que la secuencia de comandos de entrenamiento se detenga como resultado de un evento de interrupción.
Puedes usar una secuencia de comandos bash
para volver a intentar ejecutar la secuencia de comandos de entrenamiento continuamente
hasta que se complete el entrenamiento. Por ejemplo:
while ! gcloud compute tpus tpu-vm ssh ${TPU_NAME} --command "python3 TRAINING_COMMAND"; do sleep 1; done
Cada reintento debe continuar desde el último punto de control, por lo que siempre debes usar secuencias de comandos de reintento junto con puntos de control.
Las canalizaciones de entrenamiento listas para producción deben usar un sistema de gestión de recursos, como Google Kubernetes Engine (GKE). Para obtener más información sobre cómo usar Google Kubernetes Engine con VMs de TPU, consulta Desplegar cargas de trabajo de TPU.
Detectar y recuperarse de fallos de TPU
Si una TPU no se recupera de un evento de mantenimiento, puedes usar una secuencia de comandos de recuperación para detectar el estado de la TPU, eliminarla y volver a crearla. Para ver un ejemplo de secuencia de comandos de recuperación, consulta retry.sh. Si el proceso que ejecuta la secuencia de comandos de entrenamiento falla, puedes modificar la secuencia de comandos de recuperación para volver a ejecutar la secuencia de comandos de entrenamiento.
Para obtener información sobre cómo eliminar y volver a crear una TPU manualmente, consulta Gestionar recursos de TPU.
Usar la programación de colecciones
Las TPU de Cloud tienen el concepto de programación de colecciones, que ofrece dos tipos de colecciones que los clientes pueden usar para admitir cargas de trabajo de entrenamiento, servicio e inferencia. Cuando usas esta función para desplegar tus instancias de TPU de Cloud, Google Cloud aplica programaciones de mantenimiento únicas que se ajustan mejor a la aplicación. Puedes esperar los siguientes comportamientos de cada tipo de colección:
Entrenamiento (opción predeterminada): este tipo de colección es útil para cargas de trabajo de entrenamiento típicas en las que necesitas un tiempo de inactividad mínimo en todas las instancias y un número limitado de interrupciones inesperadas para restaurar rápidamente tu servicio durante los eventos de mantenimiento. El tipo de colección de entrenamiento proporciona la programación y la ejecución paralelas de eventos de mantenimiento para un grupo de instancias.
Servicio (disponible con
--workload-type=AVAILABILITY_OPTIMIZED
): este tipo de colección es útil para la mayoría de las cargas de trabajo de servicio o inferencia en las que necesitas un tiempo de inactividad mínimo en un subconjunto de instancias (réplicas) para asegurar la continuidad del servicio, incluso durante los eventos de mantenimiento. El tipo de colección serving proporciona una programación y una ejecución escalonadas de los eventos de mantenimiento de un grupo de instancias. Especificar una colección de servicio solo se admite en TPU v6e.
Para obtener más información sobre la programación de colecciones, consulta Programación de colecciones de TPU para cargas de trabajo de inferencia.
Detectar eventos de mantenimiento
Puedes detectar si se ha producido un evento de mantenimiento en tu TPU y cuándo se ha producido mediante el siguiente comando gcloud compute tpus tpu-vm
describe
:
$ gcloud compute tpus tpu-vm describe tpu-name --zone=zone | grep 'health'
La salida de este comando muestra el estado actual de la TPU y una descripción del evento de mantenimiento más reciente. La salida debería tener un aspecto similar al siguiente:
health: HEALTHY healthDescription: The TPU had a maintenance event at 2022-01-26T03:44:36.265703305Z
Ver registros de eventos de mantenimiento
Puedes ver los registros históricos de los eventos de mantenimiento de tu TPU en los registros de auditoría de eventos del sistema.
En el menú de navegación de la consola Google Cloud , ve a la página Explorador de registros:
Usa la siguiente consulta de búsqueda para ver las TPUs que se han cancelado o reiniciado:
"tpu.nodes.terminate" OR "tpu.nodes.restart"
Los resultados muestran los registros de las interrupciones y las reparaciones de tus trabajadores de TPU en el periodo de búsqueda. Los registros incluyen lo siguiente:
- La fecha y la hora del evento
- El tipo de evento
- En el caso de los eventos "terminate", el motivo de la cancelación en el campo
protoPayload.metadata.terminateReason