Ejemplos de comandos de la AWS CLI de gobernanza de tareas de HyperPod - Amazon SageMaker AI

Ejemplos de comandos de la AWS CLI de gobernanza de tareas de HyperPod

Puede usar HyperPod con EKS a través de Kubectl o de la CLI personalizada de HyperPod. Puede utilizar estos comandos a través de Studio o AWS CLI. A continuación, se proporcionan ejemplos de gobernanza de tareas de SageMaker HyperPod sobre cómo ver los detalles del clúster mediante los comandos de la AWS CLI de HyperPod. Para obtener más información, incluida la forma de instalación, consulte el HyperPod CLI Github repository.

Obtención de información sobre la cuota de dispositivos aceleradores de clústeres

El siguiente comando de ejemplo obtiene la información sobre la cuota de dispositivos aceleradores de clústeres.

hyperpod get-clusters -n hyperpod-ns-test-team

El espacio de nombres de este ejemplo, hyperpod-ns-test-team, se crea en Kubernetes en función del nombre del equipo proporcionado al crear la asignación de recursos de computación test-team. Para obtener más información, consulte Edición de políticas.

Ejemplo de respuesta:

[ { "Cluster": "hyperpod-eks-test-cluster-id", "InstanceType": "ml.g5.xlarge", "TotalNodes": 2, "AcceleratorDevicesAvailable": 1, "NodeHealthStatus=Schedulable": 2, "DeepHealthCheckStatus=Passed": "N/A", "Namespaces": { "hyperpod-ns-test-team": { "TotalAcceleratorDevices": 1, "AvailableAcceleratorDevices": 1 } } } ]

Envío de un trabajo a una cola y un espacio de nombres administrados por SageMaker AI

En el siguiente comando de ejemplo se envía un trabajo a su clúster de HyperPod. Si solo tiene acceso a un equipo, la AWS CLI de HyperPod le asignará automáticamente la cola. De lo contrario, si se descubren varias colas, le mostraremos todas las opciones posibles para que las seleccione.

hyperpod start-job --job-name hyperpod-cli-test --job-kind kubeflow/PyTorchJob --image docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd --entry-script /opt/pytorch-mnist/mnist.py --pull-policy IfNotPresent --instance-type ml.g5.xlarge --node-count 1 --tasks-per-node 1 --results-dir ./result --priority training-priority

Las clases de prioridad se definen en la Política de clústeres, que indica cómo se priorizan las tareas y cómo se asignan los recursos computacionales inactivos. Cuando un científico de datos envía un trabajo, utiliza uno de los nombres de las clases de prioridad con el formato priority-class-name-priority. En este ejemplo, training-priority hace referencia a la clase de prioridad denominada “training”. Para obtener más información sobre los conceptos de las políticas, consulte Políticas.

Si no se especifica ninguna clase de prioridad, el trabajo se trata como un trabajo de prioridad baja con un valor de clasificación de tareas de 0.

Si se especifica una clase de prioridad, pero no se corresponde con ninguna de las clases de prioridad definidas en la Política de clústeres, el envío no se realizará correctamente y aparecerá un mensaje de error con el conjunto definido de clases de prioridad.

También puede enviar el trabajo con un archivo de configuración YAML con el siguiente comando:

hyperpod start-job --config-file ./yaml-configuration-file-name.yaml

El siguiente es un ejemplo de un archivo de configuración YAML que equivale a enviar un trabajo, tal y como se ha descrito anteriormente.

defaults: - override hydra/job_logging: stdout hydra: run: dir: . output_subdir: null training_cfg: entry_script: /opt/pytorch-mnist/mnist.py script_args: [] run: name: hyperpod-cli-test nodes: 1 ntasks_per_node: 1 cluster: cluster_type: k8s instance_type: ml.g5.xlarge custom_labels: kueue.x-k8s.io/priority-class: training-priority cluster_config: label_selector: required: sagemaker.amazonaws.com/node-health-status: - Schedulable preferred: sagemaker.amazonaws.com/deep-health-check-status: - Passed weights: - 100 pullPolicy: IfNotPresent base_results_dir: ./result container: docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd env_vars: NCCL_DEBUG: INFO

Como alternativa, puede enviar un trabajo utilizando kubectl para asegurarse de que la tarea aparezca en la pestaña Panel. A continuación se muestra un comando kubectl de ejemplo.

kubectl apply -f ./yaml-configuration-file-name.yaml

Al enviar el trabajo, incluya el nombre de la cola y las etiquetas de clase de prioridad. Por ejemplo, con el nombre de la cola hyperpod-ns-team-name-localqueue y la clase de prioridad priority-class-name-priority, debe incluir las siguientes etiquetas:

  • kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue

  • kueue.x-k8s.io/priority-class: priority-class-name-priority

En el siguiente fragmento de configuración de YAML, se muestra cómo añadir etiquetas al archivo de configuración original para garantizar que la tarea aparezca en la pestaña Panel:

metadata: name: job-name namespace: hyperpod-ns-team-name labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class: priority-class-name-priority

Enumeración de trabajos

El siguiente comando enumera los trabajos y sus detalles.

hyperpod list-jobs

Ejemplo de respuesta:

{ "jobs": [ { "Name": "hyperpod-cli-test", "Namespace": "hyperpod-ns-test-team", "CreationTime": "2024-11-18T21:21:15Z", "Priority": "training", "State": "Succeeded" } ] }

Obtención de información detallada sobre un trabajo

El siguiente comando proporciona los detalles de un trabajo. Si no se especifica ningún espacio de nombres, la AWS CLI de HyperPod buscará un espacio de nombres administrado por SageMaker AI al que tenga acceso.

hyperpod get-job --job-name hyperpod-cli-test

Ejemplo de respuesta:

{ "Name": "hyperpod-cli-test", "Namespace": "hyperpod-ns-test-team", "Label": { "app": "hyperpod-cli-test", "app.kubernetes.io/managed-by": "Helm", "kueue.x-k8s.io/priority-class": "training" }, "CreationTimestamp": "2024-11-18T21:21:15Z", "Status": { "completionTime": "2024-11-18T21:25:24Z", "conditions": [ { "lastTransitionTime": "2024-11-18T21:21:15Z", "lastUpdateTime": "2024-11-18T21:21:15Z", "message": "PyTorchJob hyperpod-cli-test is created.", "reason": "PyTorchJobCreated", "status": "True", "type": "Created" }, { "lastTransitionTime": "2024-11-18T21:21:17Z", "lastUpdateTime": "2024-11-18T21:21:17Z", "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test is running.", "reason": "PyTorchJobRunning", "status": "False", "type": "Running" }, { "lastTransitionTime": "2024-11-18T21:25:24Z", "lastUpdateTime": "2024-11-18T21:25:24Z", "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test successfully completed.", "reason": "PyTorchJobSucceeded", "status": "True", "type": "Succeeded" } ], "replicaStatuses": { "Worker": { "selector": "training.kubeflow.org/job-name=hyperpod-cli-test,training.kubeflow.org/operator-name=pytorchjob-controller,training.kubeflow.org/replica-type=worker", "succeeded": 1 } }, "startTime": "2024-11-18T21:21:15Z" }, "ConsoleURL": "https://us-west-2.console.aws.amazon.com/sagemaker/home?region=us-west-2#/cluster-management/hyperpod-eks-test-cluster-id“ }

Suspensión y anulación de la suspensión de trabajos

Si quiere eliminar algún trabajo enviado del programador, la AWS CLI de HyperPod proporciona un comando suspend para eliminar temporalmente el trabajo de la orquestación. El trabajo suspendido ya no se programará a menos que el comando anule la suspensión del trabajo manualmente con el comando de la unsuspend.

Para suspender temporalmente un trabajo:

hyperpod patch-job suspend --job-name hyperpod-cli-test

Para volver a añadir un trabajo a la cola:

hyperpod patch-job unsuspend --job-name hyperpod-cli-test

Trabajos de depuración

La AWS CLI de HyperPod también proporciona otros comandos para depurar los problemas de envío de trabajos. Por ejemplo, list-pods y get-logs en el repositorio HyperPod AWS CLI Github.