Todos os produtos
Search
Central de documentação

Intelligent Computing LINGJUN:Guia do usuário

Última atualização: Oct 10, 2026

O Lingjun Runtime Kit oferece alocação de GPU inteira, fatiamento, solicitações multi-GPU e agendamento com reconhecimento de topologia para recursos de GPU e PPU no Kubernetes. Este tópico descreve a sintaxe YAML para cada cenário e como consumir métricas de monitoramento.

Nota

Preview público: Este product está atualmente em preview público. Se você tiver dúvidas ou sugestões, envie um ticket.

1. Pré-requisitos

Antes de utilizar este guia, confirme que o cluster seguiu Deployment and release guide para concluir a implantação com um clique em Section 3.3 e passou na verificação de implantação em Section 3.4:

  1. O nó de destino possui o rótulo lj_runtimekit_enable=true e os recursos do Runtime Kit estão ativados no nó (consulte 3.5 Enable and disable features).

  2. O Device Plugin e o Scheduler Framework estão implantados e funcionando corretamente, e os recursos do nó são reportados (consulte 3.4 Verify the deployment).

  3. A RuntimeClass lj-runtime foi criada no cluster e o handler de runtime correspondente está registrado no containerd do nó (consulte 3.2 Pre-deployment tasks, Etapa 5).

  4. Caso utilize agendamento de topologia gang entre nós e seu cluster não ofereça capacidades nativas de gang scheduling, instale o JobSet. O JobSet fornece semântica de grupo de Pods para o gang scheduling, garantindo que jobs de treinamento multinó iniciem e parem simultaneamente.

2. Modelo de recursos

O Device Plugin reporta os seguintes recursos estendidos ao cluster. Especifique-os em resources.limits do Pod (recursos estendidos exigem apenas limits, não requests):

Nome do recurso

Finalidade

Exemplo de uso

aliyun.com/gpu-core

Fatiamento de poder computacional por divisão de tempo

"50" solicita 50% do poder computacional de uma única GPU

aliyun.com/gpu-memory

Fatiamento de memória da GPU

"4" solicita 4 GiB de memória da GPU

aliyun.com/gpu-slice

Particionamento espacial MIG

"3" solicita uma instância MIG com três frações de poder computacional

aliyun.com/gpu

GPU inteira (agnóstico a fornecedor)

"1" solicita uma GPU inteira. O nome do recurso é agnóstico ao fornecedor. Para agendar um Pod em um nó com placas aceleradoras de um fornecedor específico, personalize os rótulos do nó e use-os em conjunto com afinidade de nó

nvidia.com/gpu

GPU inteira (compatível com a comunidade)

"1" solicita uma GPU NVIDIA

aliyun.com/rdma

Chave para ativar a montagem de NIC RDMA

"1" ativa a montagem de NIC RDMA (modo compartilhado; o valor pode ser apenas 0 ou 1, não a quantidade de NICs). O sistema associa automaticamente as NICs RDMA correspondentes com base na topologia da GPU

Observação:

  • gpu-slice aceita os valores 1, 2, 3, 4 e 7, que correspondem aos perfis padrão da NVIDIA Multi-Instance GPU (MIG). Atualmente, o MIG suporta os modelos de placa A100 e H800.

  • aliyun.com/gpu é um nome de recurso de GPU inteira agnóstico a fornecedor. Para agendar um Pod em um nó com placas aceleradoras de um fabricante específico, personalize os rótulos do nó e utilize-os junto com afinidade de nó. Por exemplo, adicione o rótulo accelerator/vendor=ppu a um nó (kubectl label node <node-name> accelerator/vendor=ppu) e depois especifique o rótulo no Pod usando nodeSelector. Já nvidia.com/gpu é o nome de recurso padrão da comunidade, utilizado exclusivamente para cenários de GPU NVIDIA inteira.

  • A tabela anterior lista os nomes de recursos padrão. Para personalizar o prefixo do nome do recurso e adequá-lo às convenções de nomenclatura da sua plataforma, atualize também as configurações dos três componentes: Device Plugin, Scheduler Framework e Exporter (para mais informações, consulte Customize open source components).

Pods que utilizam as capacidades de agendamento do Lingjun exigem duas definições:

spec:
  schedulerName: lj-runtimekit-scheduler   # Uses the Lingjun scheduler to allocate sliced resources
  runtimeClassName: lj-runtime             # So that GPU and PPU devices are correctly injected into the container

Pods que não especificam schedulerName são gerenciados pelo agendador padrão, que não reconhece recursos de fatiamento de GPU.

3. Cenários de solicitação de recursos

3,1 Alocação de GPU inteira

Para solicitar uma GPU inteira, especifique apenas recursos de GPU inteira. Não é necessário definir poder computacional ou memória da GPU:

apiVersion: v1
kind: Pod
metadata:
  name: whole-card-demo
spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  containers:
  - name: app
    image: <your-image>
    resources:
      limits:
        nvidia.com/gpu: "1"     # Whole NVIDIA GPU (the community-compatible resource name). For whole GPUs from other vendors, use aliyun.com/gpu

3,2 Fatiamento de poder computacional por divisão de tempo (TDM)

Especifique duas dimensões independentes: gpu-core (percentual de poder computacional, de 1 a 100) e gpu-memory (memória da GPU, em GiB), combinando-as livremente:

apiVersion: v1
kind: Pod
metadata:
  name: tdm-demo
spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  containers:
  - name: app
    image: <your-image>
    resources:
      limits:
        aliyun.com/gpu-core: "50"      # 50% of the computing power of a single GPU
        aliyun.com/gpu-memory: "4"     # 4 GiB of GPU memory

Importante: Não especifique gpu-core ao usar uma GPU inteira. Deixar esse campo indefinido significa que o limite de poder computacional não está ativo. Definir explicitamente como 0 também não impõe limites, mas isso pode fazer com que o programa de GPU no contêiner apresente comportamento inesperado.

3,3 Particionamento espacial MIG

Antes de usar o particionamento espacial MIG, o administrador do cluster deve ativar o modo MIG na GPU executando o comando nvidia-smi mig no nó. Trata-se de uma alteração de configuração de hardware que exige reinicialização da GPU. Após a ativação do modo MIG, o sistema gerencia automaticamente a criação e a recuperação das instâncias. Quando um Pod inicia, uma instância MIG é criada conforme as especificações solicitadas. Ao destruir o Pod, a instância é recuperada automaticamente, sem necessidade de intervenção manual.

apiVersion: v1
kind: Pod
metadata:
  name: mig-demo
spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  containers:
  - name: app
    image: <your-image>
    resources:
      limits:
        aliyun.com/gpu-slice: "3"     # A MIG instance with three shares of computing power
        aliyun.com/gpu-memory: "4"    # 4 GiB of GPU memory

gpu-slice aceita os valores 1, 2, 3, 4 e 7. O MIG suporta atualmente apenas os modelos de placa A100 e H800. Para PPU, a capacidade equivalente é a tecnologia de particionamento espacial nativa do PPU. Em cenários com PPU, recomendamos priorizar o uso de multiplexação por divisão de tempo (TDM).

3,4 Solicitações multi-GPU homogêneas

As solicitações multi-GPU suportam atualmente apenas configurações homogêneas (cada GPU recebe a mesma alocação de poder computacional e memória). Defina a quantidade de GPUs usando o rótulo de Pod replica e especifique a configuração de recursos para cada GPU em resources.limits:

apiVersion: v1
kind: Pod
metadata:
  name: multi-gpu-demo
  labels:
    replica: "2"                       # Requests 2 GPUs
spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  containers:
  - name: app
    image: <your-image>
    resources:
      limits:
        aliyun.com/gpu-core: "50"
        aliyun.com/gpu-memory: "4"

3,5 Limitações

  1. Não é possível ativar simultaneamente multiplexação por divisão de tempo (TDM) e particionamento espacial Multi-Instance GPU (MIG) na mesma GPU.

  2. O TDM é compatível com todas as séries de GPUs NVIDIA e com PPU. Placas AMD suportam apenas GPUs inteiras, sem suporte a fatiamento.

  3. A memória da GPU é especificada em GiB ou MiB. No modo MiB, a granularidade mínima é de 128 MiB.

4. Agendamento com reconhecimento de topologia (PPU)

O agendamento com reconhecimento de topologia seleciona a combinação ideal de dispositivos para solicitações multi-GPU com base na topologia física. Atualmente, há suporte para PPU 810E e PPU M890P. Os componentes coletam e reportam as informações de topologia automaticamente, sem necessidade de configuração adicional. Basta especificar os recursos seguindo as regras abaixo.

4,1 Agendamento de topologia multi-GPU intra-nó

PPU 810E: Essa funcionalidade entra em vigor automaticamente quando você solicita aliyun.com/gpu e a quantidade de GPUs é 2, 4 ou 8. O agendador prioriza as GPUs mais interconectadas dentro do mesmo grupo de topologia. Para cenários RDMA, solicite também aliyun.com/rdma.

spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  containers:
  - name: train
    image: <your-training-image>
    resources:
      limits:
        aliyun.com/gpu: "4"          # Requests 4 whole PPU 810E GPUs; topology optimization is applied automatically

PPU M890P (afinidade conjunta GPU-RDMA): Em resources.limits, solicite aliyun.com/gpu (qualquer inteiro de 1 a 8) e aliyun.com/rdma: "1" simultaneamente para habilitar esse recurso. O agendador aloca as GPUs e as NICs RDMA no mesmo domínio PCIe como um grupo, aplicando fallback em quatro níveis na ordem switch PCIe → nó NUMA → soquete CPU → entre soquetes, do mais próximo ao mais distante. aliyun.com/rdma funciona como chave para ativar o caminho de afinidade de topologia e não representa a quantidade de NICs. O Device Plugin monta automaticamente os dispositivos RDMA correspondentes no contêiner. A comunicação RDMA requer hostNetwork: true.

spec:
  schedulerName: lj-runtimekit-scheduler
  runtimeClassName: lj-runtime
  hostNetwork: true
  containers:
  - name: training
    image: <your-training-image>
    resources:
      limits:
        aliyun.com/gpu: "4"
        aliyun.com/rdma: "1"

4,2 Agendamento de topologia gang entre nós

Para treinamento distribuído em vários nós, envie seu job por meio do JobSet para acionar essa funcionalidade. O agendador identifica automaticamente os Pods do mesmo JobSet como um único grupo de agendamento e aloca nós com base na afinidade de topologia de rede. Convenções principais:

  1. Nos rótulos do modelo de Pod, defina aliyun.com/min-member: "N". O valor deve ser igual a parallelism (quantidade total de Pods no grupo).

  2. Em uma configuração típica, parallelism = completions = aliyun.com/min-member.

  3. Para comunicação RDMA, defina hostNetwork: true e adicione a capacidade IPC_LOCK. Caso contrário, o registro de memória RDMA falhará.

Comportamento do agendador: O agendador prefere posicionar os membros do grupo nos nós com menor distância de comunicação de rede (mesmo nó > mesmo HyperNode > mesmo switch leaf > mesmo network-pod). O agendamento segue a lógica "tudo ou nada": se nem todos os membros do grupo estiverem prontos em até 180 segundos, todo o grupo é revertido e tentado novamente. Se os recursos totais dentro do domínio network-pod forem insuficientes para acomodar todo o grupo, todos os membros permanecem em Pending.

Exemplo (treinamento distribuído gang entre nós com 7 workers, apenas partes principais):

apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
  name: gang-nccl-test
spec:
  replicatedJobs:
    - name: worker
      template:
        spec:
          completionMode: Indexed
          parallelism: 7
          completions: 7
          backoffLimit: 2
          template:
            metadata:
              labels:
                app: gang-nccl-test
                aliyun.com/min-member: "7"      # The number of gang group members, equal to parallelism
            spec:
              schedulerName: lj-runtimekit-scheduler
              runtimeClassName: lj-runtime
              hostNetwork: true
              containers:
              - name: trainer
                image: <your-training-image>
                resources:
                  limits:
                    aliyun.com/gpu: "1"
                    aliyun.com/rdma: "1"
                securityContext:
                  capabilities:
                    add: ["IPC_LOCK"]
              restartPolicy: Never

5. Consumo de métricas de monitoramento

O Exporter expõe métricas de runtime da GPU no formato padrão Prometheus. As métricas usam o prefixo DCGM_FI_* e são compatíveis com o ecossistema de monitoramento NVIDIA DCGM, permitindo reutilizar painéis Grafana e regras de alerta da comunidade. Os dados reais são coletados pelos componentes do Lingjun através da interface de driver subjacente, fornecendo métricas de GPU em nível de contêiner mais granulares do que o DCGM nativo.

Categorias de métricas:

Categoria

Exemplos de métricas

Granularidade

Hardware de GPU inteira

Utilização de SM, utilização de memória da GPU, largura de banda de memória da GPU, uso de PCIe/NVLink, temperatura e energia

GPU inteira

Instâncias fatiadas

Utilização de tempo da instância e uso de memória da GPU da instância

Pod

Status de integridade

Travamentos de driver, erros ECC e exceções P2P/NVLink

GPU inteira

Rótulos de métricas: gpu (índice), UUID, modelName (modelo), Hostname, NodeName, pod, namespace e container_name.

Integração com Prometheus: Adicione um alvo de coleta ao prometheus.yml (a porta padrão do Exporter é 9501):

scrape_configs:
  - job_name: 'lj-runtimekit-exporter'
    static_configs:
      - targets: ["<node-ip>:9501"]

Referências:

  • Definições completas de métricas (80 itens, cobrindo GPU inteira, contêiner, ECC, integridade e outras categorias): docs/metrics-definition.md no componente Exporter do repositório open-source.

  • Modelo de painel Grafana: consulte a documentação do componente Exporter no repositório open-source. Importe-o no Grafana clicando em Import.

Exemplos comuns de alertas (status geral de integridade da GPU; valor 0 indica exceção):

# View the health status of a specified node
DCGM_FI_HEALTH_WATCH_OVERALL{NodeName="gpu-node-01"}

# Filter the nodes that have exceptions
DCGM_FI_HEALTH_WATCH_OVERALL == 0

FAQ

Q1: Um contêiner é criado com sucesso, mas o programa de GPU não gera saída por muito tempo

Possíveis causas: O poder computacional foi definido como 0 na solicitação Allocate. Solução: Não especifique o campo de poder computacional ao usar uma GPU inteira. Para limitar o poder computacional, especifique uma porcentagem inteira positiva.

Q2: Um Pod permanece em Pending

Verifique o seguinte: O Pod especifica schedulerName: lj-runtimekit-scheduler. O nó de destino tem o rótulo lj_runtimekit_enable=true e seus recursos foram reportados. Os valores solicitados de poder computacional, memória da GPU e slice são válidos (slice aceita apenas 1, 2, 3, 4 e 7, e o modelo da placa deve ser A100 ou H800). Para mais detalhes sobre solução de problemas no lado da implantação, consulte Deployment and release guide - FAQ.

Apêndice: Referência rápida de YAML

Cenário

Configuração principal

Alocação de GPU inteira

nvidia.com/gpu: "1" (nome compatível com a comunidade NVIDIA) ou aliyun.com/gpu (agnóstico a fornecedor)

Fatiamento por divisão de tempo

aliyun.com/gpu-core: "50" + aliyun.com/gpu-memory: "4"

Particionamento espacial MIG

aliyun.com/gpu-slice: "3" + aliyun.com/gpu-memory: "4"

Multi-GPU homogênea

Rótulo de Pod replica: "N" + especificar configuração por GPU em limits

Topologia 810E

aliyun.com/gpu: "2/4/8"

Topologia M890P

aliyun.com/gpu: "N" + aliyun.com/rdma: "1"

Gang entre nós

JobSet + rótulo aliyun.com/min-member: "N" (= parallelism)

Requisitos comuns

schedulerName: lj-runtimekit-scheduler + runtimeClassName: lj-runtime