

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.

# Observabilidad de modelos para trabajos de formación en SageMaker HyperPod clústeres orquestados por Amazon EKS
<a name="sagemaker-hyperpod-eks-cluster-observability-model"></a>

SageMaker HyperPod los clústeres organizados con Amazon EKS se pueden integrar con la [aplicación MLflow de Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html). Los administradores de clústeres configuran el servidor MLflow y lo conectan a los clústeres. SageMaker HyperPod Los científicos de datos pueden obtener información sobre el modelo.

**Para configurar un servidor MLflow mediante CLI AWS **

El administrador del clúster debe crear un servidor de seguimiento de MLflow.

1. Cree un servidor de seguimiento SageMaker AI MLflow siguiendo las instrucciones de [Crear un servidor de seguimiento mediante la AWS CLI](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server-cli.html#mlflow-create-tracking-server-cli-infra-setup).

1. Asegúrese de que el [https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html)permiso existe en la función de ejecución de IAM para. SageMaker HyperPod

1. Si el complemento `eks-pod-identity-agent` aún no está instalado en el clúster de EKS, instálelo en dicho clúster.

   ```
   aws eks create-addon \
       --cluster-name {{<eks_cluster_name>}} \
       --addon-name eks-pod-identity-agent \
       --addon-version {{vx.y.z-eksbuild.1}}
   ```

1. Cree un archivo `trust-relationship.json` para una nuevo rol para que el pod llame a las API de MLflow.

   ```
   cat >trust-relationship.json <<EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
               "Effect": "Allow",
               "Principal": {
                   "Service": "pods.eks.amazonaws.com"
   
               },
               "Action": [
                   "sts:AssumeRole",
                   "sts:TagSession"
               ]
           }
       ]
   }
   EOF
   ```

   Ejecute el siguiente comando para crear el rol y asociar la relación de confianza.

   ```
   aws iam create-role --role-name {{hyperpod-mlflow-role}} \
       --assume-role-policy-document file://trust-relationship.json \
       --description "allow pods to emit mlflow metrics and put data in s3"
   ```

1. Cree la siguiente política que conceda acceso al pod para llamar a todas las operaciones `sagemaker-mlflow` y colocar los artefactos del modelo en S3. El permiso de S3 ya existe en el servidor de seguimiento, pero si los artefactos del modelo son demasiado grandes, se llama directamente a s3 desde el código de MLflow para cargar los artefactos.

   ```
   cat >hyperpod-mlflow-policy.json <<EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sagemaker-mlflow:AccessUI",
                   "sagemaker-mlflow:CreateExperiment",
                   "sagemaker-mlflow:SearchExperiments",
                   "sagemaker-mlflow:GetExperiment",
                   "sagemaker-mlflow:GetExperimentByName",
                   "sagemaker-mlflow:DeleteExperiment",
                   "sagemaker-mlflow:RestoreExperiment",
                   "sagemaker-mlflow:UpdateExperiment",
                   "sagemaker-mlflow:CreateRun",
                   "sagemaker-mlflow:DeleteRun",
                   "sagemaker-mlflow:RestoreRun",
                   "sagemaker-mlflow:GetRun",
                   "sagemaker-mlflow:LogMetric",
                   "sagemaker-mlflow:LogBatch",
                   "sagemaker-mlflow:LogModel",
                   "sagemaker-mlflow:LogInputs",
                   "sagemaker-mlflow:SetExperimentTag",
                   "sagemaker-mlflow:SetTag",
                   "sagemaker-mlflow:DeleteTag",
                   "sagemaker-mlflow:LogParam",
                   "sagemaker-mlflow:GetMetricHistory",
                   "sagemaker-mlflow:SearchRuns",
                   "sagemaker-mlflow:ListArtifacts",
                   "sagemaker-mlflow:UpdateRun",
                   "sagemaker-mlflow:CreateRegisteredModel",
                   "sagemaker-mlflow:GetRegisteredModel",
                   "sagemaker-mlflow:RenameRegisteredModel",
                   "sagemaker-mlflow:UpdateRegisteredModel",
                   "sagemaker-mlflow:DeleteRegisteredModel",
                   "sagemaker-mlflow:GetLatestModelVersions",
                   "sagemaker-mlflow:CreateModelVersion",
                   "sagemaker-mlflow:GetModelVersion",
                   "sagemaker-mlflow:UpdateModelVersion",
                   "sagemaker-mlflow:DeleteModelVersion",
                   "sagemaker-mlflow:SearchModelVersions",
                   "sagemaker-mlflow:GetDownloadURIForModelVersionArtifacts",
                   "sagemaker-mlflow:TransitionModelVersionStage",
                   "sagemaker-mlflow:SearchRegisteredModels",
                   "sagemaker-mlflow:SetRegisteredModelTag",
                   "sagemaker-mlflow:DeleteRegisteredModelTag",
                   "sagemaker-mlflow:DeleteModelVersionTag",
                   "sagemaker-mlflow:DeleteRegisteredModelAlias",
                   "sagemaker-mlflow:SetRegisteredModelAlias",
                   "sagemaker-mlflow:GetModelVersionByAlias"
               ],
               "Resource": "{{arn:aws:sagemaker:us-west-2:111122223333:mlflow-tracking-server/<ml tracking server name>}}"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": "{{arn:aws:s3:::<mlflow-s3-bucket_name>}}"
           }
       ]
   }
   EOF
   ```
**nota**  
Los ARN deben ser los del servidor de MLflow y el bucket de S3 configurado con dicho servidor que ha creado siguiendo las instrucciones que se indican en [Set up MLflow infrastructure](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server-cli.html#mlflow-create-tracking-server-cli-infra-setup).

1. Asocie la política `mlflow-metrics-emit-policy` al `hyperpod-mlflow-role` mediante el documento de política guardado en el paso anterior.

   ```
   aws iam put-role-policy \
     --role-name {{hyperpod-mlflow-role}} \
     --policy-name {{mlflow-metrics-emit-policy}} \
     --policy-document {{file://hyperpod-mlflow-policy.json}}
   ```

1. Cree una cuenta de servicio de Kubernetes para que el pod tenga acceso al servidor de MLflow. 

   ```
   cat >{{mlflow-service-account.yaml}} <<EOF
   apiVersion: v1
   kind: ServiceAccount
   metadata:
     name: {{mlflow-service-account}}
     namespace: {{kubeflow}}
   EOF
   ```

   Ejecute el siguiente comando para que se aplique el clúster de EKS.

   ```
   kubectl apply -f {{mlflow-service-account.yaml}}
   ```

1. Cree una asociación de Pod Identity.

   ```
   aws eks create-pod-identity-association \
       --cluster-name {{EKS_CLUSTER_NAME}} \
       --role-arn {{arn:aws:iam::111122223333:role/hyperpod-mlflow-role}} \
       --namespace {{kubeflow}} \
       --service-account {{mlflow-service-account}}
   ```

**Recopilación de métricas de los trabajos de entrenamiento para el servidor de MLflow**

Los científicos de datos deben configurar el script de entrenamiento y la imagen de Docker para emitir métricas al servidor de MLflow.

1. Añada las siguientes líneas al principio del script de entrenamiento.

   ```
   import mlflow
   
   # Set the Tracking Server URI using the ARN of the Tracking Server you created
   mlflow.set_tracking_uri(os.environ['MLFLOW_TRACKING_ARN'])
   # Enable autologging in MLflow
   mlflow.autolog()
   ```

1. Cree una imagen de Docker con el script de entrenamiento y envíela a Amazon ECR. Obtenga el ARN del contenedor de ECR. Para obtener más información sobre cómo crear y enviar una imagen de Docker, consulte [Pushing a Docker image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) en la *Guía del usuario de ECR*.
**sugerencia**  
Asegúrese de añadir la instalación de los paquetes de mlflow y sagemaker-mlflow en el archivo de Docker. Para obtener más información sobre la instalación de los paquetes, los requisitos y las versiones compatibles de los paquetes, consulte [Instalar MLflow y el complemento SageMaker AI MLflow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-track-experiments.html#mlflow-track-experiments-install-plugin).

1. Añada una cuenta de servicio a los pods del trabajo de entrenamiento para darles acceso a `hyperpod-mlflow-role`. Esto permite a los pods llamar a las API de MLflow. Ejecute la siguiente plantilla de envío de trabajos de SageMaker HyperPod CLI. Cree esto con el nombre del archivo `mlflow-test.yaml`.

   ```
   defaults:
    - override hydra/job_logging: stdout
   
   hydra:
    run:
     dir: .
    output_subdir: null
   
   training_cfg:
    entry_script: {{./train.py}}
    script_args: []
    run:
     name: {{test-job-with-mlflow}} # Current run name
     nodes: {{2}} # Number of nodes to use for current training
     # ntasks_per_node: {{1}} # Number of devices to use per node
   cluster:
    cluster_type: k8s # currently k8s only
    instance_type: {{ml.c5.2xlarge}}
    cluster_config:
     # name of service account associated with the namespace
     service_account_name: {{mlflow-service-account}}
     # persistent volume, usually used to mount FSx
     persistent_volume_claims: null
     namespace: {{kubeflow}}
     # required node affinity to select nodes with SageMaker HyperPod
     # labels and passed health check if burn-in enabled
     label_selector:
         required:
             sagemaker.amazonaws.com/node-health-status:
                 - Schedulable
         preferred:
             sagemaker.amazonaws.com/deep-health-check-status:
                 - Passed
         weights:
             - 100
     pullPolicy: IfNotPresent # policy to pull container, can be Always, IfNotPresent and Never
     restartPolicy: OnFailure # restart policy
   
   base_results_dir: ./result # Location to store the results, checkpoints and logs.
   container: {{111122223333.dkr.ecr.us-west-2.amazonaws.com/tag}} # container to use
   
   env_vars:
    NCCL_DEBUG: INFO # Logging level for NCCL. Set to "INFO" for debug information
    MLFLOW_TRACKING_ARN: {{arn:aws:sagemaker:us-west-2:11112223333:mlflow-tracking-server/tracking-server-name}}
   ```

1. Inicie el trabajo con el archivo YAML de la siguiente manera.

   ```
   hyperpod start-job --config-file {{/path/to/mlflow-test.yaml}}
   ```

1. Genere una URL prefirmada para el servidor de seguimiento de MLflow. Puede abrir el enlace en el navegador y empezar a realizar un seguimiento del trabajo de entrenamiento.

   ```
   aws sagemaker create-presigned-mlflow-tracking-server-url \                          
       --tracking-server-name "{{tracking-server-name}}" \
       --session-expiration-duration-in-seconds {{1800}} \
       --expires-in-seconds {{300}} \
       --region {{region}}
   ```