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
Tópicos
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 cordonNODE_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 drainNODE_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, ehyperpod-observabilitykueue-systemkeda -
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 --nameyour-eks-cluster--regionus-east-2# Check MIG labels kubectl get nodeNODE_NAME-o=jsonpath='{.metadata.labels}' | grep mig # Check available MIG resources kubectl describe nodeNODE_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
-
Navegue até Amazon SageMaker AI > HyperPod Clusters > Gerenciamento de clusters > Criar HyperPod cluster
-
Selecione Orchestrated by EKS
-
Escolha Configuração personalizada e verifique se o operador de GPU está ativado por padrão
-
Na seção Grupos de instâncias, clique em Adicionar grupo
-
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.
-
Clique em Adicionar grupo de instâncias e conclua a configuração restante do cluster
-
Clique em Enviar para criar o cluster
Atualizando a configuração MIG em um cluster existente
-
Navegue até Amazon SageMaker AI > HyperPod Clusters > Gerenciamento de clusters
-
Selecione seu cluster existente e clique em Editar no grupo de instâncias que você deseja modificar
-
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
-
Clique em Salvar alterações