View a markdown version of this page

Governança de tarefas para implantação de modelos em 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á.

Governança de tarefas para implantação de modelos em HyperPod

Esta seção aborda como otimizar seus clusters compartilhados do Amazon SageMaker HyperPod EKS para cargas de trabalho de inferência em tempo real. Você aprenderá a configurar os recursos de governança de tarefas do Kueue, como gerenciamento de cotas, agendamento prioritário e políticas de compartilhamento de recursos, para garantir que suas workloads de inferência recebam os recursos de GPU de que precisam durante picos de tráfego, mantendo uma alocação justa nas atividades de treinamento, avaliação e teste de suas equipes. Para ter mais informações gerais sobre governança de tarefas, consulte SageMaker HyperPod governança de tarefas.

Como funciona o gerenciamento de workloads de inferência

Para gerenciar com eficácia os picos de tráfego de inferência em tempo real em clusters HyperPod EKS compartilhados, implemente as seguintes estratégias de governança de tarefas usando os recursos existentes da Kueue.

Configuração de classes prioritárias

Defina classes prioritárias dedicadas a workloads de inferência com pesos altos (como 100) para garantir que os pods de inferência sejam admitidos e programados antes de outros tipos de tarefa. Essa configuração permite que as workloads de inferência impeçam trabalhos de menor prioridade durante a carga do cluster, o que é essencial para manter os requisitos de baixa latência durante picos de tráfego.

Dimensionamento e alocação de cotas

Reserve recursos de GPU suficientes na ClusterQueue de sua equipe para lidar com os picos de inferência esperados. Durante períodos de baixo tráfego de inferência, os recursos com cota não utilizada podem ser alocados temporariamente a tarefas de outras equipes. Quando a demanda de inferência aumenta, esses recursos tomados emprestados podem ser recuperados para priorizar os pods de inferência pendentes. Para ter mais informações, consulte Cluster Queue.

Estratégias de compartilhamento de recursos

Escolha entre duas abordagens de compartilhamento de cotas com base em seus requisitos:

  1. Controle estrito de recursos: desabilite o empréstimo e a tomada de empréstimo de cotas para garantir que a capacidade reservada de GPU esteja sempre disponível para suas workloads. Essa abordagem exige o dimensionamento de cotas grandes o suficiente para lidar de forma independente com picos de demanda e pode resultar em nós ociosos durante períodos de baixo tráfego.

  2. Compartilhamento flexível de recursos: habilite o empréstimo de cotas para usar recursos ociosos de outras equipes quando necessário. Os pods tomados emprestados são marcados como passíveis de preempção e podem ser removidos se a equipe que está emprestando reivindicar capacidade.

Intra-Team Preempção

Habilite a preempção dentro da equipe ao executar workloads mistas (avaliação, treinamento e inferência) sob a mesma cota. Isso permite que a Kueue antecipe trabalhos de baixa prioridade em sua equipe para acomodar pods de inferência de alta prioridade, garantindo que a inferência em tempo real possa ser executada sem depender do empréstimo de cotas externas. Para ter mais informações, consulte Preempção.

Exemplo de configuração de workload de inferência

O exemplo a seguir mostra como a Kueue gerencia os recursos de GPU em um cluster compartilhado da Amazon. SageMaker HyperPod

Configuração de clusters e configuração de políticas

Seu cluster tem a seguinte configuração:

  • Equipe A: cota de 10 GPUs P4

  • Equipe B: cota de 20 GPUs P4

  • Provisionamento estático: sem ajuste de escala automático

  • Capacidade total: 30 GPUs P4

O grupo compartilhado de GPU usa esta política de prioridade:

  1. Real-time inferência: Prioridade 100

  2. Treinamento: prioridade 75

  3. Avaliação: prioridade 50

O Kueue impõe cotas de equipe e classes prioritárias, com as opções de preempção e tomada de cotas emprestadas habilitadas.

Estado inicial: utilização normal do cluster

Em operações normais:

  • A Equipe A executa tarefas de treinamento e avaliação em todas as 10 GPUs P4.

  • A Equipe B executa inferência em tempo real (10 P4s) e avaliação (10 P4s) dentro de sua cota de 20 GPUs.

  • O cluster é totalmente utilizado com todas as tarefas admitidas e em execução.

Aumento de inferência: a Equipe B precisa de mais GPUs.

Quando a Equipe B experimenta um pico de tráfego, os pods de inferência adicionais exigem mais 5 GPUs P4. O Kueue detecta que os novos pods:

  • Estão dentro do namespace da Equipe B.

  • Têm prioridade 100 (inferência em tempo real).

  • Têm admissão pendente devido a restrições de cota.

O processo de resposta do Kueue escolhe entre duas opções:

Opção 1 (tomar cotas emprestadas): se a Equipe A usar apenas seis de suas dez P4s, o Kueue poderá admitir os pods da Equipe B usando as quatro P4s ociosas. No entanto, esses recursos tomados emprestados podem sofrer preempção. Se a Equipe A enviar trabalhos para atingir sua cota total, o Kueue removerá os pods de inferência tomados emprestados pela Equipe B.

Opção 2: Self-preemption (Recomendado) - A equipe B executa trabalhos de avaliação de baixa prioridade (prioridade 50). Quando os pods de inferência de alta prioridade estão aguardando, o Kueue impede os trabalhos de avaliação dentro da cota da Equipe B e admite os pods de inferência. Essa abordagem oferece uma alocação segura de recursos sem risco de remoção externa.

O Kueue segue um processo de três etapas para alocar recursos:

  1. Verificação de cota

    Pergunta: A Equipe B tem cota não utilizada?

    • Sim → Admita os pods.

    • Não → Prossiga para a Etapa 2.

  2. Self-preemption dentro da Equipe B

    Pergunta: Os trabalhos de menor prioridade da Equipe B podem ser impedidos?

    • Sim → Impeça trabalhos de avaliação (prioridade 50), libere cinco P4s e admita pods de inferência.

    • Não → Prossiga para a Etapa 3.

    Essa abordagem mantém as workloads dentro da cota garantida da Equipe B, evitando riscos de remoção externa.

  3. Tomar emprestado de outras equipes

    Pergunta: Existe uma cota ociosa que possa ser tomada emprestada de outras equipes?

    • Sim → Admita o uso da cota tomada emprestada (marcada como passível de preempção).

    • Não → O pod permanece no estado NotAdmitted.

Configurando a governança de tarefas para cargas de trabalho de inferência

Para integrar suas cargas de trabalho de inferência com o Kueue, adicione rótulos de governança de tarefas ao seu CRD ou ao seu CRD. InferenceEndpointConfig JumpStartModel Esses rótulos determinam quem LocalQueue recebe a carga de trabalho para o gerenciamento de cotas e definem a prioridade de agendamento usada nas decisões de preempção. As seções a seguir abordam os pré-requisitos, o escopo dos recursos, a configuração de rótulos e as etapas de verificação.

Pré-requisitos

Antes de configurar a governança de tarefas para cargas de trabalho de inferência, verifique se os seguintes recursos existem em seu cluster: HyperPod

  • O Kueue está instalado e em execução no seu cluster

  • A ClusterQueueexiste com a cota de GPU alocada para sua equipe

  • A LocalQueueexiste no namespace em que você planeja implantar seu endpoint de inferência

  • Um ou mais PriorityClassrecursos são definidos para tipos de carga de trabalho (como inferência, treinamento, avaliação)

Para verificar se esses recursos estão disponíveis, execute os seguintes comandos:

# Verify Kueue is installed kubectl get crd | grep kueue # List available PriorityClasses kubectl get priorityclass # List ClusterQueues kubectl get clusterqueue # List LocalQueues in your namespace kubectl get localqueue -n <your-namespace>

Entendendo o escopo dos recursos

Os recursos de governança de tarefas têm escopos diferentes que afetam a forma como você configura seus rótulos de implantação de inferência.

O kueue.x-k8s.io/queue-name rótulo deve fazer referência a um LocalQueue que exista no mesmo namespace que seu InferenceEndpointConfig ou. JumpStartModel Se nenhuma correspondência LocalQueue for encontrada nesse namespace, a carga de trabalho não será admitida pela Kueue.

ClusterQueue, ResourceFlavor, e PriorityClass têm escopo de cluster e podem ser acessados a partir de qualquer namespace.

Para verificar o escopo dos recursos em seu cluster:

kubectl api-resources | grep kueue

Adicionar rótulos de governança de tarefas

Para habilitar a governança de tarefas para sua implantação de inferência, adicione os seguintes rótulos à metadata seção do seu InferenceEndpointConfig ou do JumpStartModel CRD:

metadata: name: <your-deployment-name> namespace: <your-namespace> labels: kueue.x-k8s.io/queue-name: <your-localqueue-name> kueue.x-k8s.io/priority-class: <your-priority-class>

Descrições da etiqueta:

  • kueue.x-k8s.io/queue-name— Encaminha a carga de trabalho para a da sua equipe LocalQueue para rastreamento de cotas. Deve corresponder a um LocalQueue nome no mesmo namespace da carga de trabalho.

  • kueue.x-k8s.io/priority-class— Define a prioridade de agendamento para decisões de preempção. Referencia um cluster com escopo definido por nome PriorityClass .

Verificando a configuração da governança de tarefas

Depois de aplicar seu InferenceEndpointConfig ou JumpStartModel com rótulos de governança de tarefas, verifique se Kueue admitiu que a carga de trabalho e se os pods estão sendo programados corretamente.

Para verificar se a governança de tarefas está funcionando
  1. Verifique o status de admissão da carga de trabalho:

    kubectl get workloads -n <namespace>

    Uma carga de trabalho admitida com sucesso é exibida True na coluna ADMITIDO e lista ClusterQueue os recursos reservados na coluna RESERVADO EM.

  2. Verifique o status do pod:

    kubectl get pods -n <namespace>

    Após a admissão, os frutos passam gradualmente pelos estágios de inicialização até Running atingirem o estado.

  3. Verifique o consumo da cota:

    kubectl get clusterqueue <clusterqueue-name> -o yaml

    Revise a status seção para confirmar que o consumo de recursos está sendo monitorado.

  4. Verifique as cargas de trabalho LocalQueue pendentes:

    kubectl get localqueue -n <namespace>

    A coluna CARGAS DE TRABALHO PENDENTES mostra quantas cargas de trabalho estão aguardando admissão.

  5. Veja os eventos de admissão do Kueue:

    kubectl describe workload <workload-name> -n <namespace>

    Consulte a seção Eventos para ver as decisões de admissão e quaisquer erros.

Se os pods permanecerem no Pending estado, determine se o problema está no nível de admissão do Kueue (mostra a carga de trabalhoAdmitted: False) ou no nível do agendador do Kubernetes (carga de trabalho admitida, mas o pod não programável).