É possível ativar e gerenciar recursos de unidade de processamento gráfico (GPU) nos seus contêineres. Por exemplo, talvez você prefira executar notebooks de inteligência artificial (IA) e machine learning (ML) em um ambiente de GPU. O suporte a GPU é ativado por padrão no dispositivo com isolamento físico do Google Distributed Cloud (GDC).
Antes de começar
Para implantar GPUs nos contêineres, você precisa ter o seguinte:
A função de administrador de namespace (
namespace-admin
) para implantar cargas de trabalho de GPU no namespace do projeto.O caminho do kubeconfig para o cluster do Kubernetes bare metal. Faça login e gere o arquivo kubeconfig se você não tiver um.
Configurar um contêiner para usar recursos de GPU
Para usar GPUs em um contêiner, siga estas etapas:
Confirme se os nós do cluster do Kubernetes oferecem suporte à alocação de recursos de GPU:
kubectl describe nodes NODE_NAME
Substitua
NODE_NAME
pelo nó que gerencia as GPUs que você quer inspecionar.A saída relevante é semelhante ao seguinte snippet:
Capacity: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Allocatable: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
Adicione os campos
.containers.resources.requests
e.containers.resources.limits
à especificação do contêiner. Como o cluster do Kubernetes já está pré-configurado com máquinas de GPU, a configuração é a mesma para todas as cargas de trabalho:... containers: - name: CONTAINER_NAME image: CONTAINER_IMAGE resources: requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 ...
Substitua:
CONTAINER_NAME
: o nome do contêiner.CONTAINER_IMAGE
: a imagem do contêiner para acessar as máquinas de GPU. É preciso incluir o caminho e a versão do registro de contêiner da imagem, comoREGISTRY_PATH/hello-app:1.0
.
Os contêineres também exigem permissões extras para acessar GPUs. Para cada contêiner que solicita GPUs, adicione as seguintes permissões à especificação do contêiner:
... securityContext: seLinuxOptions: type: unconfined_t ...
Aplique o arquivo de manifesto do contêiner:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIG
Substitua:
CONTAINER_MANIFEST_FILE
: o arquivo YAML do recurso personalizado da carga de trabalho do contêiner.NAMESPACE
: o namespace do projeto em que as cargas de trabalho de contêiner serão implantadas.CLUSTER_KUBECONFIG
: o arquivo kubeconfig do cluster do Kubernetes bare metal em que você está implantando cargas de trabalho de contêiner.
Verifique se os pods estão em execução e usando as GPUs:
kubectl get pods -A | grep CONTAINER_NAME \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIG
A saída relevante é semelhante ao seguinte snippet:
Port: 80/TCP Host Port: 0/TCP State: Running Ready: True Restart Count: 0 Limits: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1 Requests: nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1