O Container Service for Kubernetes (ACK) oferece suporte ao agendamento e à operação de GPUs. O modo padrão de uso de GPU segue o padrão da comunidade upstream do Kubernetes. Este tópico demonstra como implantar uma carga de trabalho de exemplo do TensorFlow para validar o agendamento de GPU.
Pré-requisitos
Verifique se você possui:
Um cluster ACK com pelo menos um nó de GPU
kubectl configurado para se conectar ao cluster
Acesso ao console do ACK
Evite contornar as solicitações padrão de recursos de GPU
Em nós de GPU gerenciados pelo ACK, solicite recursos de GPU exclusivamente por meio do mecanismo padrão de recursos estendidos do Kubernetes (nvidia.com/gpu em resources.limits). As ações a seguir ignoram esse mecanismo e representam riscos de segurança:
Executar aplicações de GPU diretamente nos nós
Utilizar
docker,podmanounerdctlpara criar containers ou solicitar recursos de GPU (por exemplo,docker run --gpus alloudocker run -e NVIDIA_VISIBLE_DEVICES=all)Adicionar
NVIDIA_VISIBLE_DEVICES=allouNVIDIA_VISIBLE_DEVICES=<GPU ID>à seçãoenvdo arquivo YAML de um podUsar a variável de ambiente
NVIDIA_VISIBLE_DEVICESpara solicitar recursos de GPU para um podDefina
NVIDIA_VISIBLE_DEVICEScomoallna imagem do container quando não estiver definido no YAML do podConfigurar
privileged: truenosecurityContextdo pod e executar um programa de GPU
Por que isso é importante: Solicitações de GPU fora do padrão são invisíveis ao rastreamento de recursos do agendador. Essa incompatibilidade pode fazer com que o agendador aloque GPUs em excesso em um nó, resultando em múltiplos pods disputando a mesma placa de GPU (por exemplo, competindo por memória de GPU) e causando falhas na carga de trabalho. Esses métodos também podem acionar erros conhecidos relatados pela comunidade NVIDIA.
Verifique a disponibilidade de GPU
Antes de implantar uma carga de trabalho, confirme se o seu nó de GPU expõe a capacidade de GPU ao agendador do Kubernetes.
-
Liste os nós no cluster:
kubectl get nodes -
Descreva um nó de GPU para verificar sua capacidade:
kubectl describe node <gpu-node-name>Na seção Capacity,
nvidia.com/gpudeve exibir um valor diferente de zero:Capacity: nvidia.com/gpu: 1Se
nvidia.com/gpuestiver ausente ou exibir0, o plugin de dispositivo NVIDIA pode não estar em execução no nó. Verifique a implantação do DaemonSet do plugin, os drivers de GPU e a configuração do nó antes de prosseguir.
Implantar uma aplicação de GPU
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no cluster desejado. No painel de navegação à esquerda, escolha Workloads > Deployments.
-
Na página Deployments, clique em Create from YAML e cole este manifesto:
apiVersion: v1 kind: Pod metadata: name: tensorflow-mnist namespace: default spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: nvidia.com/gpu: 1 # Request one GPU card for this container. workingDir: /root restartPolicy: AlwaysRecursos estendidos de GPU exigem apenas
limits, e nãorequests. O Kubernetes não permiterequestssem umlimitscorrespondente para recursos estendidos. O agendador utiliza o valor delimitscomo a solicitação efetiva. No painel de navegação à esquerda, escolha Workloads > Pods. Localize e clique em no pod.
-
Clique em na aba Logs. O download da imagem e a inicialização do pod podem levar alguns minutos. Após a execução, a saída do log confirma que o agendamento de GPU está funcionando corretamente.

Próximos passos
Para direcionar tipos específicos de GPU em um cluster heterogêneo, utilize rótulos e seletores de nó. Rotule os nós de GPU por tipo de acelerador (por exemplo,
kubectl label nodes <node-name> accelerator=<gpu-model>) e adicione umnodeSelectorà especificação do seu pod.Para opções avançadas de agendamento de GPU, como compartilhamento e isolamento de GPU, consulte a documentação de agendamento de GPU do ACK.