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à.
Osservabilità dei modelli per i lavori di formazione su SageMaker HyperPod cluster orchestrati da Amazon EKS
SageMaker HyperPod i cluster orchestrati con Amazon EKS possono integrarsi con l'applicazione MLflow su Amazon Studio. SageMaker Gli amministratori dei cluster configurano il MLflow server e lo collegano ai cluster. SageMaker HyperPod I Data Scientist possono ottenere informazioni approfondite sul modello.
Per configurare un MLflow server tramite AWS CLI
Un amministratore del cluster deve creare un server di MLflow tracciamento.
-
Crea un server di MLflow tracciamento SageMaker AI, seguendo le istruzioni in Creare un server di tracciamento utilizzando la AWS CLI.
-
Assicurati che l'
eks-auth:AssumeRoleForPodIdentityautorizzazione esista nel ruolo di esecuzione IAM per SageMaker HyperPod. -
Se il componente aggiuntivo
eks-pod-identity-agentnon è già installato sul cluster EKS, esegui l’operazione.aws eks create-addon \ --cluster-name<eks_cluster_name>\ --addon-name eks-pod-identity-agent \ --addon-versionvx.y.z-eksbuild.1 -
Crea un
trust-relationship.jsonfile per un nuovo ruolo da chiamare per Pod MLflow APIs.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" ] } ] } EOFEsegui il codice seguente per creare un ruolo e collegare la relazione di attendibilità.
aws iam create-role --role-namehyperpod-mlflow-role\ --assume-role-policy-document file://trust-relationship.json \ --description "allow pods to emit mlflow metrics and put data in s3" -
Crea la policy seguente che concede al pod l’accesso per chiamare tutte le operazioni
sagemaker-mlflowe inserire gli artefatti del modello in S3. L'autorizzazione S3 esiste già all'interno del server di tracciamento, ma se gli artefatti del modello sono troppo grandi, viene effettuata una chiamata diretta a s3 dal MLflow codice per caricare gli artefatti.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 -
Collega la policy
mlflow-metrics-emit-policyahyperpod-mlflow-roleutilizzando il documento della policy salvato nella fase precedente.aws iam put-role-policy \ --role-namehyperpod-mlflow-role\ --policy-namemlflow-metrics-emit-policy\ --policy-documentfile://hyperpod-mlflow-policy.json -
Crea un account di servizio Kubernetes per consentire a Pod di accedere al server. MLflow
cat >mlflow-service-account.yaml<<EOF apiVersion: v1 kind: ServiceAccount metadata: name:mlflow-service-accountnamespace:kubeflowEOFEsegui questo comando per applicarlo al cluster EKS.
kubectl apply -fmlflow-service-account.yaml -
Crea un’associazione Pod Identity.
aws eks create-pod-identity-association \ --cluster-nameEKS_CLUSTER_NAME\ --role-arnarn:aws:iam::111122223333:role/hyperpod-mlflow-role\ --namespacekubeflow\ --service-accountmlflow-service-account
Per raccogliere le metriche dai lavori di formazione al server MLflow
I data scientist devono configurare lo script di formazione e l'immagine docker per inviare le metriche al server. MLflow
-
Aggiungi le righe seguenti all’inizio dello script di addestramento.
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() -
Crea un’immagine Docker con lo script di addestramento e inviala ad Amazon ECR. Ottieni l’ARN del container ECR. Per ulteriori informazioni sulla creazione e il push di un’immagine Docker, consulta Pushing a Docker image in ECR User Guide.
Suggerimento
Assicurati di aggiungere l’installazione dei pacchetti mlflow e sagemaker-mlflow al file Docker. Per ulteriori informazioni sull'installazione dei pacchetti, sui requisiti e sulle versioni compatibili dei pacchetti, consulta Install MLflow e il SageMaker plugin AI. MLflow
-
Aggiungi un account di servizio nei pod del job di addestramento per consentire loro l’accesso a
hyperpod-mlflow-role. Ciò consente ai Pods di chiamare MLflow APIs. Esegui il seguente modello di invio di lavori SageMaker HyperPod CLI. Crealo con il nome del filemlflow-test.yaml.defaults: - override hydra/job_logging: stdout hydra: run: dir: . output_subdir: null training_cfg: entry_script:./train.pyscript_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.2xlargecluster_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 -
Avvia il processo utilizzando il file YAML come segue.
hyperpod start-job --config-file/path/to/mlflow-test.yaml -
Genera un URL prefirmato per il MLflow server di tracciamento. Puoi aprire il link sul browser e iniziare a tenere traccia del tuo job di addestramento.
aws sagemaker create-presigned-mlflow-tracking-server-url \ --tracking-server-name "tracking-server-name" \ --session-expiration-duration-in-seconds1800\ --expires-in-seconds300\ --regionregion