

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 tareas en SageMaker HyperPod clústeres orquestados por Amazon EKS
<a name="sagemaker-hyperpod-eks-run-jobs"></a>

En los siguientes temas, se proporcionan procedimientos y ejemplos de acceso a nodos de procesamiento y ejecución de cargas de trabajo de aprendizaje automático en SageMaker HyperPod clústeres aprovisionados orquestados con Amazon EKS. En función de cómo haya configurado el entorno de su HyperPod clúster, hay muchas maneras de ejecutar cargas de trabajo de aprendizaje automático en los clústeres. HyperPod 

**nota**  
Al ejecutar trabajos a través de la SageMaker HyperPod CLI o kubectl, HyperPod puede realizar un seguimiento del uso del procesamiento (horas de GPU/CPU) en todos los espacios de nombres (equipos). Estas métricas impulsan los informes de uso, que proporcionan:  
Visibilidad del consumo de recursos asignados frente a prestados
Uso de los recursos de los equipos para la auditoría (hasta 180 días)
Atribución de costos alineada con las políticas de gobernanza de tareas
Para utilizar los informes de uso, debe instalar la infraestructura de informes de uso. Recomendamos encarecidamente configurar la [Gobernanza de tareas](sagemaker-hyperpod-eks-operate-console-ui-governance.md) para forzar las cuotas de computación y permitir una atribución detallada de los costos.  
[Para obtener más información sobre cómo configurar y generar informes de uso, consulta Cómo informar sobre el uso informático en. HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-usage-reporting.html)

**sugerencia**  
Para obtener una experiencia práctica y orientación sobre cómo configurar y usar un SageMaker HyperPod clúster organizado con Amazon EKS, le recomendamos que asista a este taller de [Amazon EKS Support](https://catalog.us-east-1.prod.workshops.aws/workshops/2433d39e-ccfe-4c00-9d3d-9917b729258e). SageMaker HyperPod

Los usuarios científicos de datos pueden entrenar modelos fundamentales utilizando el conjunto de clústeres de EKS como orquestador del clúster. SageMaker HyperPod Los científicos utilizan la [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) y los `kubectl` comandos nativos para encontrar SageMaker HyperPod los clústeres disponibles, enviar trabajos de formación (pods) y gestionar sus cargas de trabajo. La SageMaker HyperPod CLI permite el envío de trabajos mediante un archivo de esquema de trabajo de formación y proporciona capacidades para la publicación, descripción, cancelación y ejecución de trabajos. Los científicos pueden usar [Kubeflow Training Operator](https://www.kubeflow.org/docs/components/training/overview/) de acuerdo con las cuotas de cómputo gestionadas por la [SageMaker IA y gestionadas por HyperPod la IA MLflow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html) para gestionar los experimentos de aprendizaje automático y las sesiones de formación. 

**Topics**
+ [Instalación de la SageMaker HyperPod CLI](sagemaker-hyperpod-eks-run-jobs-access-nodes.md)
+ [SageMaker HyperPod Comandos CLI](sagemaker-hyperpod-eks-hyperpod-cli-reference.md)
+ [Ejecución de trabajos mediante la SageMaker HyperPod CLI](sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.md)
+ [Ejecución de trabajos mediante `kubectl`](sagemaker-hyperpod-eks-run-jobs-kubectl.md)

# Instalación de la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-eks-run-jobs-access-nodes"></a>

SageMaker HyperPod proporciona el SageMaker HyperPod paquete de [interfaz de línea](https://github.com/aws/sagemaker-hyperpod-cli) de comandos (CLI). 

1. Compruebe si la versión de Python en el equipo sea una de las versiones comprendidas entre la versión 3.8 y la versión 3.11.

1. Compruebe los requisitos previos en el archivo `README` markdown del paquete [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli).

1. Clona el paquete SageMaker HyperPod CLI desde GitHub.

   ```
   git clone https://github.com/aws/sagemaker-hyperpod-cli.git
   ```

1. Instale la SageMaker HyperPod CLI.

   ```
   cd sagemaker-hyperpod-cli && pip install .
   ```

1. Compruebe si la SageMaker HyperPod CLI se ha instalado correctamente ejecutando el siguiente comando. 

   ```
   hyperpod --help
   ```

**nota**  
Si es un científico de datos y desea utilizar la SageMaker HyperPod CLI, asegúrese de que los administradores del clúster hayan configurado correctamente su función de IAM siguiendo las instrucciones que aparecen en [Usuarios de IAM para científicos](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-user) y. [Configuración del control de acceso basado en roles de Kubernetes](sagemaker-hyperpod-eks-setup-rbac.md)

# SageMaker HyperPod Comandos CLI
<a name="sagemaker-hyperpod-eks-hyperpod-cli-reference"></a>

En la siguiente tabla se resumen los comandos de la SageMaker HyperPod CLI.

**nota**  
Para obtener una referencia de CLI completa, consulte [README](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#sagemaker-hyperpod-command-line-interface) en el [ GitHubrepositorio de SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli).


| SageMaker HyperPod Comando CLI | Entidad  | Description (Descripción) | 
| --- | --- | --- | 
| hyperpod get-clusters | clúster/acceso | Muestra todos los clústeres en los que se ha habilitado al usuario con permisos de IAM para enviar cargas de trabajo de formación. Proporciona una instantánea actual de todas las instancias disponibles en las que no se ejecuta ninguna carga de trabajo o trabajo, junto con su capacidad máxima, agrupadas por estados de comprobación de estado (por ejemplo:) BurnInPassed | 
| hyperpod connect-cluster | clúster/acceso | Se configura para funcionar kubectl en el clúster y el espacio de nombres especificados HyperPod  | 
| hyperpod start-job  | job | Envía el trabajo al clúster de destino: el nombre del trabajo será único en cuanto al espacio de nombres. Los usuarios podrán anular las especificaciones de yaml pasándolas como argumentos de la CLI | 
| hyperpod get-job | job | Muestra los metadatos del trabajo enviado | 
| hyperpod list-jobs | job | Muestra todos los trabajos de la red cluster/namespace a los que se ha añadido al usuario con permisos de IAM para enviar cargas de trabajo de formación | 
| hyperpod cancel-job | job | Detiene y elimina el trabajo y cede los recursos de computación subyacentes Este trabajo no se puede reanudar de nuevo. Debe iniciarse un nuevo trabajo, si es necesario. | 
| hyperpod list-pods | pod | Muestra todos los pods del trabajo en cuestión en un espacio de nombres | 
| hyperpod get-log | pod | Recupera los registros de un determinado pod en un trabajo específico | 
| hyperpod exec | pod | Ejecuta el comando bash en el intérprete de comandos de los pods especificados y publica el resultado | 
| hyperpod --help | utilidad | muestra todos los comandos compatibles | 

# Ejecución de trabajos mediante la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli"></a>

Para ejecutar los trabajos, asegúrese de haber instalado Kubeflow Training Operator en los clústeres de EKS. 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).

Ejecute el `hyperpod get-cluster` comando para obtener la lista de HyperPod clústeres disponibles.

```
hyperpod get-clusters
```

Ejecute `hyperpod connect-cluster` para configurar la SageMaker HyperPod CLI con el clúster EKS que organiza el HyperPod clúster.

```
hyperpod connect-cluster --cluster-name <hyperpod-cluster-name>
```

Utilice el comando `hyperpod start-job` para ejecutar un trabajo. En el siguiente comando se muestra el comando con las opciones necesarias. 

```
hyperpod start-job \
    --job-name <job-name>
    --image <docker-image-uri>
    --entry-script <entrypoint-script>
    --instance-type <ml.instance.type>
    --node-count <integer>
```

El comando `hyperpod start-job` también incluye varias opciones, como, por ejemplo, la reanudación automática y la programación de trabajos.

## Habilitación de la reanudación automática de trabajos
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-enable-auto-resume"></a>

El comando `hyperpod start-job` también tiene las siguientes opciones para especificar la reanudación automática de un trabajo. Para permitir que la reanudación automática del trabajo funcione con las funciones de resiliencia de los SageMaker HyperPod nodos, debe establecer el valor de la `restart-policy` opción en. `OnFailure` El trabajo debe ejecutarse en el espacio de nombres `kubeflow` o en un espacio de nombres con el prefijo `hyperpod`.
+ [--auto-resume <bool>] \$1Opcional, habilite la reanudación automática del trabajo después de un error, el valor predeterminado está establecido en false.
+ [--max-retry <int>] \$1Opcional, si la reanudación automática está establecida en true, el valor predeterminado de max-retry es 1 si no se especifica.
+ <enum>[--restart-policy] \$1Optional, política de reinicio. PyTorchJob Los valores disponibles son `Always`, `OnFailure`, `Never` o `ExitCode`. El valor predeterminado es `OnFailure`. 

```
hyperpod start-job \
    ... // required options \
    --auto-resume true \
    --max-retry 3 \
    --restart-policy OnFailure
```

## Ejecución de trabajos con opciones de programación
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-scheduling"></a>

El comando `hyperpod start-job` tiene las siguientes opciones para configurar el trabajo con mecanismos de cola. 

**nota**  
Necesita que [Kueue](https://kueue.sigs.k8s.io/docs/overview/) esté instalado en el clúster de EKS. Si no está instalado, siga las instrucciones que se indican en [Configuración para la gobernanza de SageMaker HyperPod tareas](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md).
+ [--scheduler-type <enum>] \$1Opcional, especifique el tipo de programador. El valor predeterminado es `Kueue`.
+ [--queue-name <string>] \$1Opcional, especifique el nombre de [Cola local](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) o [Cola de clúster](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/) que desea enviar con el trabajo. Los administradores del clúster deben crear la cola con `CreateComputeQuota`.
+ [--priority <string>] \$1Opcional, especifique el nombre de [Clase de prioridad de carga de trabajo](https://kueue.sigs.k8s.io/docs/concepts/workload_priority_class/), que deben crear los administradores del clúster.

```
hyperpod start-job \
    ... // required options
    --scheduler-type Kueue \
    --queue-name high-priority-queue \
    --priority high
```

## Ejecución de trabajos a partir de un archivo de configuración
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-from-config"></a>

También puede crear un archivo de configuración de trabajos que incluya todos los parámetros necesarios para el trabajo y, a continuación, pasar este archivo de configuración al comando `hyperpod start-job` mediante la opción --config-file. En este caso:

1. Cree el archivo de configuración de trabajos con los parámetros necesarios. Consulte el archivo de configuración de tareas del GitHub repositorio de SageMaker HyperPod CLI para obtener un [archivo de configuración de referencia](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.html#sagemaker-hyperpod-eks-hyperpod-cli-from-config).

1. Inicie el trabajo con el archivo de configuración de la siguiente manera.

   ```
   hyperpod start-job --config-file /path/to/test_job.yaml
   ```

**sugerencia**  
Para obtener una lista completa de los parámetros del `hyperpod start-job` comando, consulte la sección [Enviar un trabajo](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#submitting-a-job) en el GitHub repositorio `README.md` de SageMaker HyperPod CLI.

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