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 MLflowsu Amazon Studio. SageMaker Gli amministratori dei cluster configurano il MLflow server e lo collegano ai cluster. SageMaker HyperPod I data scientist possono ottenere informazioni dettagliate sul modello
Per configurare un MLflow server utilizzando AWS CLI
Un server MLflow di tracciamento deve essere creato dall'amministratore del cluster.
-
Crea un server di SageMaker MLflow tracciamento, seguendo le istruzioni in Creare un server di tracciamento utilizzando il AWS CLI.
-
Assicurati che l'
eks-auth:AssumeRoleForPodIdentity
autorizzazione esista nel ruolo di IAM esecuzione di SageMaker HyperPod. -
Se il
eks-pod-identity-agent
componente aggiuntivo non è già installato nel EKS cluster, installalo nel cluster. EKSaws eks create-addon \ --cluster-name
<eks_cluster_name>
\ --addon-name eks-pod-identity-agent \ --addon-versionvx.y.z-eksbuild.1
-
Crea un
trust-relationship.json
file per un nuovo ruolo da chiamare per Pod. MLflow APIscat >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
Esegui il codice seguente per creare il ruolo e collegare la relazione di fiducia.
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" -
Crea la seguente politica che concede a Pod l'accesso per chiamare tutte le
sagemaker-mlflow
operazioni e 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 codice per caricare gli artefatti. MLflowcat >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 -
Allega la
mlflow-metrics-emit-policy
politica al documento relativo all'hyperpod-mlflow-role
utilizzo della policy salvato nel passaggio precedente.aws iam put-role-policy \ --role-name
hyperpod-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-account
namespace:kubeflow
EOFEsegui il comando seguente da applicare al cluster. EKS
kubectl apply -f
mlflow-service-account.yaml
-
Crea un'associazione di identità Pod.
aws eks create-pod-identity-association \ --cluster-name
EKS_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 seguenti righe all'inizio dello script di formazione.
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 formazione e inviala ad AmazonECR. Prendi la ARN parte del ECR contenitore. Per ulteriori informazioni sulla creazione e il push di un'immagine Docker, consulta Pushing a Docker image nella Guida per l'utente. ECR
Suggerimento
Assicurati di aggiungere l'installazione dei pacchetti mlflow e sagemaker-mlflow nel file Docker. Per saperne di più sull'installazione dei pacchetti, sui requisiti e sulle versioni compatibili dei pacchetti, consulta Install and the plugin. MLflow SageMaker MLflow
-
Aggiungi un account di servizio nei Job Pods di formazione a cui consentire loro di accedere.
hyperpod-mlflow-role
Ciò consente ai Pods di chiamare. MLflow APIs Esegui il seguente modello SageMaker HyperPod CLI di invio dei lavori. Createlo con il nomemlflow-test.yaml
del file.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
-
Avviate il lavoro utilizzando il YAML file come segue.
hyperpod start-job --config-file
/path/to/mlflow-test.yaml
-
Genera un file prefirmato URL per il server di MLflow tracciamento. Puoi aprire il link sul tuo browser e iniziare a monitorare il tuo lavoro di formazione.
aws sagemaker create-presigned-mlflow-tracking-server-url \ --tracking-server-name "
tracking-server-name
" \ --session-expiration-duration-in-seconds1800
\ --expires-in-seconds300
\ --regionregion