Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

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:

    1. 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
    2. 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 && ..."
    3. 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

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.

Figura 1 Uso de GPU

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