Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Aloque poder de computação por meio do agendamento de GPU compartilhada

Última atualização: Jun 27, 2026

O cGPU permite que vários pods compartilhem uma única GPU física em clusters ACK Pro ao isolar a memória da GPU e o poder de computação no nível de software. Este tópico mostra como criar um node pool com alocação de poder de computação ativada, verificar a configuração e implantar uma carga de trabalho que utilize ambos os recursos.

Pré-requisitos

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

  • Um cluster ACK Pro executando Kubernetes 1.20 ou posterior. Para mais informações, consulte Criar um cluster gerenciado pelo ACK.

  • Uma versão do kube-scheduler compatível com a versão do seu cluster. Para obter a lista completa de recursos suportados por cada versão do kube-scheduler, consulte kube-scheduler.

    Versão do cluster ACK

    Versão do scheduler

    1.28

    1.28.1-aliyun-5.6-998282b9 ou posterior

    1.26

    v1.26.3-aliyun-4.1-a520c096 ou posterior

    1.24

    1.24.3-ack-2.0 ou posterior

    1.22

    1.22.15-ack-2.0 ou posterior

    1.20

    1.20.4-ack-8.0 ou posterior

  • O add-on de compartilhamento de GPU instalado com uma versão do chart Helm superior a 1.2.0. Para mais informações, consulte Gerenciar o componente de compartilhamento de GPU.

  • O cGPU 1.0.5 ou posterior instalado. Para mais informações, consulte Atualizar a versão do cGPU em um nó.

Limitações

  • Não há suporte para mistura de tipos de jobs no mesmo nó. O compartilhamento de GPU suporta dois tipos de jobs: os que solicitam apenas memória da GPU e os que solicitam tanto memória da GPU quanto poder de computação. Não é possível executar ambos os tipos no mesmo nó simultaneamente. Essa restrição existe porque o cGPU utiliza isolamento no nível de software, e não no nível de hardware (como MIG).

  • Os valores de poder de computação devem ser múltiplos de 5, com mínimo de 5. A escala varia de 0 a 100, onde 100 representa 100% do poder de computação de uma GPU. Por exemplo, um valor de 20 significa que o pod utiliza 20% do poder de computação da GPU. Se o valor especificado não for múltiplo de 5, o job não poderá ser enviado.

  • A rotulagem direta de nós não suporta alocação de poder de computação. Para ativar o isolamento de poder de computação em nós acelerados por GPU existentes, remova-os primeiro do cluster e adicione-os a um node pool compatível com esse isolamento. Executar kubectl label nodes <NODE_NAME> ack.node.gpu.schedule=core_mem diretamente nos nós existentes não funciona.

  • Disponível apenas em regiões específicas. A alocação de poder de computação está disponível nas seguintes regiões:

    Região

    ID da região

    China (Pequim)

    cn-beijing

    China (Xangai)

    cn-shanghai

    China (Hangzhou)

    cn-hangzhou

    China (Zhangjiakou)

    cn-zhangjiakou

    China (Shenzhen)

    cn-shenzhen

    China (Chengdu)

    cn-chengdu

    China (Heyuan)

    cn-heyuan

    China (Hong Kong)

    cn-hongkong

    Indonésia (Jacarta)

    ap-southeast-5

    Singapura

    ap-southeast-1

    Tailândia (Bangkok)

    ap-southeast-7

    EUA (Virgínia)

    us-east-1

    EUA (Vale do Silício)

    us-west-1

    Japão (Tóquio)

    ap-northeast-1

    China East 2 Finance

    cn-shanghai-finance-1

  • Clusters criados antes de 1º de março de 2022 exigem atualização manual do scheduler. Clusters criados em ou após 1º de março de 2022 usam automaticamente a versão do scheduler compatível com alocação de poder de computação. Para clusters mais antigos, siga estas etapas:

    1. Envie um ticket para solicitar acesso à visualização privada do agendamento de GPU compartilhada.

    2. Se a versão instalada do chart Helm de compartilhamento de GPU for 1.2.0 ou anterior, desinstale-o: a. Faça login no console ACK. No painel de navegação à esquerda, clique em console ACKconsole ACKClusters. b. Clique no nome do cluster. No painel de navegação à esquerda, escolha Applications > Helm. c. Na página Helm, localize ack-ai-installer e clique em Delete na coluna Actions. Na caixa de diálogo Delete, clique em OK.

    3. Instale o componente de compartilhamento de GPU mais recente. Para mais informações, consulte Gerenciar o componente de compartilhamento de GPU.

Etapa 1: Criar um node pool com alocação de poder de computação

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

  2. Clique no nome do cluster. No painel de navegação à esquerda, escolha Nodes > Node Pools.

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

  4. Configure o node pool com as definições a seguir. Para todos os outros parâmetros, consulte Criar e gerenciar um node pool. Em Node Labels, adicione estes dois rótulos:

    Parâmetro

    Descrição

    Node Pool Name

    Nome para o node pool. Este tópico usa gpu-core como exemplo.

    Expected Nodes

    Número inicial de nós. Defina como 0 se não quiser criar nós imediatamente.

    ECS Tags

    Rótulos para adicionar às instâncias do Elastic Compute Service (ECS) no node pool.

    Node Labels

    Rótulos para adicionar aos nós. Configure ambos os rótulos a seguir. Para mais informações, consulte Rótulos para ativar políticas de agendamento de GPU.

    Chave

    Valor

    Finalidade

    ack.node.gpu.schedule

    core_mem

    Ativa o isolamento de memória da GPU e o isolamento de poder de computação no nó.

    ack.node.gpu.placement

    binpack

    Utiliza o algoritmo binpack para consolidar pods no menor número possível de GPUs, maximizando a utilização da GPU.

Etapa 2: Verificar se os nós do node pool têm alocação de poder de computação ativada

Execute o comando a seguir para verificar se a alocação de poder de computação está ativada em um nó:

kubectl get nodes <NODE_NAME> -o yaml

Procure o campo aliyun.com/gpu-core.percentage nas seções allocatable e capacity da saída. Sua presença confirma que a alocação de poder de computação está ativa.

Saída esperada para um nó com 4 GPUs (cada uma com 15 GiB de memória):

# Irrelevant fields are omitted.
status:
  allocatable:
    # 4 GPUs x 100% = 400 total computing power units
    aliyun.com/gpu-core.percentage: "400"
    aliyun.com/gpu-count: "4"
    # 4 GPUs x 15 GiB = 60 GiB total GPU memory
    aliyun.com/gpu-mem: "60"
  capacity:
    aliyun.com/gpu-core.percentage: "400"
    aliyun.com/gpu-count: "4"
    aliyun.com/gpu-mem: "60"

Etapa 3: Implantar uma carga de trabalho com limites de poder de computação

Sem a alocação de poder de computação, um pod pode usar 100% do poder de computação de uma GPU e todos os 15 GiB de sua memória. Após ativar esse recurso, defina limites explícitos para ambos os recursos.

O exemplo a seguir implanta um job que solicita 2 GiB de memória da GPU e 30% de poder de computação.

  1. Crie um arquivo chamado cuda-sample.yaml com o seguinte conteúdo:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: cuda-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: cuda-sample
        spec:
          containers:
          - name: cuda-sample
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
            command:
            - bash
            - run.sh
            - --num_batches=500000000
            - --batch_size=8
            resources:
              limits:
                aliyun.com/gpu-mem: 2                 # GPU memory in GiB
                aliyun.com/gpu-core.percentage: 30    # Percentage of GPU computing power; must be a multiple of 5
            workingDir: /root
          restartPolicy: Never

    Principais parâmetros de recursos:

    Parâmetro

    Valor

    Descrição

    aliyun.com/gpu-mem

    2

    Memória da GPU em GiB. O pod pode usar até 2 GiB.

    aliyun.com/gpu-core.percentage

    30

    Percentual de poder de computação da GPU. Deve ser múltiplo de 5; 30 significa 30%.

  2. Implante o job:

    kubectl apply -f /tmp/cuda-sample.yaml
    A imagem é grande. O download inicial pode levar vários minutos.
  3. Verifique se o job está em execução:

    kubectl get po -l app=cuda-sample

    Saída esperada:

    NAME                READY   STATUS    RESTARTS   AGE
    cuda-sample-m****   1/1     Running   0          15s

    O status Running na coluna STATUS confirma que o pod está ativo.

  4. Verifique a memória da GPU e o poder de computação usados pelo pod:

    kubectl exec -ti cuda-sample-m**** -- nvidia-smi

    Saída esperada:

    Thu Dec 16 02:53:22 2021
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 450.102.04   Driver Version: 450.102.04   CUDA Version: 11.0     |
    |-------------------------------+----------------------+----------------------+
    | 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:08.0 Off |                    0 |
    | N/A   33C    P0    56W / 300W |    337MiB /  2154MiB |     30%      Default |
    |                               |                      |                  N/A |
    +-----------------------------------------------------------------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    A saída confirma a aplicação do isolamento:

    • Memória da GPU: O pod está limitado a 2.154 MiB (aproximadamente 2 GiB), reduzido dos 15 GiB completos disponíveis antes da ativação do recurso. O uso atual é de 337 MiB.

    • Poder de computação: O pod está limitado a 30% (GPU-Util: 30%), reduzido de 100%.

    O comando nvidia-smi relata a utilização do poder de computação por GPU, não por pod. Se n pods solicitarem 30% cada e n não for maior que 3, todos os pods serão agendados na mesma GPU e a saída mostrará uma utilização de n x 30%.
  5. Verifique os logs do pod para observar o comportamento de limitação:

    kubectl logs cuda-sample-m**** -f

    Saída esperada:

    [CUDA Bandwidth Test] - Starting...
    Running on...
    
     Device 0: Tesla V100-SXM2-16GB
     Quick Mode
    
    time: 2021-12-16/02:50:59,count: 0,memSize: 32000000,succeed to copy data from host to gpu
    time: 2021-12-16/02:51:01,count: 1,memSize: 32000000,succeed to copy data from host to gpu
    time: 2021-12-16/02:51:02,count: 2,memSize: 32000000,succeed to copy data from host to gpu
    time: 2021-12-16/02:51:03,count: 3,memSize: 32000000,succeed to copy data from host to gpu

    As entradas de log aparecem em uma taxa menor em comparação com um pod sem restrições de poder de computação, o que confirma que o limite de 30% está em vigor.

  6. (Opcional) Exclua o job após a verificação:

    kubectl delete job cuda-sample

Próximos passos