En esta página se explica el estado de un clúster de entrenamiento a lo largo del ciclo de vida de una tarea de entrenamiento y cómo gestiona Vertex AI los errores de entrenamiento. Puede usar esta información para adaptar su código de entrenamiento en consecuencia.
Ciclo de vida de una tarea de entrenamiento
En esta sección se explica cómo gestiona Vertex AI las VMs de los trabajadores durante el ciclo de vida de una tarea de entrenamiento.
Poner en cola un nuevo trabajo
Cuando creas un CustomJob
o un HyperparameterTuningJob
, es posible que la tarea permanezca en el estado JOB_STATE_QUEUED
durante un tiempo antes de que Vertex AI la ejecute. Este periodo suele ser breve, pero si tu proyectoGoogle Cloud no tiene suficientes cuotas de entrenamiento personalizado para tu tarea, Vertex AI mantendrá la tarea en cola hasta que tengas suficientes cuotas.
Iniciar trabajadores en paralelo
Cuando se inicia un trabajo de entrenamiento, Vertex AI programa el mayor número posible de trabajadores en poco tiempo. Por lo tanto, los trabajadores pueden iniciarse en paralelo en lugar de secuencialmente. Para reducir la latencia de inicio, Vertex AI empieza a ejecutar el código en cada trabajador en cuanto está disponible. Cuando todos los trabajadores están disponibles, Vertex AI asigna el estado JOB_STATE_RUNNING
a la tarea.
En la mayoría de los casos, tu framework de aprendizaje automático gestiona automáticamente el inicio de los trabajadores en paralelo. Si usas una estrategia de distribución en tu código de entrenamiento, puede que tengas que ajustarla manualmente para gestionar los trabajadores que se inician en paralelo. Consulta más información sobre las estrategias de distribución en TensorFlow y en PyTorch.
Reiniciar los trabajadores durante la tarea de entrenamiento
Durante un trabajo de entrenamiento, Vertex AI puede reiniciar tus trabajadores desde cualquier grupo de trabajadores con el mismo nombre de host. Esto puede ocurrir por los siguientes motivos:
- Mantenimiento de la VM: cuando la VM que ejecuta un trabajador se somete a mantenimiento, Vertex AI reinicia el trabajador en otra VM. Más información sobre la migración en directo para el mantenimiento de máquinas virtuales
Salidas distintas de cero: si algún trabajador sale con un código de salida distinto de cero, Vertex AI reinicia ese trabajador inmediatamente en la misma VM.
- Si un trabajador falla debido a un error común, se trata como un error permanente y Vertex AI cierra toda la tarea. Si algún contenedor se reinicia antes de que Vertex AI cierre todo el trabajo, es posible que estos contenedores generen registros en Cloud Logging.
- Si un trabajador falla debido a un error no permanente (cualquier error que no aparezca en los errores comunes), Vertex AI permite que el trabajador reiniciado siga ejecutándose, con un máximo de cinco reinicios por trabajador. Después de cinco reinicios, si un trabajador vuelve a fallar, Vertex AI vuelve a intentar ejecutar toda la tarea hasta tres veces antes de dar por fallida toda la tarea.
Para gestionar los reinicios de los trabajadores en tu código de entrenamiento, guarda puntos de control con regularidad durante el entrenamiento para que puedas restaurar los puntos de control cuando se reinicie un trabajador. Si crees que el entrenamiento durará más de cuatro horas, te recomendamos que guardes un punto de control al menos una vez cada cuatro horas. Consulta cómo usar los puntos de control de entrenamiento en TensorFlow y en PyTorch.
Completar un trabajo correctamente
Un trabajo de entrenamiento se completa correctamente cuando su réplica principal sale con el código de salida 0. En ese momento, Vertex AI cierra todos los demás trabajadores en ejecución.
Cómo gestiona Vertex AI los errores de las tareas de entrenamiento
En esta sección se explica cómo gestiona Vertex AI los errores comunes de los trabajos de entrenamiento y los errores internos.
Aproximadamente un minuto después de que finalice un trabajo, Vertex AI define el código de error en el objeto de trabajo de entrenamiento en función del código de salida.
Gestionar errores habituales
Vertex AI cierra todos los trabajadores si detecta alguno de los siguientes problemas:
Tipo de error | Mensaje o registro de errores | Nota |
Excepción de código de usuario | La réplica REPLICA_NAME se ha cerrado con un estado distinto de cero de EXIT_CODE. Motivo de la cancelación: REASON. | Si la tarea ha detectado códigos de salida que podrían ser transitorios, Vertex AI intenta reiniciar la tarea hasta tres veces.
Los códigos de error potencialmente transitorios que solicitan a Vertex AI que vuelva a intentar la tarea son los siguientes:
|
Sin memoria | La réplica REPLICA_NAME se ha quedado sin memoria y se ha cerrado con un estado distinto de cero EXIT_CODE. |
GKE reserva memoria en los nodos de Vertex AI. En los tipos de máquina más pequeños (como n1-standard-4 ), los agentes del sistema de Vertex AI pueden ocupar hasta el 40% de la memoria total.
En las máquinas virtuales más grandes, la sobrecarga es relativamente pequeña. Compara la
memoria asignable de los tipos de máquinas n1-standard .
|
Capacidad insuficiente en tu región (falta de stock de Compute Engine) | Los recursos son insuficientes en la región REGION_NAME. Prueba con otra región o usa otro acelerador. | Se produce una falta de stock cuando Compute Engine alcanza la capacidad máxima de la CPU o GPU que has seleccionado en tu región. No está relacionada con la cuota de tu proyecto.
Cuando esto ocurre, Vertex AI intenta reiniciar la tarea hasta tres veces.
En el caso de las tareas que se ejecutan en máquinas virtuales A2 y A3, Dynamic Workload Scheduler te permite programar tareas que se ejecutan cuando los recursos de GPU solicitados están disponibles, en lugar de fallar con un error de falta de existencias. Para obtener más información, consulta Programar trabajos de entrenamiento en función de la disponibilidad de recursos. |
Gestionar errores internos
Si Vertex AI tiene un error interno, intenta reiniciar un trabajo dos veces (tres intentos en total). Si los intentos de reinicio también fallan, Vertex AI devuelve un error interno con el mensaje:
Internal error occurred for the current attempt
.