As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Observabilidade do modelo para trabalhos de treinamento em SageMaker HyperPod clusters orquestrados pela Amazon EKS
SageMaker HyperPod clusters orquestrados com a Amazon EKS podem se integrar ao MLflowaplicativo no Amazon SageMaker Studio. Os administradores do cluster configuram o MLflow servidor e o conectam aos SageMaker HyperPod clusters. Cientistas de dados podem obter informações sobre o modelo
Para configurar um MLflow servidor usando AWS CLI
Um servidor MLflow de rastreamento deve ser criado pelo administrador do cluster.
-
Crie um servidor SageMaker MLflow de rastreamento seguindo as instruções em Criar um servidor de rastreamento usando AWS CLI o.
-
Certifique-se de que a
eks-auth:AssumeRoleForPodIdentity
permissão exista na função de IAM execução do SageMaker HyperPod. -
Se o
eks-pod-identity-agent
complemento ainda não estiver instalado no seu EKS cluster, instale o complemento no EKS cluster.aws eks create-addon \ --cluster-name
<eks_cluster_name>
\ --addon-name eks-pod-identity-agent \ --addon-versionvx.y.z-eksbuild.1
-
Crie um
trust-relationship.json
arquivo para uma nova função para o Pod chamar MLflowAPIs.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
Execute o código a seguir para criar a função e anexar a relação de confiança.
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" -
Crie a política a seguir que conceda acesso ao Pod para chamar todas as
sagemaker-mlflow
operações e colocar artefatos do modelo no S3. A permissão do S3 já existe no servidor de rastreamento, mas se os artefatos do modelo forem muito grandes, uma chamada direta para o s3 será feita a partir do MLflow código para fazer o upload dos artefatos.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>
" } ] } EOFnota
ARNsDeve ser aquele do MLflow servidor e do bucket S3 configurado com o MLflow servidor durante o servidor que você criou, seguindo as instruções Configurar a MLflow infraestrutura.
-
Anexe a
mlflow-metrics-emit-policy
política aohyperpod-mlflow-role
uso do documento de política salvo na etapa anterior.aws iam put-role-policy \ --role-name
hyperpod-mlflow-role
\ --policy-namemlflow-metrics-emit-policy
\ --policy-documentfile://hyperpod-mlflow-policy.json
-
Crie uma conta de serviço do Kubernetes para que o Pod acesse o servidor. MLflow
cat >
mlflow-service-account.yaml
<<EOF apiVersion: v1 kind: ServiceAccount metadata: name:mlflow-service-account
namespace:kubeflow
EOFExecute o comando a seguir para aplicar ao EKS cluster.
kubectl apply -f
mlflow-service-account.yaml
-
Crie uma associação de identidade do 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
Para coletar métricas de trabalhos de treinamento para o MLflow servidor
Os cientistas de dados precisam configurar o script de treinamento e a imagem do docker para emitir métricas para o servidor. MLflow
-
Adicione as linhas a seguir no início do seu script de treinamento.
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()
-
Crie uma imagem do Docker com o script de treinamento e envie para a AmazonECR. Pegue o ARN do ECR contêiner. Para obter mais informações sobre como criar e enviar uma imagem do Docker, consulte Como enviar uma imagem do Docker no Guia do usuário. ECR
dica
Certifique-se de adicionar a instalação dos pacotes mlflow e sagemaker-mlflow no arquivo Docker. Para saber mais sobre a instalação dos pacotes, requisitos e versões compatíveis dos pacotes, consulte Instalação MLflow e o SageMaker MLflow plug-in.
-
Adicione uma conta de serviço aos pods de tarefas de treinamento para dar acesso a
hyperpod-mlflow-role
eles. Isso permite que os Pods MLflow APIs liguem. Execute o seguinte modelo SageMaker HyperPod CLI de envio de trabalhos. Crie isso com o nome do arquivomlflow-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
-
Inicie o trabalho usando o YAML arquivo da seguinte maneira.
hyperpod start-job --config-file
/path/to/mlflow-test.yaml
-
Gere um pré-assinado URL para o servidor MLflow de rastreamento. Você pode abrir o link no seu navegador e começar a monitorar seu trabalho de treinamento.
aws sagemaker create-presigned-mlflow-tracking-server-url \ --tracking-server-name "
tracking-server-name
" \ --session-expiration-duration-in-seconds1800
\ --expires-in-seconds300
\ --regionregion