

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.

# Ejecución de trabajos mediante `kubectl`
<a name="sagemaker-hyperpod-eks-run-jobs-kubectl"></a>

**nota**  
La reanudación automática del trabajo de entrenamiento requiere la versión de lanzamiento de Kubeflow Training Operator `1.7.0`, `1.8.0` o `1.8.1`.

Tenga en cuenta que debe instalar Kubeflow Training Operator en los clústeres mediante un gráfico de Helm. Para obtener más información, consulte [Instalación de paquetes en el clúster de Amazon EKS mediante Helm](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md). Compruebe si el plano de control de Kubeflow Training Operator esté configurado correctamente. Para ello, ejecute el siguiente comando.

```
kubectl get pods -n kubeflow
```

Este proceso devuelve un resultado similar al siguiente.

```
NAME                                             READY   STATUS    RESTARTS   AGE
training-operator-658c68d697-46zmn               1/1     Running   0          90s
```

**Envío de un trabajo de entrenamiento**

Para ejecutar trabajos de entrenamiento, prepare el archivo de configuración de trabajos y ejecute el comando [https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) de la siguiente manera.

```
kubectl apply -f /path/to/training_job.yaml
```

**Descripción de un trabajo de entrenamiento**

Para recuperar los detalles del trabajo enviado al clúster de EKS, utilice el siguiente comando. Devuelve información sobre el trabajo, como, por ejemplo, la hora de envío del trabajo, la hora de finalización, el estado del trabajo y los detalles de configuración.

```
kubectl get -o yaml training-job -n kubeflow
```

**Detención de trabajo de entrenamiento y eliminación de los recursos de EKS**

Para detener un trabajo de entrenamiento, utilice kubectl delete. A continuación se ofrece un ejemplo de cómo detener el trabajo de entrenamiento creado a partir del archivo de configuración `pytorch_job_simple.yaml`.

```
kubectl delete -f /path/to/training_job.yaml 
```

Esto debería devolver la siguiente salida.

```
pytorchjob.kubeflow.org "training-job" deleted
```

**Habilitación de la reanudación automática de trabajos**

SageMaker HyperPod admite la funcionalidad de reanudación automática de tareas para las tareas de Kubernetes y se integra con el plano de control de Kubeflow Training Operator.

Asegúrese de que haya suficientes nodos en el clúster que hayan pasado la comprobación de estado. SageMaker HyperPod Los nodos deberían tener la propiedad taint `sagemaker.amazonaws.com/node-health-status` establecida en `Schedulable`. Se recomienda incluir un selector de nodos en el archivo YAML del trabajo para seleccionar los nodos con la configuración adecuada, de la siguiente manera.

```
sagemaker.amazonaws.com/node-health-status: Schedulable
```

El siguiente fragmento de código es un ejemplo de cómo modificar la configuración YAML de un trabajo de Kubeflow para habilitar la funcionalidad de reanudación automática del PyTorch trabajo. Debe añadir dos anotaciones y establecer `restartPolicy` en `OnFailure` de la siguiente manera.

```
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob 
metadata:
    name: pytorch-simple
    namespace: kubeflow
    annotations: { // config for job auto resume
      sagemaker.amazonaws.com/enable-job-auto-resume: "true"
      sagemaker.amazonaws.com/job-max-retry-count: "2"
    }
spec:
  pytorchReplicaSpecs:
  ......
  Worker:
      replicas: 10
      restartPolicy: OnFailure
      template:
          spec:
              nodeSelector:
                  sagemaker.amazonaws.com/node-health-status: Schedulable
```

**Comprobación del estado de reanudación automática de trabajos**

Ejecute el siguiente comando para comprobar el estado de la reanudación automática de trabajos.

```
kubectl describe pytorchjob -n kubeflow <job-name>
```

Según los patrones de error, es posible que aparezcan dos patrones de reinicio de los trabajos de entrenamiento de Kubeflow de la siguiente manera.

**Patrón 1**:

```
Start Time:    2024-07-11T05:53:10Z
Events:
  Type     Reason                   Age                    From                   Message
  ----     ------                   ----                   ----                   -------
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-0
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-1
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m59s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Master replica(s) failed.
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-0
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-1
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m58s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Worker replica(s) failed.
```

**Patrón 2**: 

```
Events:
  Type    Reason                   Age    From                   Message
  ----    ------                   ----   ----                   -------
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-master-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-master-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-master-0
```