Configurando partições de GPU na Amazon SageMaker HyperPod - 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á.

Configurando partições de GPU na Amazon SageMaker HyperPod

Pré-requisitos

  • HyperPod Cluster Amazon EKS com instâncias de GPU compatíveis

  • Operador de GPU NVIDIA instalado

  • Permissões apropriadas do IAM para gerenciamento de clusters

Criando um cluster com configuração MIG

Usando AWS CLI

aws sagemaker create-cluster \ --cluster-name my-mig-cluster \ --orchestrator 'Eks={ClusterArn=arn:aws:eks:region:account:cluster/cluster-name}' \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://my-bucket", "OnCreate": "on_create_script.sh" }, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-1g.5gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role", "ThreadsPerCore": 1 }' \ --vpc-config '{ "SecurityGroupIds": ["sg-12345"], "Subnets": ["subnet-12345"] }' \ --node-provisioning-mode Continuous

Usando CloudFormation

{ "ClusterName": "my-mig-cluster", "InstanceGroups": [ { "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-2g.10gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" } ], "Orchestrator": { "Eks": { "ClusterArn": "arn:aws:eks:region:account:cluster/cluster-name" } }, "NodeProvisioningMode": "Continuous" }

Adicionar operador de GPU a um cluster existente

Instalar o operador de GPU

{$AWS_REGION}Substitua pela região do seu cluster (por exemplo, us-east-1, us-west-2).

helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \ -f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \ -n kube-system

Verifique a instalação (aguarde de 2 a 3 minutos)

Verifique se todos os pods de operadores de GPU estão em execução:

kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"

Cápsulas esperadas:

  • gpu-operator-* - 1 instância (controlador de cluster)

  • nvidia-device-plugin-daemonset-* - 1 por nó da GPU (todas as instâncias da GPU)

  • nvidia-mig-manager-* - 1 por nó compatível com MIG (A100/H100)

Remover plug-in de dispositivo antigo

Desative o existente nvidia-device-plugin:

helm upgrade dependencies helm_chart/HyperPodHelmChart \ --set nvidia-device-plugin.devicePlugin.enabled=false \ -n kube-system

Verifique os recursos da GPU

Confirme se os nós mostram a capacidade da GPU. Ele deve exibir: nvidia.com/gpu: 8 (ou sua contagem real de GPU).

kubectl describe nodes | grep "nvidia.com/gpu"

Atualizando a configuração MIG

Preparando os nós antes das atualizações do MIG

Antes de atualizar as configurações do MIG no seu grupo de instâncias, você deve preparar os nós para evitar a interrupção da carga de trabalho. Siga estas etapas para drenar com segurança as cargas de trabalho dos nós que serão reconfigurados.

Etapa 1: identificar nós no grupo de instâncias

Primeiro, identifique todos os nós que pertencem ao grupo de instâncias que você quer atualizar:

# List all nodes in the instance group kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME # Example: kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group

Esse comando retorna uma lista de todos os nós no grupo de instâncias especificado. Anote o nome de cada nó para as etapas a seguir.

Etapa 2: isolar e drenar cada nó

Para cada nó identificado na Etapa 1, execute as seguintes ações:

Cordon, o Nodo

O isolamento impede que novos pods sejam programados no nó:

# Cordon a single node kubectl cordon NODE_NAME # Example: kubectl cordon hyperpod-i-014a41a7001adca60

Drene os pods de carga de trabalho do Node

Drene o nó para despejar todos os módulos de carga de trabalho e, ao mesmo tempo, preservar os módulos do sistema:

# Drain the node (ignore DaemonSets and evict pods) kubectl drain NODE_NAME \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300 # Example: kubectl drain hyperpod-i-014a41a7001adca60 \ --ignore-daemonsets \ --delete-emptydir-data \ --force \ --grace-period=300

Explicação das opções de comando:

  • --ignore-daemonsets- Permite que a operação de drenagem continue mesmo se houver DaemonSet cápsulas

  • --delete-emptydir-data- Exclui pods usando volumes emptyDir (necessários para que a drenagem seja bem-sucedida)

  • --force- Força a exclusão de pods não gerenciados por um controlador (use com cuidado)

  • --grace-period=300- Dá 5 minutos para que os pods terminem graciosamente

Importante
  • A operação de drenagem pode levar vários minutos, dependendo do número de cápsulas e de seus períodos de carência de término.

  • Os pods do sistema nos seguintes namespaces permanecerão em execução:kube-system,,cert-manager,kubeflow,hyperpod-inference-system,kube-public,mpi-operator,,gpu-operator, aws-hyperpodjupyter-k8s-system, e hyperpod-observability kueue-system keda

  • DaemonSet os pods permanecerão no nó (eles são ignorados pelo design)

Etapa 3: Verificar se não há pods de carga de trabalho em execução

Depois de drenar, verifique se nenhum pod de carga de trabalho permanece nos nós (excluindo namespaces do sistema):

# Check for any remaining pods outside system namespaces kubectl get pods --all-namespaces --field-selector spec.nodeName=NODE_NAME \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda" # Example: kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \ | grep -v "kube-system" \ | grep -v "cert-manager" \ | grep -v "kubeflow" \ | grep -v "hyperpod-inference-system" \ | grep -v "kube-public" \ | grep -v "mpi-operator" \ | grep -v "gpu-operator" \ | grep -v "aws-hyperpod" \ | grep -v "jupyter-k8s-system" \ | grep -v "hyperpod-observability" \ | grep -v "kueue-system" \ | grep -v "keda"

Saída esperada: se o nó for drenado adequadamente, esse comando não deverá retornar nenhum resultado (ou mostrar apenas a linha do cabeçalho). Se algum pod ainda estiver funcionando, investigue por que ele não foi despejado e exclua-o manualmente, se necessário.

Etapa 4: Verificar o status de prontidão do nó

Antes de prosseguir com a atualização do MIG, confirme se todos os nós estão isolados:

# Check node status - should show "SchedulingDisabled" kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=INSTANCE_GROUP_NAME

Os nós devem aparecer SchedulingDisabled na coluna STATUS, indicando que estão isolados e prontos para a atualização do MIG.

Atualizar o perfil MIG no cluster existente

Você pode alterar os perfis MIG em clusters existentes:

aws sagemaker update-cluster \ --cluster-name my-mig-cluster \ --instance-groups '{ "InstanceGroupName": "gpu-group", "InstanceType": "ml.p4d.24xlarge", "InstanceCount": 1, "KubernetesConfig": { "Labels": { "nvidia.com/mig.config": "all-3g.20gb" } }, "ExecutionRole": "arn:aws:iam::account:role/execution-role" }'
nota

Se os trabalhos já estiverem sendo executados em um nó, o particionamento MIG falhará. O usuário receberá uma mensagem de erro para drenar os nós antes de tentar novamente o particionamento MIG.

Verificando a configuração do MIG

Após a criação ou atualização do cluster, verifique a configuração do MIG:

# Update kubeconfig aws eks update-kubeconfig --name your-eks-cluster --region us-east-2 # Check MIG labels kubectl get node NODE_NAME -o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe node NODE_NAME | grep -A 10 "Allocatable:"

Comandos comuns para depuração da configuração MIG

Use os comandos a seguir para solucionar problemas e validar a configuração do MIG em seu cluster:

# Check GPU Operator status kubectl get pods -n gpu-operator-resources # View MIG configuration kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi # Check device plugin configuration kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX # Monitor node events kubectl get events --field-selector involvedObject.name=NODE_NAME
nota

nvidia-device-plugin-XXXXXSubstitua nvidia-driver-XXXXX e pelos nomes reais dos pods do seu cluster e NODE_NAME pelo nome do seu nó.

Usando o SageMaker AI Console

Criando um novo cluster com o MIG

  1. Navegue até Amazon SageMaker AI > HyperPod Clusters > Gerenciamento de clusters > Criar HyperPod cluster

  2. Selecione Orchestrated by EKS

  3. Escolha Configuração personalizada e verifique se o operador de GPU está ativado por padrão

  4. Na seção Grupos de instâncias, clique em Adicionar grupo

  5. Configure o grupo de instâncias e navegue até Configuração avançada para ativar a opção Usar partição GPU e escolha a configuração MIG desejada no menu suspenso.

  6. Clique em Adicionar grupo de instâncias e conclua a configuração restante do cluster

  7. Clique em Enviar para criar o cluster

Atualizando a configuração MIG em um cluster existente

  1. Navegue até Amazon SageMaker AI > HyperPod Clusters > Gerenciamento de clusters

  2. Selecione seu cluster existente e clique em Editar no grupo de instâncias que você deseja modificar

  3. Em Configuração avançada, alterne Usar partição GPU se ainda não estiver habilitado e selecione uma configuração MIG diferente no menu suspenso

  4. Clique em Salvar alterações