É possível ativar e gerenciar recursos de unidade de processamento gráfico (GPU) nos contêineres. Por exemplo, talvez você prefira executar notebooks de inteligência artificial (IA) e machine learning (ML) em um ambiente de GPU. Para executar cargas de trabalho de contêineres de GPU, é necessário ter um cluster do Kubernetes que ofereça suporte a dispositivos de GPU. O suporte a GPU é ativado por padrão para clusters do Kubernetes que têm máquinas de GPU provisionadas para eles.
Este documento é destinado a desenvolvedores de aplicativos no grupo de operadores de aplicativos responsáveis por criar cargas de trabalho de aplicativos para a organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.
Antes de começar
Para concluir as tarefas neste documento, peça as permissões necessárias e prepare seu ambiente.
Solicitar papéis do IAM
Você precisa ter papéis específicos para receber as permissões necessárias para implantar GPUs nos contêineres. Os papéis necessários dependem de você estar trabalhando em um cluster compartilhado no escopo da organização ou em um cluster padrão no escopo do projeto. Para mais informações, consulte Configurações de cluster do Kubernetes.
Funções compartilhadas do cluster
Para verificar pools de nós compatíveis com GPU e implantar cargas de trabalho de GPU em um cluster compartilhado, solicite as seguintes funções com base na tarefa a ser realizada:
- Administrador do cluster de usuário (
user-cluster-admin): crie, exclua, edite ou visualize os recursos de um cluster compartilhado hospedado no servidor da API de gerenciamento. Essa função permite verificar GPUs no cluster compartilhado e não está vinculada ao namespace do projeto. - Administrador de namespace (
namespace-admin): crie, exclua, edite ou visualize os recursos de um cluster compartilhado hospedado no projeto. Com essa função, é possível implantar cargas de trabalho de GPU em um cluster padrão, e ela está vinculada ao namespace do projeto.
Funções padrão do cluster
Para verificar pools de nós compatíveis com GPU e implantar cargas de trabalho de GPU em um cluster padrão, peça ao administrador do IAM do projeto para conceder a você os seguintes papéis:
- Administrador do cluster padrão (
standard-cluster-admin): crie, exclua, edite ou veja os recursos de um cluster padrão hospedado no servidor da API de gerenciamento. Com essa função, é possível verificar GPUs no cluster compartilhado, e ela está vinculada ao namespace do projeto. - Desenvolvedor de cluster (
cluster-developer): crie, exclua, edite ou veja um cluster padrão. Com essa função, você pode implantar cargas de trabalho de GPU em um cluster padrão ao fornecer acesso às APIs do plano de dados hospedadas no cluster padrão. Essa função está vinculada ao namespace do projeto.
Preparar o ambiente
Para configurar um contêiner para usar recursos de GPU, verifique se você tem os seguintes recursos:
Um cluster do Kubernetes com uma classe de máquina de GPU. Para mais informações, consulte a seção placas de GPU compatíveis.
Localize o nome do cluster do Kubernetes ou pergunte a um membro do grupo de administradores da plataforma.
Faça login e gere o arquivo kubeconfig do cluster do Kubernetes.
Use o caminho kubeconfig do cluster do Kubernetes para substituir
KUBERNETES_CLUSTER_KUBECONFIGnestas instruções.Faça login e gere o arquivo kubeconfig para o servidor da API de gerenciamento zonal que hospeda seu cluster do Kubernetes. Use esse caminho para substituir
MANAGEMENT_API_SERVERnestas instruções.Faça login e gere o arquivo kubeconfig para o cluster de infraestrutura da organização na zona destinada a hospedar suas GPUs.
Configurar um contêiner para usar recursos de GPU
Para usar essas GPUs em um contêiner, siga estas etapas:
Verifique se o cluster do Kubernetes tem pools de nós que oferecem suporte a GPUs:
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERSubstitua:
KUBERNETES_CLUSTER_NAME: o nome do cluster.KUBERNETES_CLUSTER_NAMESPACE: o namespace do cluster. Para clusters compartilhados, use o namespaceplatform. Para clusters padrão, use o namespace do projeto do cluster.MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal em que o cluster do Kubernetes está hospedado. Se você ainda não gerou um arquivo kubeconfig para o servidor da API na zona de destino, consulte Fazer login.
A saída relevante é semelhante ao seguinte snippet:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.Para uma lista completa de tipos de máquina com GPU e perfis de GPU de várias instâncias (MIG) compatíveis, consulte Tipos de máquina de nós de cluster.
Adicione os campos
.containers.resources.requestse.containers.resources.limitsà especificação do contêiner. Cada nome de recurso é diferente dependendo da classe da máquina. Verifique sua alocação de recursos de GPU para encontrar os nomes dos recursos de GPU.Por exemplo, a especificação de contêiner a seguir solicita três partições de uma GPU de um nó
a2-ultragpu-1g-gdc:# Several lines of code are omitted here. containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 # Several lines of code are omitted here.Os contêineres também exigem permissões adicionais para acessar GPUs. Para cada contêiner que solicita GPUs, adicione as seguintes permissões à especificação do contêiner:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.Aplique o arquivo de manifesto do contêiner:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSubstitua:
CONTAINER_MANIFEST_FILE: o arquivo de manifesto YAML para sua carga de trabalho de contêiner.KUBERNETES_CLUSTER_NAMESPACE: o namespace do cluster. Para clusters compartilhados, use o namespaceplatform. Para clusters padrão, use o namespace do projeto do cluster.KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.
Verificar a alocação de recursos da GPU
Para verificar a alocação de recursos da GPU, use o seguinte comando:
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGSubstitua:
NODE_NAME: o nó que gerencia as GPUs que você quer inspecionar.KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.
A saída relevante é semelhante ao seguinte snippet:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
Anote os nomes dos recursos das GPUs. Eles precisam ser especificados ao configurar um contêiner para usar recursos de GPU.