Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Exemplos de uso do compartilhamento de GPU para compartilhar GPUs

Última atualização: Jun 27, 2026

Este tópico descreve como implantar um arquivo YAML para criar containers que compartilham uma única GPU. Após a implantação, use o compartilhamento de GPU para isolar a memória de GPU alocada a cada container. Essa prática aumenta a utilização dos recursos de GPU.

Sumário

Pré-requisitos

O ack-ai-installer e a ferramenta de inspeção de GPU estão instalados.

Observações de uso

Em nós de GPU gerenciados em clusters do Container Service for Kubernetes (ACK), observe os seguintes pontos ao solicitar e utilizar recursos de GPU para aplicações.

  • Não execute aplicações com uso intenso de GPU diretamente nos nós.

  • Não utilize ferramentas como Docker, Podman ou nerdctl para criar containers e solicitar recursos de GPU. Por exemplo, não execute o comando docker run --gpus all ou docker run -e NVIDIA_VISIBLE_DEVICES=all para rodar aplicações que demandam muita GPU.

  • Não adicione a variável de ambiente NVIDIA_VISIBLE_DEVICES=all ou NVIDIA_VISIBLE_DEVICES=<GPU ID> na seção env do arquivo YAML do pod. Além disso, não use a variável de ambiente NVIDIA_VISIBLE_DEVICES para solicitar recursos de GPU aos pods e executar aplicações pesadas.

  • Caso a variável de ambiente NVIDIA_VISIBLE_DEVICES não esteja especificada no arquivo YAML do pod, não defina NVIDIA_VISIBLE_DEVICES=all nem execute aplicações com alto consumo de GPU durante a criação de imagens de container.

  • Não inclua privileged: true na seção securityContext do arquivo YAML do pod para executar aplicações que exigem muitos recursos de GPU.

O uso dos métodos acima para solicitar recursos de GPU pode gerar os seguintes riscos potenciais:

  • Se você solicitar recursos de GPU em um nó usando um desses métodos, mas não especificar os detalhes no registro de recursos de dispositivo do agendador, as informações reais de alocação de GPU poderão divergir desse registro. Nesse cenário, o agendador ainda poderá direcionar pods que solicitam esses recursos para o mesmo nó. Consequentemente, suas aplicações podem competir pelos recursos da mesma GPU, resultando em falhas de inicialização devido à insuficiência de recursos.

  • A adoção dessas práticas também pode causar outros problemas desconhecidos, como os problemas relatados pela comunidade NVIDIA.

Procedimento

  1. Execute o comando abaixo para consultar informações sobre o compartilhamento de GPU no seu cluster:

    kubectl inspect cgpu
    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.0.4  192.168.0.4  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
    Nota

    Para obter informações detalhadas sobre o compartilhamento de GPU, execute o comando kubectl inspect cgpu -d.

  2. Implante uma aplicação de exemplo com o compartilhamento de GPU ativado e solicite 3 GiB de memória de GPU para ela.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          containers:
          - name: gpu-share-sample
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                # The pod requests 3 GiB of GPU memory in total. 
                aliyun.com/gpu-mem: 3 # Specify the requested amount of GPU memory. 
            workingDir: /root
          restartPolicy: Never
  3. Execute o seguinte comando para verificar o uso de memória da GPU:

    kubectl inspect cgpu

    Saída esperada

    NAME                      IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-beijing.192.168.1.105  192.168.1.105  3/14                   3/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    3/14 (21%)

    A saída indica que o nó cn-beijing.192.168.1.105 possui um total de 14 GiB de memória de GPU, sendo 3 GiB já alocados.

Verificar o resultado

Siga estas etapas para confirmar se o isolamento de memória de GPU está ativo no nó.

  1. Faça login no nó mestre de destino.

  2. Execute o comando abaixo para visualizar os logs da aplicação e confirmar que o isolamento de memória do cGPU está habilitado.

    kubectl logs gpu-share-sample --tail=1

    Saída esperada:

    2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)

    Essa saída mostra que o container solicitou 2.832 MB de memória de GPU.

  3. Execute o comando a seguir para acessar o container e verificar a quantidade total de memória de GPU alocada a ele.

    kubectl exec -it gpu-share-sample nvidia-smi

    Saída esperada:

    Mon Aug 7 08:52:18 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   41C    P0    26W /  70W |   3043MiB /  3231MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    O resultado confirma que este container recebeu uma alocação total de 3.231 MiB de memória de GPU.

  4. Acesse o nó de GPU que executa a aplicação de exemplo e verifique a memória total de GPU disponível no nó.

    nvidia-smi

    Saída esperada:

    Mon Aug  7 09:18:26 2023 
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   40C    P0    26W /  70W |   3053MiB / 15079MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      8796      C   python3                                     3043MiB |
    +-----------------------------------------------------------------------------+
    
                            

    A saída revela que o nó host dispõe de 15.079 MiB de memória de GPU no total, dos quais 3.053 MiB foram alocados ao container.