

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Modellbeobachtbarkeit für Trainingsjobs auf SageMaker HyperPod Clustern, die von Amazon EKS orchestriert werden
<a name="sagemaker-hyperpod-eks-cluster-observability-model"></a>

SageMaker HyperPod Mit Amazon EKS orchestrierte Cluster können in die [MLflow-Anwendung auf Amazon SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html) Studio integriert werden. Cluster-Administratoren richten den MLflow-Server ein und verbinden ihn mit den Clustern. SageMaker HyperPod Datenwissenschaftler können Einblicke in das Modell gewinnen.

**So richten Sie einen MLflow-Server mit AWS CLI ein**

Ein Cluster-Administrator muss einen MLFlow-Tracking-Server erstellen.

1. Erstellen Sie einen SageMaker AI MLFlow-Tracking-Server, indem Sie den Anweisungen unter [Erstellen eines Tracking-Servers mithilfe der AWS CLI](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server-cli.html#mlflow-create-tracking-server-cli-infra-setup) folgen.

1. Stellen Sie sicher, dass die [https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html)Berechtigung in der IAM-Ausführungsrolle für vorhanden ist. SageMaker HyperPod

1. Wenn das `eks-pod-identity-agent` Add-on nicht bereits auf Ihrem EKS-Cluster installiert ist, installieren Sie es auf dem EKS-Cluster.

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

1. Erstellen Sie eine `trust-relationship.json` Datei für eine neue Rolle für Pod, um MLflow-APIs aufzurufen.

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

   Führen Sie den folgenden Code aus, um die Rolle zu erstellen und die Vertrauensstellung hinzuzufügen.

   ```
   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. Erstellen Sie die folgende Richtlinie, die Pod Zugriff gewährt, um alle `sagemaker-mlflow` Operationen aufzurufen und Modellartefakte in S3 zu speichern. Die S3-Berechtigung ist bereits auf dem Tracking-Server vorhanden, aber wenn die Modellartefakte zu groß sind, erfolgt ein direkter Aufruf an s3 über den MLflow-Code, um die Artefakte hochzuladen.

   ```
   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
   ```
**Anmerkung**  
Die ARNs sind die vom MLflow-Server und dem S3-Bucket, die mit dem MLflow-Server während des Servers eingerichtet wurden, den Sie gemäß den Anweisungen MLflow-Infrastruktur [einrichten](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server-cli.html#mlflow-create-tracking-server-cli-infra-setup) erstellt haben.

1. Hängen Sie die `mlflow-metrics-emit-policy` Richtlinie `hyperpod-mlflow-role` mithilfe des im vorherigen Schritt gespeicherten Richtliniendokuments an.

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

1. Erstellen Sie ein Kubernetes-Dienstkonto für Pod, um auf den MLflow-Server zuzugreifen. 

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

   Führen Sie den folgenden Befehl aus, um ihn auf den EKS-Cluster anzuwenden.

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

1. Erstellen Sie eine Pod-Identitätszuordnung.

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

**Um Metriken von Trainingsjobs auf dem MLflow Server zu sammeln**

Datenwissenschaftler müssen das Trainingsskript und das Docker-Image einrichten, um Metriken an den MLflow-Server zu senden.

1. Fügen Sie am Anfang Ihres Trainingsskripts die folgenden Zeilen hinzu.

   ```
   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. Erstellen Sie ein Docker-Image mit dem Trainingsskript und übertragen Sie es auf Amazon ECR. Rufen Sie den ARN des ECR-Containers ab. Weitere Informationen zum Erstellen und Pushen eines Docker-Images finden Sie unter [Pushing a Docker-Image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) im *ECR-Benutzerhandbuch*.
**Tipp**  
Stellen Sie sicher, dass Sie die Installation der Pakete mlflow und sagemaker-mlflow zur Docker-Datei hinzufügen. Weitere Informationen zur Installation der Pakete, zu den Anforderungen und zu den kompatiblen Versionen der Pakete finden [Sie unter Installieren von MLflow und dem SageMaker AI MLFlow-Plugin](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-track-experiments.html#mlflow-track-experiments-install-plugin).

1. Fügen Sie in den Pods für Trainingsjobs ein Servicekonto hinzu, um ihnen Zugriff auf `hyperpod-mlflow-role` zu gewähren. Dadurch können Pods MLflow-APIs aufrufen. Führen Sie die folgende SageMaker HyperPod CLI-Vorlage für die Einreichung von Jobs aus. Erstellen Sie dies mit dem Dateinamen `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. Starten Sie den Job mit der YAML-Datei wie folgt.

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

1. Generieren Sie eine vorsignierte -URL für den MLflow Tracking Server. Sie können den Link in Ihrem Browser öffnen und damit beginnen, Ihren Trainingsjob zu verfolgen.

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