Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use the shared GPU scheduling feature in an ACK Edge cluster

Última atualização: Nov 03, 2026

O compartilhamento de GPU permite que vários pods compartilhem os recursos de computação de uma única GPU, melhorando a utilização da GPU e reduzindo custos. Os containers em uma mesma GPU são executados isoladamente, impedindo que um container exceda seus recursos alocados e afete os demais.

Este tópico descreve como ativar o compartilhamento de GPU em um cluster ACK Edge.

Suporte a recursos por tipo de nó

Os nós de nuvem e os pools de nós de borda suportam diferentes capacidades de compartilhamento de GPU. Escolha o caminho de configuração com base no seu tipo de nó e nos requisitos de isolamento.

Recurso

Nós de nuvem

Pools de nós de borda

Compartilhamento de GPU

Suportado

Suportado

Isolamento de memória da GPU

Suportado

Não suportado

Isolamento de capacidade de computação

Suportado

Não suportado

Os pools de nós de borda suportam apenas o compartilhamento de GPU. O isolamento de memória e de capacidade de computação não estão disponíveis para nós de borda. Se suas cargas de trabalho exigirem isolamento de memória ou de capacidade de computação, use nós de nuvem.

Pré-requisitos

Antes de começar, certifique-se de ter:

Notas de uso

Para nós de GPU gerenciados em clusters ACK, siga estas regras ao solicitar e usar recursos de GPU.

Não use nenhum dos métodos a seguir para solicitar recursos de GPU:

  • Executar aplicações com uso intensivo de GPU diretamente nos nós

  • Usar Docker, Podman ou nerdctl para criar containers com solicitações de GPU — por exemplo, docker run --gpus all ou docker run -e NVIDIA_VISIBLE_DEVICES=all

  • Adicionar NVIDIA_VISIBLE_DEVICES=all ou NVIDIA_VISIBLE_DEVICES=<GPU ID> à seção env de um arquivo YAML de pod

  • Definir NVIDIA_VISIBLE_DEVICES=all durante a compilação da imagem do container quando NVIDIA_VISIBLE_DEVICES não estiver especificado no YAML do pod

  • Adicionar privileged: true à seção securityContext de um arquivo YAML de pod

Esses métodos ignoram o registro de recursos de dispositivo do agendador. Como resultado, a alocação real de recursos de GPU diverge do que o agendador rastreia, fazendo com que ele agende pods adicionais para o mesmo nó. Isso faz com que as aplicações compitam pela mesma GPU, e algumas podem falhar ao iniciar por insuficiência de recursos de GPU. Esses métodos também podem desencadear outros problemas desconhecidos, como aqueles relatados pela comunidade NVIDIA.

Etapa 1: Instale o componente de compartilhamento de GPU

O componente de compartilhamento de GPU (ack-ai-installer) faz parte da suíte de IA nativa da nuvem. Siga as etapas de acordo com o estado atual da sua implantação.

Se a suíte de IA nativa da nuvem não estiver implantada

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, encontre o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Applications > Cloud-native AI Suite.

  3. Na página Cloud-native AI Suite, clique em Deploy.

  4. Na página Deploy Cloud-native AI Suite, selecione Scheduling Policy Extension (Batch Task Scheduling, GPU Sharing, Topology-aware GPU Scheduling).

  5. (Opcional) Clique em Advanced ao lado do componente. No painel Parameters, modifique o parâmetro policy do cGPU e clique em OK. Se você não tiver requisitos para compartilhamento de capacidade de computação, use o padrão policy: 5. Para detalhes sobre as políticas suportadas, consulte Instalar e usar o cGPU em um container Docker.2.jpg

  6. Na parte inferior da página, clique em Deploy Cloud-native AI Suite.

Após a conclusão da implantação, o ack-ai-installer aparecerá com o estado Deployed na página Cloud-native AI Suite.

Se a suíte de IA nativa da nuvem já estiver implantada

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, encontre o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Applications > Cloud-native AI Suite.

  3. Encontre o ack-ai-installer e clique em Deploy na coluna Actions.

  4. (Opcional) No painel Parameters, modifique o parâmetro policy do cGPU. Se você não tiver requisitos para compartilhamento de capacidade de computação, use o padrão policy: 5. Para detalhes sobre as políticas suportadas, consulte Instalar e usar o cGPU em um container Docker.2.jpg

  5. Clique em OK.

Após a instalação do ack-ai-installer, o estado dele mudará para Deployed.

Etapa 2: Crie um pool de nós de GPU

Pools de nós de nuvem

  1. Na página Clusters, encontre o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Nodes > Node Pools.

  2. No canto superior direito da página Node Pools, clique em Create Node Pool.

  3. Na caixa de diálogo Create Node Pool, configure os parâmetros e clique em Confirm Order. A tabela a seguir descreve os parâmetros principais. Para outros parâmetros, consulte Criar e gerenciar um pool de nós.

    Importante

    Após adicionar o rótulo de compartilhamento de GPU a um nó, não use kubectl label nodes ou o recurso de gerenciamento de rótulos no console do ACK para alterar o valor do rótulo. Fazer isso pode causar problemas de agendamento. Configure o compartilhamento de GPU no nível do pool de nós. Para detalhes, consulte Configurar políticas de agendamento de GPU para pools de nós e Problemas que podem ocorrer se você alterar os valores dos rótulos.

    Parâmetro

    Descrição

    Expected nodes

    O número inicial de nós. Defina como 0 para criar um pool de nós vazio.

    Node label

    Clique no ícone Node Label, defina Key como ack.node.gpu.schedule e defina Value como cgpu. Este rótulo ativa o compartilhamento de GPU com isolamento de memória da GPU e compartilhamento de capacidade de computação — os pods no nó solicitam apenas memória da GPU, e vários pods podem compartilhar a mesma GPU. Para mais informações, consulte Rótulos para ativar políticas de agendamento de GPU.

Pools de nós de borda

  1. Na página Clusters, encontre o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Nodes > Node Pools.

  2. Na página Node Pools, clique em Create Node Pool.

  3. Na caixa de diálogo Create Node Pool, configure os parâmetros e clique em Confirm Order. Na seção Node Labels, clique no ícone Node Label, defina Key como ack.node.gpu.schedule e defina Value como share. Este rótulo ativa o compartilhamento de GPU. Para outros parâmetros, consulte Edge node pool management. Para mais informações sobre rótulos de nó, consulte Labels for enabling GPU scheduling policies.

Etapa 3: Adicione nós acelerados por GPU

Nós de nuvem

Ignore esta etapa se você já adicionou nós acelerados por GPU ao criar o pool de nós.

Adicione instâncias ECS com a arquitetura GPU-accelerated ao pool de nós de nuvem. Para mais informações, consulte Adicionar instâncias ECS existentes ou Criar e gerenciar um pool de nós.

Nós de borda

Para mais informações, consulte Add a GPU-accelerated node.

Etapa 4: Instale a ferramenta de inspeção de GPU (apenas nós de nuvem)

Use o kubectl-inspect-cgpu para inspecionar a alocação de memória da GPU em todo o cluster. Esta etapa se aplica apenas aos nós de nuvem.

  1. Baixe o kubectl-inspect-cgpu para um diretório no seu PATH. Este exemplo usa /usr/local/bin/.

    • Linux: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu ``

    • macOS: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu ``

  2. Conceda permissões de execução:

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. Verifique o uso de GPU em todo o cluster:

    kubectl inspect cgpu

    Saída esperada:

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

    Para visualizar os detalhes de alocação de GPU por pod, execute kubectl inspect cgpu -d.

Etapa 5: Implante uma carga de trabalho de exemplo

Pools de nós de nuvem

  1. Verifique a alocação atual de memória da GPU:

    kubectl inspect cgpu

    Saída esperada:

    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%)
  2. Implante um Job de exemplo que solicita 3 GiB de memória da GPU. Substitua npxxxxxxxxxxxxxx pelo ID do seu pool de nós.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          nodeSelector:
            alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Replace with your node pool ID
          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:
                aliyun.com/gpu-mem: 3 # GPU memory to request, in GiB
            workingDir: /root
          restartPolicy: Never

    O campo aliyun.com/gpu-mem especifica a quantidade de memória da GPU em GiB. Por exemplo, 3 solicita 3 GiB de memória da GPU compartilhada.

Pools de nós de borda

Implante um Job de exemplo que solicita 4 GiB de memória da GPU. Substitua npxxxxxxxxxxxxxx pelo ID do seu pool de nós de borda.

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist-share
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist-share
    spec:
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # Replace with your edge node pool ID
      containers:
      - name: tensorflow-mnist-share
        image: registry.cn-beijing.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:
            aliyun.com/gpu-mem: 4 # GPU memory to request, in GiB
        workingDir: /root
      restartPolicy: Never

Etapa 6: Verifique os resultados

Pools de nós de nuvem

  1. Faça logon no plano de controle.

  2. Exiba a última linha de log do pod para confirmar que o isolamento de memória da GPU está ativo:

    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)

    A saída indica que o container solicitou 2.832 MiB de memória da GPU.

  3. Execute o nvidia-smi dentro do container para visualizar a memória visível ao container:

    • 3043MiB / 3231MiB — o container vê apenas 3.231 MiB (aproximadamente 3 GiB), e não a memória total da GPU. Isso confirma que o isolamento de memória da GPU está funcionando.

    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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Considerações importantes:

  4. Execute o nvidia-smi no nó para visualizar a memória total da GPU:

    • 15079MiB — memória total da GPU no nó (a Tesla T4 completa)

    • 3053MiB / 15079MiB — o container ocupa 3.053 MiB de um total de 15.079 MiB, deixando a memória restante disponível para que outros pods compartilhem a mesma GPU

    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 |
    +-----------------------------------------------------------------------------+

    Considerações importantes:

Pools de nós de borda

  1. Na página Clusters, encontre o cluster e clique no nome dele. No painel de navegação à esquerda, escolha Workloads > Pods.

  2. Na coluna Actions do seu pod (por exemplo, tensorflow-mnist-multigpu-*), clique em Terminal** e execute:

    • 16384MiB — o pod vê a memória total da GPU (V100 SXM2, 16 GiB). Os pools de nós de borda suportam o compartilhamento de GPU, mas não o isolamento de memória da GPU, portanto, a visão do pod não se restringe aos 4 GiB solicitados.

    • O uso real de memória da GPU pelo pod é controlado por variáveis de ambiente definidas automaticamente pelo componente de compartilhamento de GPU: `` ALIYUN_COM_GPU_MEM_CONTAINER=4 # GPU memory the pod is allocated (GiB) ALIYUN_COM_GPU_MEM_DEV=16 # Total memory of the physical GPU (GiB) ``

    • A proporção da memória da GPU alocada em relação ao total é: 4 / 16 = 0.25 (25%)

    nvidia-smi

    Saída esperada:

    Wed Jun 14 06:45:56 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   35C    P0    59W / 300W |    334MiB / 16384MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    Considerações importantes:

O que fazer a seguir

Referências