Por padrão, o agendador aloca recursos de GPU preenchendo uma GPU em um nó antes de passar para a próxima. Essa abordagem ajuda a evitar a fragmentação da memória da GPU. No entanto, em alguns cenários, pode ser necessário distribuir Pods entre várias GPUs para minimizar o impacto nas cargas de trabalho caso uma única GPU falhe. Este tópico descreve como configurar a política de seleção de GPU para compartilhamento de GPU.
Pré-requisitos
Como funciona
Ao usar o compartilhamento de GPU em um nó com várias GPUs, escolha entre duas políticas para alocar GPUs aos Pods:
Binpack: (Padrão) O agendador preenche uma GPU em um nó antes de alocar recursos de outra. Essa estratégia evita a fragmentação da memória da GPU.
Spread: O agendador distribui os Pods da forma mais uniforme possível entre todas as GPUs disponíveis em um nó. Esse método minimiza a quantidade de cargas de trabalho afetadas se uma única GPU falhar.
O exemplo a seguir mostra um nó com duas GPUs, cada uma com 15 GiB de memória de GPU. O Pod1 solicita 2 GiB de memória de GPU e o Pod2 solicita 3 GiB.
Procedimento
A política de seleção de GPU padrão para um nó é Binpack. Para utilizar a política Spread no compartilhamento de GPU, siga estas etapas.
Etapa 1: Crie um node pool
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha .
Na página Node Pools, clique em Create Node Pool no canto superior direito.
-
Na página Create Node Pool, defina os parâmetros e clique em Confirm. A tabela a seguir descreve os principais parâmetros. Para obter informações sobre outros parâmetros, consulte Crie e gerencie um node pool.
Parâmetro
Descrição
Instance type
Em Architecture, selecione GPU-accelerated instance e escolha um tipo de instância.
A política
Spreadsó é efetiva em nós com múltiplas GPUs. Selecione um tipo de instância com mais de uma GPU.Expected nodes
Especifique o número inicial de nós no node pool. Defina como 0 caso não deseje criar nós imediatamente.
Node label
Clique em
para adicionar os dois rótulos seguintes:-
Defina Key como
ack.node.gpu.schedulee Value comocgpu. Isso ativa o compartilhamento de GPU e o isolamento de memória da GPU. -
Defina Key como
ack.node.gpu.placemente Value comospread. Isso habilita a políticaSpreadpara o nó.
-
Etapa 2: Envie um job
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
No canto superior direito da página, clique em Create from YAML. Copie o conteúdo YAML abaixo para o editor Template, modifique-o conforme indicado nos comentários e clique em Create.
Descrição do arquivo YAML:
Este arquivo YAML define um Job que utiliza o exemplo TensorFlow MNIST. O Job cria três Pods, e cada Pod solicita 4 GiB de memória de GPU.
Um Pod solicita 4 GiB de memória de GPU ao definir
aliyun.com/gpu-mem: 4na seçãoresources.limitsda especificação do Pod.Para observar o efeito em um único nó, o arquivo YAML adiciona um
nodeSelector,kubernetes.io/hostname: <NODE_NAME>, para agendar os Pods em um nó específico.
Etapa 3: Verifique a política Spread
Use a ferramenta de inspeção de GPU para consultar a alocação de recursos de GPU no nó:
kubectl inspect cgpu
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU2(Allocated/Total) GPU3(Allocated/Total) GPU Memory(GiB)
cn-shanghai.192.0.2.109 192.0.2.109 4/15 4/15 0/15 4/15 12/60
--------------------------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
12/60 (20%)
A saída indica que os três Pods foram agendados em GPUs diferentes no mesmo nó. Isso confirma que a política Spread está em vigor.