

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esecuzione dei processi con `kubectl`
<a name="sagemaker-hyperpod-eks-run-jobs-kubectl"></a>

**Nota**  
La ripresa automatica del job di addestramento richiede Kubeflow Training Operator versione `1.7.0`, `1.8.0` o `1.8.1`.

Tieni presente che Kubeflow Training Operator dovrebbe essere installato nei cluster con un grafico Helm. Per ulteriori informazioni, consulta [Installazione di pacchetti sul cluster Amazon EKS con Helm](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md). Verifica che il piano di controllo (control-plane) di Kubeflow Training Operator sia configurato correttamente eseguendo questo comando.

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

Questo restituisce un output simile al seguente.

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

**Per inviare un job di addestramento**

Per eseguire un job di addestramento, prepara il file di configurazione del processo ed esegui il comando [https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) come segue.

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

**Per descrivere un job di addestramento**

Per recuperare i dettagli del processo inviato al cluster EKS, utilizza il comando seguente. Restituisce informazioni sul processo come l’ora di invio, l’ora di completamento, lo stato e i dettagli di configurazione.

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

**Per arrestare un job di addestramento ed eliminare le risorse EKS**

Per arrestare un job di addestramento, utilizza kubectl delete. Di seguito è riportato un esempio di come arrestare il job di addestramento creato dal file di configurazione `pytorch_job_simple.yaml`.

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

Dovrebbe essere restituito l’output seguente.

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

**Per abilitare la ripresa automatica del processo**

SageMaker HyperPod supporta la funzionalità di ripristino automatico dei lavori per i lavori Kubernetes, integrandosi con il piano di controllo Kubeflow Training Operator.

Assicurati che ci siano nodi sufficienti nel cluster che abbiano superato il controllo di integrità. SageMaker HyperPod Il taint `sagemaker.amazonaws.com/node-health-status` dei nodi deve essere impostato su `Schedulable`. Consigliamo di includere un selettore di nodi nel file YAML del processo per selezionare i nodi con la configurazione appropriata come descritto di seguito.

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

Il seguente frammento di codice è un esempio di come modificare una configurazione YAML di un PyTorch lavoro Kubeflow per abilitare la funzionalità di ripristino automatico del lavoro. È necessario aggiungere due annotazioni e impostare `restartPolicy` su `OnFailure` come segue.

```
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
```

**Per controllare lo stato di ripresa automatica del processo**

Per controllare lo stato di ripresa automatica del processo, utilizza il comando seguente.

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

A seconda dei modelli di errore, potrebbero essere riavviati due modelli del job di addestramento Kubeflow, come riportato di seguito.

**Modello 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.
```

**Modello 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
```