Todos os produtos
Search
Central de documentação

:Monitore e isole recursos de GPU

Última atualização: Jun 27, 2026

O Container Service for Kubernetes (ACK) permite instalar o plug-in gerenciado do Prometheus para monitorar recursos de GPU. A solução cGPU possibilita agendar várias aplicações em uma única GPU e isolar a memória e o poder de computação alocados a cada aplicação. Este tópico descreve como monitorar o uso de memória da GPU de um cluster com o plug-in gerenciado do Prometheus e como isolar a memória da GPU com o cGPU.

Cenários

Este tópico aplica-se a clusters Kubernetes dedicados e profissionais com o cGPU ativado.

Pré-requisitos

Informações básicas

O desenvolvimento de IA depende de alto poder de computação, grandes volumes de dados e algoritmos otimizados. As GPUs da NVIDIA oferecem técnicas comuns de computação heterogênea, base do aprendizado profundo de alto desempenho. Como o custo das GPUs é elevado, destinar uma GPU exclusiva para cada aplicação em cenários de previsão de modelos pode desperdiçar recursos de computação. O compartilhamento de GPU melhora a utilização dos recursos. É fundamental planejar como obter a maior taxa de consultas com o menor custo possível e garantir o cumprimento do acordo de nível de serviço (SLA) da aplicação.

Use o plug-in gerenciado do Prometheus para monitorar GPUs dedicadas

  1. Faça login no console do ARMS.

  2. No painel de navegação à esquerda, clique em Prometheus Monitoring.

  3. Na página Prometheus Monitoring, selecione a região onde o cluster está implantado e clique em Install na coluna Actions.

  4. Na mensagem de Confirmation, clique em OK.

    A instalação do plug-in do Prometheus leva cerca de 2 minutos. Após a conclusão, ele aparecerá na coluna

    Installed Dashboards

    .

  5. Implante a aplicação de exemplo abaixo via CLI. Para mais informações, consulte Criar uma carga de trabalho sem estado (Deployment).

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: app-3g-v1
      labels:
        app: app-3g-v1
    spec:
      replicas: 1
      serviceName: "app-3g-v1"
      podManagementPolicy: "Parallel"
      selector: # define how the deployment finds the pods it manages
        matchLabels:
          app: app-3g-v1
      updateStrategy:
        type: RollingUpdate
      template: # define the pods specifications
        metadata:
          labels:
            app: app-3g-v1
        spec:
          containers:
          - name: app-3g-v1
            image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - cuda_malloc
            - -size=4096
            resources:
              limits:
                nvidia.com/gpu: 1

    Após implantar a aplicação, execute o comando abaixo para consultar seu status. A saída indica que o nome da aplicação é app-3g-v1-0.

    kubectl get pod

    Saída esperada:

    NAME          READY   STATUS    RESTARTS   AGE
    app-3g-v1-0   1/1     Running   1          2m56s
  6. Localize e clique no cluster onde a aplicação está implantada. Na página Dashboards, clique em GPU APP na coluna Name.

    A figura a seguir mostra que a aplicação utiliza apenas 20% da memória da GPU, indicando desperdício de 80%. A memória total da GPU é de aproximadamente 16 GB, mas o uso se estabiliza em cerca de 3,4 GB. Alocar uma GPU inteira para cada aplicação resulta em grande desperdício de recursos. Para melhorar a utilização, use o cGPU e compartilhe uma única GPU entre várias aplicações.

    GPU memory usage

Compartilhe uma GPU entre vários contêineres

  1. Adicione rótulos aos nós acelerados por GPU.

    1. Faça login no Console de Gerenciamento do Container Service.

    2. No painel de navegação à esquerda, clique em Cluster.

    3. Na página Cluster List, clique no nome do cluster desejado ou em Application Management na coluna Actions.

    4. No painel de navegação à esquerda da página de gerenciamento do cluster, escolha Nodes > Nodes.

    5. Na página Nodes, clique em Manage Labels and Taints no canto superior direito.

    6. Na página Manage Labels and Taints, selecione os nós que deseja gerenciar e clique em Add Label.

    7. Na caixa de diálogo Add, defina Name como cgpu, defina Value como true e clique em OK.

      Importante

      Se um nó worker receber o rótulo

      cgpu=true

      , o recurso de GPU

      nvidia.com/gpu

      deixará de ser exclusivo para os pods nesse nó worker. Para desativar o cGPU no nó worker, defina o valor de

      cgpu

      como

      false

      . Isso torna o recurso de GPU

      nvidia.com/gpu

      exclusivo novamente para os pods no nó worker.

  2. Instale o componente cGPU.

    1. Faça login no Console de Gerenciamento do Container Service.

    2. No painel de navegação à esquerda, escolha Marketplace > .

    3. Na página App Catalog, pesquise por ack-cgpu e clique nele quando aparecer.

    4. Na seção Deploy, no lado direito da página, selecione o cluster criado, escolha o namespace onde deseja implantar o ack-cgpu e clique em Create.

    5. Faça login em um nó mestre e execute o comando abaixo para consultar os recursos de GPU.

      Para mais informações, consulte Conectar-se a um cluster ACK usando kubectl.

      kubectl inspect cgpu

      Saída esperada:

      NAME                       IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
      cn-hangzhou.192.168.2.167  192.168.2.167  0/15                   0/15
      ----------------------------------------------------------------------
      Allocated/Total GPU Memory In Cluster:
      0/15 (0%)
      Nota

      A saída indica que os recursos de GPU foram alternados de unidades de GPU para memória de GPU.

  3. Implante cargas de trabalho que compartilhem recursos de GPU.

    1. Modifique o arquivo YAML usado para implantar a aplicação de exemplo.

      • Altere o número de réplicas de pods de 1 para 2. Isso permite implantar dois pods para executar a aplicação. Antes de ativar o cGPU, a GPU era exclusiva para o único pod. Após ativar o cGPU, a GPU passa a ser compartilhada entre dois pods.

      • Substitua o tipo de recurso de nvidia.com/gpu para aliyun.com/gpu-mem. A unidade dos recursos de GPU passa a ser GB.

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: app-3g-v1
        labels:
          app: app-3g-v1
      spec:
        replicas: 2
        serviceName: "app-3g-v1"
        podManagementPolicy: "Parallel"
        selector: # define how the deployment finds the pods it manages
          matchLabels:
            app: app-3g-v1
        template: # define the pods specifications
          metadata:
            labels:
              app: app-3g-v1
          spec:
            containers:
            - name: app-3g-v1
              image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
              command:
              - cuda_malloc
              - -size=4096
              resources:
                limits:
                  aliyun.com/gpu-mem: 4   # Each pod requests 4 GB of GPU memory. Two replicated pods are configured. Therefore, a total of 8 GB of GPU memory is requested by the application.
    2. Recrie as cargas de trabalho com base nas configurações modificadas.

      A saída indica que os dois pods foram agendados no mesmo nó acelerado por GPU.

      kubectl inspect cgpu -d

      Saída esperada:

      NAME:       cn-hangzhou.192.168.2.167
      IPADDRESS:  192.168.2.167
      
      NAME         NAMESPACE  GPU0(Allocated)
      app-3g-v1-0  default    4
      app-3g-v1-1  default    4
      Allocated :  8 (53%)
      Total :      15
      --------------------------------------------------------
      
      Allocated/Total GPU Memory In Cluster:  8/15 (53%)
    3. Execute o comando abaixo para fazer login nos dois contêineres, um por vez.

      A saída mostra que o limite de memória da GPU é de 4.301 MiB, ou seja, cada contêiner pode usar no máximo 4.301 MiB de memória da GPU.

      • Execute o comando a seguir para fazer login no contêiner app-3g-v1-0:

        kubectl exec -it app-3g-v1-0 nvidia-smi

        Saída esperada:

        Mon Apr 13 01:33:10 2020
        +-----------------------------------------------------------------------------+
        | 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 V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
        | N/A   37C    P0    57W / 300W |   3193MiB /  4301MiB |      0%      Default |
        +-------------------------------+----------------------+----------------------+
        
        +-----------------------------------------------------------------------------+
        | Processes:                                                       GPU Memory |
        |  GPU       PID   Type   Process name                             Usage      |
        |=============================================================================|
        +-----------------------------------------------------------------------------+
      • Execute o comando a seguir para fazer login no contêiner app-3g-v1-1:

        kubectl exec -it app-3g-v1-1 nvidia-smi

        Saída esperada:

        Mon Apr 13 01:36:07 2020
        +-----------------------------------------------------------------------------+
        | 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 V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
        | N/A   38C    P0    57W / 300W |   3193MiB /  4301MiB |      0%      Default |
        +-------------------------------+----------------------+----------------------+
        
        +-----------------------------------------------------------------------------+
        | Processes:                                                       GPU Memory |
        |  GPU       PID   Type   Process name                             Usage      |
        |=============================================================================|
        +-----------------------------------------------------------------------------+
    4. Faça login no nó acelerado por GPU para verificar o uso da GPU.

      A saída indica que o uso total de memória da GPU é de 6.396 MiB, correspondente à soma da memória usada pelos dois contêineres. Isso demonstra que o cGPU isolou a memória da GPU entre os contêineres. Se você fizer login em um contêiner e solicitar mais recursos de GPU, um erro de alocação de memória será relatado.

      1. Execute o comando abaixo para fazer login em um nó acelerado por GPU:

        kubectl exec -it app-3g-v1-1 bash
      2. Execute o comando a seguir para consultar o uso da GPU:

        cuda_malloc -size=1024

        Saída esperada:

        gpu_cuda_malloc starting...
        Detected 1 CUDA Capable device(s)
        
        Device 0: "Tesla V100-SXM2-16GB"
          CUDA Driver Version / Runtime Version          10.1 / 10.1
          Total amount of global memory:                 4301 MBytes (4509925376 bytes)
        Try to malloc 1024 MBytes memory on GPU 0
        CUDA error at cgpu_cuda_malloc.cu:119 code=2(cudaErrorMemoryAllocation) "cudaMalloc( (void**)&dev_c, malloc_size)"

É possível monitorar o uso de GPU de cada aplicação ou nó no

ou no

console do ARMS

.

  • GPU APP: Visualize a quantidade e a porcentagem de memória da GPU utilizada por cada aplicação.

    GPU App

  • GPU Node: Acompanhe o uso de memória de cada GPU individualmente.

    GPU node

Use o plug-in gerenciado do Prometheus para monitorar o compartilhamento de GPU

Caso a quantidade de memória da GPU solicitada por uma aplicação exceda o limite superior, o módulo de isolamento de memória do cGPU impede que outras aplicações sejam afetadas.

  1. Implante uma nova aplicação que utilize a GPU compartilhada.

    A aplicação solicita 4 GB de memória da GPU, mas o uso real de memória chega a 6 GB.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: app-6g-v1
      labels:
        app: app-6g-v1
    spec:
      replicas: 1
      serviceName: "app-6g-v1"
      podManagementPolicy: "Parallel"
      selector: # define how the deployment finds the pods it manages
        matchLabels:
          app: app-6g-v1
      template: # define the pods specifications
        metadata:
          labels:
            app: app-6g-v1
        spec:
          containers:
          - name: app-6g-v1
            image: registry.cn-shanghai.aliyuncs.com/tensorflow-samples/cuda-malloc:6G
            resources:
              limits:
                aliyun.com/gpu-mem: 4 # Each pod requests 4 GB of GPU memory. One replicated pod is configured for the application. Therefore, a total of 4 GB of GPU memory is requested by the application.
  2. Execute o comando abaixo para consultar o status do pod.

    O pod que executa a nova aplicação permanece no estado

    CrashLoopBackOff

    . Os dois pods existentes continuam funcionando normalmente.

    kubectl get pod

    Saída esperada:

    NAME          READY   STATUS             RESTARTS   AGE
    app-3g-v1-0   1/1     Running            0          7h35m
    app-3g-v1-1   1/1     Running            0          7h35m
    app-6g-v1-0   0/1     CrashLoopBackOff   5          3m15s
  3. Execute o comando a seguir para verificar erros no log do contêiner.

    A saída indica que ocorreu um erro cudaErrorMemoryAllocation.

    kubectl logs app-6g-v1-0

    Saída esperada:

    CUDA error at cgpu_cuda_malloc.cu:119 code=2(cudaErrorMemoryAllocation) "cudaMalloc( (void**)&dev_c, malloc_size)"
  4. Utilize o painel GPU APP fornecido pelo plug-in gerenciado do Prometheus para visualizar o status dos contêineres.

    A figura a seguir mostra que os contêineres existentes não foram afetados após a implantação da nova aplicação.

    Memory isolation details in the GPU APP dashboard