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: Jun 27, 2026

O compartilhamento de GPU permite que vários pods compartilhem os recursos de computação de uma única GPU, o que aumenta a utilização e reduz custos. Os containers na mesma GPU executam isoladamente entre si; assim, um container não pode exceder seus recursos alocados nem afetar outros containers.

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

Suporte a recursos por tipo de nó

Nós na nuvem e pools de nós de borda oferecem capacidades diferentes de compartilhamento de GPU. Escolha o caminho de configuração conforme o tipo de nó e os requisitos de isolamento.

Recurso

Nós na nuvem

Pools de nós de borda

Compartilhamento de GPU

Compatível

Compatível

Isolamento de memória da GPU

Compatível

Não compatível

Isolamento de poder de computação

Compatível

Não compatível

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

Pré-requisitos

Antes de começar, verifique se você tem:

Notas de uso

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

Não utilize nenhum dos métodos abaixo para solicitar recursos de GPU:

  • Executar aplicações com uso intenso 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 criação de imagens de 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. Consequentemente, a alocação real de recursos de GPU diverge do rastreamento do agendador, fazendo com que ele agende pods adicionais no mesmo nó. As aplicações passam a competir pela mesma GPU e algumas podem falhar ao iniciar devido à insuficiência de recursos. Tais 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 do conjunto de IA nativa da nuvem. Siga as etapas correspondentes ao seu estado atual de implantação.

Se o conjunto de IA nativa da nuvem não estiver implantado

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

  2. Na página Clusters, localize o cluster e clique em seu nome. 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 não houver requisitos para compartilhamento de poder de computação, use o padrão policy: 5. Para detalhes sobre as políticas compatíveis, consulte Instalar e usar 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 aparece com o estado Deployed na página Cloud-native AI Suite.

Se o conjunto de IA nativa da nuvem já estiver implantado

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

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

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

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

  5. Clique em OK.

Após a instalação do ack-ai-installer, seu estado muda para Deployed.

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

Pools de nós na nuvem

  1. Na página Clusters, localize o cluster e clique em seu nome. 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 principais parâmetros. 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 ACK para alterar o valor do rótulo. Essa ação 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 valores de rótulos.

    Parâmetro

    Descrição

    Expected nodes

    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 poder 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, localize o cluster e clique em seu nome. 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 Gerenciamento de pool de nós de borda. Para mais informações sobre rótulos de nós, consulte Rótulos para ativar políticas de agendamento de GPU.

Etapa 3: Adicionar nós acelerados por GPU

Nós na 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 arquitetura GPU-accelerated ao pool de nós na 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 Adicionar um nó acelerado por GPU.

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

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

  1. Baixe o kubectl-inspect-cgpu para um diretório em 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. Consulte 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 detalhes de alocação de GPU por pod, execute kubectl inspect cgpu -d.

Etapa 5: Implantar uma carga de trabalho de exemplo

Pools de nós na 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 solicite 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 solicite 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 na nuvem

  1. Faça login 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 nvidia-smi dentro do container para visualizar a memória visível para ele:

    • 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 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, localize o cluster e clique em seu nome. 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 compartilhamento de GPU, mas nã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 é regido 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 entre memória alocada e total da GPU é: 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:

Próximos passos

Referências