En esta página, se describe cómo habilitar y administrar cargas de trabajo de unidades de procesamiento gráfico (GPU) en Google Distributed Cloud connected. Para aprovechar esta funcionalidad, debes tener una configuración de hardware conectado de Distributed Cloud que contenga GPUs. La compatibilidad con la GPU está inhabilitada de forma predeterminada. Debes habilitar explícitamente la compatibilidad con GPU en tu clúster conectado de Distributed Cloud. Ten en cuenta que los servidores de Distributed Cloud no admiten cargas de trabajo de GPU.
Para planificar y solicitar una configuración de este tipo, elige la configuración 2 en los siguientes documentos:
Si tu rack conectado a Distributed Cloud incluye GPUs, puedes configurar tus cargas de trabajo conectadas a Distributed Cloud para que usen recursos de GPU.
Las cargas de trabajo conectadas a Distributed Cloud pueden ejecutarse en contenedores y en máquinas virtuales:
Cargas de trabajo de GPU que se ejecutan en contenedores. Cuando habilitas la compatibilidad con GPU, todos los recursos de GPU en tu clúster conectado de Distributed Cloud se asignan inicialmente a las cargas de trabajo que se ejecutan en contenedores. El controlador de GPU para ejecutar cargas de trabajo en contenedores basadas en GPU se incluye en Distributed Cloud Connected. Dentro de cada contenedor, las bibliotecas de GPU se activan en
/opt/nvidia.Cargas de trabajo de GPU que se ejecutan en máquinas virtuales Para ejecutar una carga de trabajo basada en GPU en una máquina virtual, debes asignar recursos de GPU en el nodo conectado de Distributed Cloud de destino a las máquinas virtuales, como se describe más adelante en esta página. Si lo haces, se omitirá el controlador de GPU integrado y se pasarán las GPUs directamente a las máquinas virtuales. Debes instalar manualmente un controlador de GPU compatible en el sistema operativo invitado de cada máquina virtual. También debes proteger todas las licencias necesarias para ejecutar controladores de GPU especializados en tus máquinas virtuales.
Para confirmar que hay GPUs en un nodo conectado de Distributed Cloud, verifica que el nodo tenga la etiqueta vm.cluster.gke.io.gpu=true. Si la etiqueta no está presente en el nodo, significa que no hay GPUs instaladas en la máquina física conectada a Distributed Cloud correspondiente.
Habilita la compatibilidad con la GPU
Para habilitar la compatibilidad con GPU para tus cargas de trabajo, debes crear o modificar el recurso personalizado VMRuntime que contiene el parámetro enableGPU con su valor establecido en true y, luego, aplicarlo a tu clúster conectado de Distributed Cloud.
Por ejemplo:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable GPU support enableGPU: true
Según el tipo de clúster en el que quieras habilitar VM Runtime en el subsistema de máquina virtual de GDC, realiza una de las siguientes acciones:
- En el caso de los clústeres del plano de control de Cloud en los que aún no habilitaste el subsistema de máquina virtual del entorno de ejecución de VM en GDC, debes crear el recurso
VMRuntimede forma manual. - En el caso de los clústeres del plano de control de Cloud en los que ya habilitaste el subsistema de máquina virtual del entorno de ejecución de VM en GDC, debes editar el recurso
VMRuntimeexistente. - En el caso de los clústeres con plano de control local, debes editar el recurso
VMRuntimeexistente.
Este mismo recurso VMRuntime también configura la compatibilidad del entorno de ejecución de VM en GDC en tu clúster con el parámetro enable. Asegúrate de configurar los dos parámetros según las necesidades de tu carga de trabajo. No es necesario que habilites el tiempo de ejecución de VM en la asistencia de GDC para habilitar la compatibilidad con GPU en tu clúster conectado de Distributed Cloud.
En la siguiente tabla, se describen los parámetros de configuración disponibles.
Valor enable |
Valor enableGPU |
Configuración resultante |
|---|---|---|
false |
false |
Las cargas de trabajo solo se ejecutan en contenedores y no pueden usar recursos de GPU. |
false |
true |
Las cargas de trabajo solo se ejecutan en contenedores y pueden usar recursos de GPU. |
true |
true |
Las cargas de trabajo se pueden ejecutar en máquinas virtuales y en contenedores. Ambos tipos de cargas de trabajo pueden usar recursos de GPU. |
true |
false |
Las cargas de trabajo se pueden ejecutar en máquinas virtuales y en contenedores. Ninguno de los dos tipos de cargas de trabajo puede usar recursos de GPU. |
Verifica que se haya habilitado la compatibilidad con la GPU
Para verificar que se haya habilitado la compatibilidad con GPU en tu clúster, usa el siguiente comando:
kubectl get pods --namespace vm-system
El comando muestra un resultado similar al siguiente ejemplo:
NAME READY STATUS RESTARTS AGE
...
gpu-controller-controller-manager-vbv4w 2/2 Running 0 31h
kubevirt-gpu-dp-daemonset-gxj7g 1/1 Running 0 31h
nvidia-gpu-dp-daemonset-bq2vj 1/1 Running 0 31h
...
En el resultado, puedes verificar que los Pods del controlador de GPU se hayan implementado y se estén ejecutando en el espacio de nombres vm-system.
Asigna recursos de GPU
De forma predeterminada, cuando habilitas la compatibilidad con GPU en tu clúster conectado de Distributed Cloud, todos los recursos de GPU en cada nodo del clúster se asignan a cargas de trabajo alojadas en contenedores. Para personalizar la asignación de recursos de GPU en cada nodo, completa los pasos de esta sección.
Configura la asignación de recursos de GPU
Para asignar recursos de GPU en un nodo conectado de Distributed Cloud, usa el siguiente comando para editar el recurso personalizado
GPUAllocationen el nodo de destino:kubectl edit gpuallocation NODE_NAME --namespace vm-system
Reemplaza
NODE_NAMEpor el nombre del nodo de Distributed Cloud de destino.En el siguiente ejemplo, el resultado del comando muestra la asignación de recursos de GPU predeterminada de fábrica. De forma predeterminada, todos los recursos de GPU se asignan a cargas de trabajo alojadas en contenedores (
pod), y no se asignan recursos de GPU a cargas de trabajo de máquina virtual (vm):... spec: pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloadsEstablece las asignaciones de recursos de GPU de la siguiente manera:
- Para asignar un recurso de GPU a cargas de trabajo en contenedores, aumenta el valor del campo
pody disminuye el valor del campovmen la misma cantidad. - Para asignar un recurso de GPU a las cargas de trabajo de la máquina virtual, aumenta el valor del campo
vmy disminuye el valor del campopoden la misma cantidad.
La cantidad total de recursos de GPU asignados no debe exceder la cantidad de GPU instaladas en la máquina física conectada a Distributed Cloud en la que se ejecuta el nodo. De lo contrario, el nodo rechazará la asignación no válida.
En el siguiente ejemplo, se reasignaron dos recursos de GPU de cargas de trabajo en contenedores (
pod) a cargas de trabajo de máquina virtual (vm):... spec: pod: 0 # Number of GPUs allocated for container workloads vm: 2 # Number of GPUs allocated for VM workloadsCuando termines, aplica el recurso
GPUAllocationmodificado a tu clúster y espera a que su estado cambie aAllocationFulfilled.- Para asignar un recurso de GPU a cargas de trabajo en contenedores, aumenta el valor del campo
Verifica la asignación de recursos de GPU
Para verificar la asignación de recursos de GPU, usa el siguiente comando:
kubectl describe gpuallocations NODE_NAME --namespace vm-system
Reemplaza
NODE_NAMEpor el nombre del nodo conectado de Distributed Cloud de destino.El comando muestra un resultado similar al siguiente ejemplo:
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: Tesla T4 Events: <none>
Configura un contenedor para que use recursos de GPU
Para configurar un contenedor que se ejecuta en Distributed Cloud Connected para usar recursos de GPU, configura su especificación como se muestra en el siguiente ejemplo y, luego, aplícala a tu clúster:
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: nvidia.com/gpu-pod-TESLA_T4: 2 limits: nvidia.com/gpu-pod-TESLA_T4: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
Reemplaza lo siguiente:
CUDA_TOOLKIT_IMAGE: Es la ruta de acceso completa y el nombre de la imagen del kit de herramientas de NVIDIA CUDA. La versión del kit de herramientas de CUDA debe coincidir con la versión del controlador de NVIDIA que se ejecuta en tu clúster conectado de Distributed Cloud. Para determinar la versión de tu controlador NVIDIA, consulta las notas de la versión de Distributed Cloud. Para encontrar la versión del kit de herramientas de CUDA que coincida, consulta Compatibilidad con CUDA.NODE_NAME: Es el nombre del nodo conectado de Distributed Cloud de destino.
Configura una máquina virtual para usar recursos de GPU
Para configurar una máquina virtual que se ejecuta en Distributed Cloud Connected para usar recursos de GPU, configura su especificación de recursos VirtualMachine como se muestra en el siguiente ejemplo y, luego, aplícala a tu clúster:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2
¿Qué sigue?
- Administra máquinas virtuales
- Implementa cargas de trabajo
- Administrar máquinas
- Administrar clústeres