Programación de GPU
Puede utilizar GPU en los contenedores de CCE.
Requisitos previos
- Se ha creado un nodo de GPU. Para obtener más información, véase Creación de un nodo.
- Se ha instalado gpu-device-plugin (complemento origianl de gpu-beta). Durante la instalación, seleccione el controlador de GPU en el nodo. Para obtener más información, véase gpu-device-plugin (anteriormente gpu-beta).
- gpu-device-plugin monta el directorio del controlador en /usr/local/nvidia/lib64. Para usar recursos de GPU en un contenedor debe agregar /usr/local/nvidia/lib64 a la variable de entorno LD_LIBRARY_PATH.
Por lo general, puede utilizar cualquiera de los siguientes métodos para agregar un archivo:
- Configure la variable de entorno LD_LIBRARY_PATH en el Dockerfile utilizado para crear una imagen. (Recomendado)
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64:$LD_LIBRARY_PATH
- Configure la variable de entorno LD_LIBRARY_PATH en el comando del inicio de imagen.
/bin/bash -c "export LD_LIBRARY_PATH=/usr/local/nvidia/lib64:$LD_LIBRARY_PATH && ..."
- Defina la variable de entorno LD_LIBRARY_PATH al crear una carga de trabajo. (Asegúrese de que esta variable no está configurada en el contenedor. De lo contrario, se sobrescribirá.)
env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
- Configure la variable de entorno LD_LIBRARY_PATH en el Dockerfile utilizado para crear una imagen. (Recomendado)
Uso de GPU
Cree una carga de trabajo y solicite GPU. Puede especificar el número de GPU de la siguiente manera:
apiVersion: apps/v1 kind: Deployment metadata: name: gpu-test namespace: default spec: replicas: 1 selector: matchLabels: app: gpu-test template: metadata: labels: app: gpu-test spec: containers: - image: nginx:perl name: container-0 resources: requests: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # Number of requested GPUs limits: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # Maximum number of GPUs that can be used imagePullSecrets: - name: default-secret
nvidia.com/gpu especifica el número de las GPU que se van a solicitar. El valor puede ser inferior a 1. Por ejemplo, nvidia.com/gpu: 0.5 indica que varios pods comparten una GPU. En este caso, todos los recursos de GPU solicitados provienen de la misma tarjeta de GPU.
Después de especificar nvidia.com/gpu, las cargas de trabajo no se programarán en nodos sin GPU. Si el nodo está exento de GPU, se reportan eventos de Kubernetes similares a los siguientes:
- 0/2 nodes are available: 2 Insufficient nvidia.com/gpu.
- 0/4 nodes are available: 1 InsufficientResourceOnSingleGPU, 3 Insufficient nvidia.com/gpu.
Para usar GPU en la consola de CCE, seleccione la cuota de GPU y especifique el porcentaje de GPU reservado para el contenedor al crear una carga de trabajo.
Etiquetas de nodo de GPU
CCE etiquetará los nodos habilitados para GPU después de que se creen. Diferentes tipos de nodos habilitados para GPU tienen diferentes etiquetas.
$ kubectl get node -L accelerator NAME STATUS ROLES AGE VERSION ACCELERATOR 10.100.2.179 Ready <none> 8m43s v1.19.10-r0-CCE21.11.1.B006-21.11.1.B006 nvidia-t4
Al utilizar las GPU, puede habilitar la afinidad entre los pods y los nodos en función de las etiquetas para que los pods se puedan programar en los nodos correctos.
apiVersion: apps/v1 kind: Deployment metadata: name: gpu-test namespace: default spec: replicas: 1 selector: matchLabels: app: gpu-test template: metadata: labels: app: gpu-test spec: nodeSelector: accelerator: nvidia-t4 containers: - image: nginx:perl name: container-0 resources: requests: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # Number of requested GPUs limits: cpu: 250m memory: 512Mi nvidia.com/gpu: 1 # Maximum number of GPUs that can be used imagePullSecrets: - name: default-secret