Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Uso del operador de entrenamiento para ejecutar trabajos
Para usar kubectl para ejecutar el trabajo, debes crear un job.yaml para especificar las especificaciones del trabajo y ejecutar para enviarlo. kubectl apply -f job.yaml
En este archivo YAML, puedes especificar configuraciones personalizadas en el logMonitoringConfiguration
argumento para definir reglas de supervisión automatizadas que analicen los resultados del registro del trabajo de entrenamiento distribuido para detectar problemas y recuperarlos.
apiVersion: sagemaker.amazonaws.com/v1 kind: HyperPodPyTorchJob metadata: labels: app.kubernetes.io/name: HyperPod app.kubernetes.io/managed-by: kustomize name: &jobname xxx annotations: XXX: XXX ...... spec: nprocPerNode: "X" replicaSpecs: - name: 'XXX' replicas: 16 template: spec: nodeSelector: beta.kubernetes.io/instance-type: ml.p5.48xlarge containers: - name: XXX image: XXX imagePullPolicy: Always ports: - containerPort: 8080 # This is the port that HyperPodElasticAgent listens to resources: limits: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi requests: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi memory: 32000Mi ...... runPolicy: jobMaxRetryCount: 50 restartPolicy: numRestartBeforeFullJobRestart: 3 evalPeriodSeconds: 21600 maxFullJobRestarts: 1 cleanPodPolicy: "All" logMonitoringConfiguration: - name: "JobStart" logPattern: ".*Experiment configuration.*" # This is the start of the training script expectedStartCutOffInSeconds: 120 # Expected match in the first 2 minutes - name: "JobHangingDetection" logPattern: ".*\\[Epoch 0 Batch \\d+.*'training_loss_step': (\\d+(\\.\\d+)?).*" expectedRecurringFrequencyInSeconds: 300 # If next batch is not printed within 5 minute, consider it hangs. Or if loss is not decimal (e.g. nan) for 2 minutes, mark it hang as well. expectedStartCutOffInSeconds: 600 # Allow 10 minutes of job startup time - name: "NoS3CheckpointingDetection" logPattern: ".*The checkpoint is finalized. All shards is written.*" expectedRecurringFrequencyInSeconds: 600 # If next checkpoint s3 upload doesn't happen within 10 mins, mark it hang. expectedStartCutOffInSeconds: 1800 # Allow 30 minutes for first checkpoint upload - name: "LowThroughputDetection" logPattern: ".*\\[Epoch 0 Batch \\d+.*'samples\\/sec': (\\d+(\\.\\d+)?).*" metricThreshold: 80 # 80 samples/sec operator: "lteq" metricEvaluationDataPoints: 25 # if throughput lower than threshold for 25 datapoints, kill the job
Si quieres usar las opciones de monitoreo de registros, asegúrate de enviar el registro de entrenamiento a. sys.stdout
HyperPod El agente elástico supervisa los registros de entrenamiento en sys.stdout, que se guardan en. /tmp/hyperpod/
Puede usar el siguiente comando para emitir registros de entrenamiento.
logging.basicConfig(format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", level=logging.INFO, stream=sys.stdout)
En la siguiente tabla se describen todas las configuraciones posibles de supervisión de registros:
Parámetro | Uso |
---|---|
jobMaxRetryRecuento | Número máximo de reinicios a nivel de proceso. |
Política de reinicio: numRestartBefore FullJobRestart | Número máximo de reinicios a nivel de proceso antes de que el operador reinicie a nivel de trabajo. |
Política de reinicio: evalPeriodSeconds | El período de evaluación del límite de reinicio en segundos |
Política de reinicio: se reinicia maxFullJob | El número máximo de tareas completas se reiniciarán antes de que se produzca un error en la tarea. |
cleanPodPolicy | Especifica las cápsulas que el operador debe limpiar. Los valores aceptados son All OnlyComplete , yNone . |
logMonitoringConfiguration | Las reglas de monitoreo de registros para la detección de trabajos lentos y pendientes |
expectedRecurringFrequencyInSeconds | Intervalo de tiempo entre dos LogPattern partidos consecutivos tras el cual la regla se evalúa como pendiente. Si no se especifica, no existe ninguna restricción de tiempo entre partidos consecutivos LogPattern . |
expectedStartCutOffInSeconds | Tiempo hasta la primera LogPattern coincidencia, después de lo cual la regla se evalúa como pendiente. Si no se especifica, no existe ninguna restricción de tiempo para la primera LogPattern coincidencia. |
LogPattern | Expresión regular que identifica las líneas de registro a las que se aplica la regla cuando la regla está activa |
metricEvaluationDataPuntos | Número de veces consecutivas que una regla debe evaluarse como LENTO antes de marcar un trabajo como LENTO. Si no se especifica, el valor predeterminado es 1. |
Umbral métrico | Umbral para el valor extraído LogPattern con un grupo de captura. Si no se especifica, no se realiza una evaluación métrica. |
operador | La desigualdad que se debe aplicar a la configuración de supervisión. Los valores aceptados son gt gteq lt ,lteq , yeq . |
StopPattern | Expresión regular para identificar la línea de registro en la que se va a desactivar la regla. Si no se especifica, la regla siempre estará activa. |
Para una mayor flexibilidad de entrenamiento, especifique los detalles de configuración del nodo de repuesto. Si tu trabajo no funciona, el operador trabaja con Kueue para usar los nodos reservados con antelación para seguir ejecutando el trabajo. Las configuraciones de nodos de repuesto requieren Kueue, por lo que si intentas enviar un trabajo con nodos de repuesto pero no tienes Kueue instalado, el trabajo fallará. El siguiente ejemplo es un job.yaml
archivo de muestra que contiene configuraciones de nodos de repuesto.
apiVersion: sagemaker.amazonaws.com/v1 kind: HyperPodPyTorchJob metadata: labels: kueue.x-k8s.io/queue-name: user-queue # Specify the queue to run the job. name: hyperpodpytorchjob-sample spec: nprocPerNode: "1" runPolicy: cleanPodPolicy: "None" replicaSpecs: - name: pods replicas: 1 spares: 1 # Specify how many spare nodes to reserve. template: spec: containers: - name: XXX image: XXX imagePullPolicy: Always ports: - containerPort: 8080 resources: requests: nvidia.com/gpu: "0" limits: nvidia.com/gpu: "0"
Monitorización
Amazon SageMaker HyperPod integra la observabilidad con Amazon Managed Grafana y Amazon Managed Service for Prometheus, por lo que puedes configurar la monitorización para recopilar e introducir métricas en estas herramientas de observabilidad.
Como alternativa, puedes recopilar las métricas a través de Amazon Managed Service for Prometheus sin observabilidad gestionada. Para ello, incluye en tu job.yaml
archivo las métricas que quieres monitorizar cuando ejecutes trabajos. kubectl
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: hyperpod-training-operator namespace: aws-hyperpod spec: ...... endpoints: - port: 8081 path: /metrics interval: 15s
Los siguientes son eventos que emite el operador de formación y que puedes incluir en Amazon Managed Service for Prometheus para supervisar tus trabajos de formación.
Evento | Descripción |
---|---|
hyperpod_training_operator_jobs_created_total | Número total de trabajos que ha realizado el operador de formación |
hyperpod_training_operator_jobs_restart_latency | Latencia de reinicio del trabajo actual |
hyperpod_training_operator_jobs_fault_detection_latency | Latencia de detección de fallos |
hyperpod_training_operator_jobs_deleted_total | Número total de trabajos eliminados |
hyperpod_training_operator_jobs_successful_total | Número total de trabajos finalizados |
hyperpod_training_operator_jobs_failed_total | Número total de trabajos fallidos |
hyperpod_training_operator_jobs_restarted_total | Número total de trabajos reiniciados automáticamente |
Ejemplo de configuración de docker
El siguiente es un ejemplo de un archivo docker que puede ejecutar con el hyperpod run
comando.
export AGENT_CMD="--backend=nccl" exec hyperpodrun --server-host=${AGENT_HOST} --server-port=${AGENT_PORT} \ --tee=3 --log_dir=/tmp/hyperpod \ --nnodes=${NNODES} --nproc-per-node=${NPROC_PER_NODE} \ --pre-train-script=/workspace/echo.sh --pre-train-args='Pre-training script' \ --post-train-script=/workspace/echo.sh --post-train-args='Post-training script' \ /workspace/mnist.py --epochs=1000 ${AGENT_CMD}
Ejemplos de configuraciones de monitoreo de registros
Detección de problemas en el trabajo
Para detectar los trabajos bloqueados, utilice las siguientes configuraciones. Utiliza los siguientes parámetros:
-
expectedStartCutOffInSeconds — cuánto tiempo debe esperar el monitor antes de esperar los primeros registros
-
expectedRecurringFrequencyInSeconds — el intervalo de tiempo necesario para esperar al siguiente lote de registros
Con esta configuración, el monitor de registros espera ver una línea de registro que coincida con el patrón de expresiones regulares .*Train Epoch.*
dentro de los 60 segundos posteriores al inicio del trabajo de formación. Tras la primera aparición, el monitor espera ver líneas de registro coincidentes cada 10 segundos. Si los primeros registros no aparecen en 60 segundos o los registros siguientes no aparecen cada 10 segundos, el agente HyperPod elástico considera que el contenedor está atascado y coordina con el operador que está entrenando para reiniciar el trabajo.
runPolicy: jobMaxRetryCount: 10 cleanPodPolicy: "None" logMonitoringConfiguration: - name: "JobStartGracePeriod" # Sample log line: [default0]:2025-06-17 05:51:29,300 [INFO] __main__: Train Epoch: 5 [0/60000 (0%)] loss=0.8470 logPattern: ".*Train Epoch.*" expectedStartCutOffInSeconds: 60 - name: "JobHangingDetection" logPattern: ".*Train Epoch.*" expectedRecurringFrequencyInSeconds: 10 # if the next batch is not printed within 10 seconds
Aumento de la pérdida de formación
La siguiente configuración de supervisión emite registros de entrenamiento con el patrón. xxx training_loss_step xx
Utiliza el parámetrometricEvaluationDataPoints
, que permite especificar un umbral de puntos de datos antes de que el operador reinicie el trabajo. Si el valor de la pérdida de entrenamiento es superior a 2,0, el operador reinicia el trabajo.
runPolicy: jobMaxRetryCount: 10 cleanPodPolicy: "None" logMonitoringConfiguration: - name: "LossSpikeDetection" logPattern: ".*training_loss_step (\\d+(?:\\.\\d+)?).*" # training_loss_step 5.0 metricThreshold: 2.0 operator: "gt" metricEvaluationDataPoints: 5 # if loss higher than threshold for 5 data points, restart the job
Detección baja TFLOPs
La siguiente configuración de supervisión emite registros de entrenamiento con el patrón xx TFLOPs xx
cada cinco segundos. Si TFLOPs es inferior a 100 para 5 puntos de datos, el operador reinicia el trabajo de entrenamiento.
runPolicy: jobMaxRetryCount: 10 cleanPodPolicy: "None" logMonitoringConfiguration: - name: "TFLOPs" logPattern: ".* (.+)TFLOPs.*" # Training model, speed: X TFLOPs... expectedRecurringFrequencyInSeconds: 5 metricThreshold: 100 # if Tflops is less than 100 for 5 data points, restart the job operator: "lt" metricEvaluationDataPoints: 5