Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Agendamento de GPU padrão no Kubernetes

Você pode usar GPUs em contêineres do CCE.

Pré-requisitos

  • Um nó de GPU foi criado. Para mais detalhes, consulte Criação de um nó.
  • O gpu-device-plugin (anteriormente complemento gpu-beta) foi instalado. Durante a instalação, selecione o driver da GPU no nó. Para mais detalhes, consulte Suíte IA do CCE (GPU NVIDIA).
  • gpu-device-plugin monta o diretório do driver para /usr/local/nvidia/lib64. Para usar recursos de GPU em um contêiner, adicione /usr/local/nvidia/lib64 à variável de ambiente LD_LIBRARY_PATH.

    Geralmente, você pode usar qualquer um dos seguintes métodos para adicionar um arquivo:

    1. Configure a variável de ambiente LD_LIBRARY_PATH no Dockerfile usada para criar uma imagem. (Recomendado)
      ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64:$LD_LIBRARY_PATH
    2. Configure a variável de ambiente LD_LIBRARY_PATH no comando de inicialização da imagem.
      /bin/bash -c "export LD_LIBRARY_PATH=/usr/local/nvidia/lib64:$LD_LIBRARY_PATH && ..."
    3. Defina a variável de ambiente LD_LIBRARY_PATH ao criar uma carga de trabalho. (Certifique-se de que essa variável não esteja configurada no contêiner. Caso contrário, será sobrescrito.)
                env:
                  - name: LD_LIBRARY_PATH
                    value: /usr/local/nvidia/lib64

Usar GPUs

Crie uma carga de trabalho e solicite GPUs. Você pode especificar o número de GPUs da seguinte forma:

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 o número de GPUs a serem solicitadas. O valor pode ser inferior a 1. Por exemplo, nvidia.com/gpu: 0.5 indica que vários pods compartilham uma GPU. Nesse caso, todos os recursos de GPU solicitados vêm da mesma placa de GPU.

Quando você usa nvidia.com/gpu para especificar o número de GPUs, os valores de solicitações e limites devem ser os mesmos.

Depois que nvidia.com/gpu for especificado, as cargas de trabalho não serão agendadas para nós sem GPUs. Se o nó estiver carente de GPU, serão relatados eventos do Kubernetes semelhantes aos seguintes:

  • 0/2 nodes are available: 2 Insufficient nvidia.com/gpu.
  • 0/4 nodes are available: 1 InsufficientResourceOnSingleGPU, 3 Insufficient nvidia.com/gpu.

Para usar GPUs no console do CCE, selecione a cota de GPU e especifique a porcentagem de GPUs reservada para o contêiner ao criar uma carga de trabalho.

Figura 1 Usar GPUs

Rótulos de nó de GPU

O CCE rotulará os nós habilitados para GPU depois que eles forem criados. Diferentes tipos de nós habilitados para GPU têm rótulos diferentes.

$ 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

Ao usar GPUs, você pode ativar a afinidade entre pods e nós com base em rótulos para que os pods possam ser agendados para os nós corretos.

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