Observabilidade do modelo para trabalhos de treinamento em SageMaker HyperPod clusters orquestrados pelo Amazon EKS - SageMaker IA da Amazon

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 pelo Amazon EKS

SageMaker HyperPod clusters orquestrados com o Amazon EKS podem se integrar ao MLflow aplicativo 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 a AWS CLI

Um servidor MLflow de rastreamento deve ser criado pelo administrador do cluster.

  1. Crie um servidor MLflow de rastreamento de SageMaker IA seguindo as instruções em Criar um servidor de rastreamento usando a AWS CLI.

  2. Certifique-se de que a eks-auth:AssumeRoleForPodIdentitypermissão exista na função de execução do IAM para SageMaker HyperPod.

  3. Se o complemento eks-pod-identity-agent ainda não estiver instalado no cluster EKS, instale o complemento no cluster EKS.

    aws eks create-addon \ --cluster-name <eks_cluster_name> \ --addon-name eks-pod-identity-agent \ --addon-version vx.y.z-eksbuild.1
  4. Crie um trust-relationship.json arquivo para uma nova função para o Pod chamar 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" ] } ] } EOF

    Execute o comando a seguir para criar um perfil 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"
  5. Crie a política a seguir que conceda acesso ao Pod para chamar todas as operações sagemaker-mlflow 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>" } ] } EOF
    nota

    ARNs Deve 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.

  6. Anexe a mlflow-metrics-emit-policy política ao hyperpod-mlflow-role uso do documento de política salvo na etapa anterior.

    aws iam put-role-policy \ --role-name hyperpod-mlflow-role \ --policy-name mlflow-metrics-emit-policy \ --policy-document file://hyperpod-mlflow-policy.json
  7. 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 EOF

    Execute o comando a seguir para aplicar as alterações no cluster EKS.

    kubectl apply -f mlflow-service-account.yaml
  8. Crie uma associação de identidade de Pods.

    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

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

  1. 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()
  2. Crie uma imagem do Docker com o script de treinamento e envie para o Amazon ECR. Obtenha o ARN do contêiner do ECR. 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 do 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, os requisitos e as versões compatíveis dos pacotes, consulte Instalação MLflow e o plug-in SageMaker AI MLflow .

  3. Adicione uma conta de serviço aos pods de tarefas de treinamento para dar acesso ao hyperpod-mlflow-role a eles. Isso permite que os Pods MLflow APIs liguem. Execute o seguinte modelo de envio de tarefas da SageMaker HyperPod CLI. Crie isso com o nome do arquivo 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
  4. Inicie o trabalho usando o arquivo YAML da seguinte maneira:

    hyperpod start-job --config-file /path/to/mlflow-test.yaml
  5. Gere uma URL pré-assinada 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-seconds 1800 \ --expires-in-seconds 300 \ --region region