Esta página descreve como gerenciar cargas de trabalho da unidade de processamento gráfico (GPU) no Google Distributed Cloud Connected. Para aproveitar essa funcionalidade, você precisa ter uma configuração de hardware conectado do Distributed Cloud que contenha GPUs. Para mais informações, consulte Planejar a configuração de hardware.
As cargas de trabalho conectadas do Distributed Cloud podem ser executadas em contêineres e em máquinas virtuais:
Cargas de trabalho de GPU executadas em contêineres. Todos os recursos de GPU no cluster conectado do Distributed Cloud são inicialmente alocados para cargas de trabalho em execução em contêineres. O driver de GPU para executar cargas de trabalho em contêineres baseadas em GPU está incluído no Distributed Cloud Connected. Em cada contêiner, as bibliotecas de GPU são montadas em
/opt/nvidia.Cargas de trabalho de GPU em execução em máquinas virtuais. Para executar uma carga de trabalho baseada em GPU em uma máquina virtual, aloque recursos de GPU no nó conectado do Distributed Cloud de destino para máquinas virtuais, conforme descrito mais adiante nesta página. Isso ignora o driver de GPU integrado e passa as GPUs diretamente para as máquinas virtuais. É necessário instalar manualmente um driver de GPU compatível no sistema operacional convidado de cada máquina virtual. Você também precisa proteger todas as licenças necessárias para executar drivers de GPU especializados nas máquinas virtuais.
Para confirmar se há GPUs em um nó conectado do Distributed Cloud, verifique se o nó tem o rótulo vm.cluster.gke.io.gpu=true. Se o rótulo não estiver presente no nó, não haverá GPUs instaladas na máquina física conectada do Distributed Cloud correspondente.
Alocar recursos de GPU
Por padrão, todos os recursos de GPU em cada nó do cluster são alocados para cargas de trabalho conteinerizadas. Para personalizar a alocação de recursos de GPU em cada nó, siga as etapas desta seção.
Configurar a alocação de recursos de GPU
Para alocar recursos de GPU em um nó conectado do Distributed Cloud, use o comando a seguir para editar o recurso personalizado
GPUAllocationno nó de destino:kubectl edit gpuallocation NODE_NAME --namespace vm-system
Substitua
NODE_NAMEpelo nome do nó de destino do Distributed Cloud.No exemplo a seguir, a saída do comando mostra a alocação de recursos da GPU padrão de fábrica. Por padrão, todos os recursos de GPU são alocados para cargas de trabalho conteinerizadas (
pod), e nenhum recurso de GPU é alocado para cargas de trabalho de máquina virtual (vm):... spec: pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloadsDefina as alocações de recursos de GPU da seguinte maneira:
- Para alocar um recurso de GPU a cargas de trabalho em contêineres, aumente o valor do campo
pode diminua o valor do campovmna mesma quantidade. - Para alocar um recurso de GPU a cargas de trabalho máquina virtual, aumente o valor do campo
vme diminua o valor do campopodna mesma quantidade.
O número total de recursos de GPU alocados não pode exceder o número de GPUs instaladas na máquina física conectada ao Distributed Cloud em que o nó é executado. Caso contrário, o nó rejeita a alocação inválida.
No exemplo a seguir, dois recursos de GPU foram realocados de cargas de trabalho em contêineres (
pod) para cargas de trabalho de máquina virtual (vm):... spec: pod: 0 # Number of GPUs allocated for container workloads vm: 2 # Number of GPUs allocated for VM workloadsQuando terminar, aplique o recurso
GPUAllocationmodificado ao cluster e aguarde a mudança de status paraAllocationFulfilled.- Para alocar um recurso de GPU a cargas de trabalho em contêineres, aumente o valor do campo
Verificar a alocação de recursos da GPU
Para verificar a alocação de recursos da GPU, use o seguinte comando:
kubectl describe gpuallocations NODE_NAME --namespace vm-system
Substitua
NODE_NAMEpelo nome do nó conectado do Distributed Cloud de destino.O comando retorna uma saída semelhante a este exemplo:
Name: mynode1 ... spec: node: mynode1 pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloads Status: Allocated: true Conditions: Last Transition Time: 2022-09-23T03:14:10Z Message: Observed Generation: 1 Reason: AllocationFulfilled Status: True Type: AllocationStatus Last Transition Time: 2022-09-23T03:14:16Z Message: Observed Generation: 1 Reason: DeviceStateUpdated Status: True Type: DeviceStateUpdated Consumption: pod: 0/2 # Number of GPUs currently consumed by container workloads vm: 0/0 # Number of GPUs currently consumed by VM workloads Device Model: NVIDIA L4 Events: <none>
Configurar um contêiner para usar recursos de GPU
Para configurar um contêiner em execução no Distributed Cloud conectado para usar recursos de GPU, configure a especificação dele conforme mostrado no exemplo a seguir e aplique ao cluster:
apiVersion: v1 kind: Pod metadata: name: my-gpu-pod spec: containers: - name: my-gpu-container image: CUDA_TOOLKIT_IMAGE command: ["/bin/bash", "-c", "--"] args: ["while true; do sleep 600; done;"] env: resources: requests: GPU_MODEL: 2 limits: GPU_MODEL: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
Substitua:
CUDA_TOOLKIT_IMAGE: o caminho completo e o nome da imagem do kit de ferramentas NVIDIA CUDA. A versão do kit de ferramentas CUDA precisa corresponder à versão do driver NVIDIA em execução no cluster conectado do Distributed Cloud. Para determinar a versão do driver NVIDIA, consulte as Notas da versão do Distributed Cloud. Para encontrar a versão correspondente do kit de ferramentas CUDA, consulte Compatibilidade com CUDA.NODE_NAME: o nome do nó de destino do Distributed Cloud Connected.GPU_MODEL: o modelo de GPU NVIDIA instalado na máquina conectada do Distributed Cloud de destino. Nesta versão, o único valor compatível énvidia.com/gpu-pod-NVIDIA_L4para a GPU NVIDIA L4.
Configurar uma máquina virtual para usar recursos de GPU
Para configurar uma máquina virtual em execução no
Distributed Cloud conectado para usar recursos de GPU, configure a especificação de recursos VirtualMachine, conforme mostrado no exemplo a seguir, e aplique ao cluster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: GPU_MODEL quantity: 2
Substitua:
GPU_MODEL: o modelo de GPU NVIDIA instalado na máquina conectada do Distributed Cloud de destino. Nesta versão, o único valor compatível énvidia.com/gpu-pod-NVIDIA_L4para a GPU NVIDIA L4.