Observabilidade do modelo para trabalhos de treinamento em SageMaker HyperPod clusters orquestrados pela Amazon EKS - Amazon SageMaker

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.

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

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

  3. 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-version vx.y.z-eksbuild.1
  4. 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"
  5. 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>" } ] } EOF
    nota

    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.

  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 ao EKS cluster.

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

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

  3. 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
  4. Inicie o trabalho usando o YAML arquivo da seguinte maneira.

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