Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Gang

O agendamento Gang é um algoritmo de agendamento que agenda processos ou threads correlacionados para serem executados simultaneamente em diferentes processadores. Ele atende aos requisitos de agendamento de "Tudo ou nada" no processo de agendamento e evita o desperdício de recursos de cluster causados pelo agendamento arbitrário de pods. Gang é usado principalmente em cenários que exigem colaboração de vários processos, como cenários de IA e Big Data. O agendamento Gang resolve efetivamente pontos problemáticos, como impasses em trabalhos de treinamento distribuídos, melhorando significativamente a utilização de recursos de cluster.

Pré-requisitos

Recursos

A política de agendamento Gang é um dos principais algoritmos de agendamento do volcano-scheduler. Ele atende aos requisitos de agendamento de "Tudo ou nada" no processo de agendamento e evita o desperdício de recursos de cluster causados pelo agendamento arbitrário de pods. O algoritmo Gang scheduler verifica se o número de pods agendados em uma tarefa atende aos requisitos mínimos para a execução da tarefa. Se sim, todos os pods na tarefa serão agendados. Se não, os pods não serão agendados.

O algoritmo de agendamento Gang baseado em grupos de contêineres é adequado para cenários em que a colaboração multiprocesso é necessária. Os cenários de IA geralmente envolvem processos complexos. A ingestão de dados, os analistas de dados, a divisão de dados, os treinadores, o serviço e o registro que exigem que um grupo de contêineres trabalhem juntos são adequados para o agendamento de gangues baseado em contêiner. Cenários de comunicação de computação paralela multi-thread sob a estrutura de computação MPI também são adequados para o agendamento Gang porque os processos principal e secundário precisam trabalhar juntos. Os contêineres em um grupo de pods são altamente correlacionados e pode haver contenção de recursos. A alocação geral de agendamento pode efetivamente resolver impasses. Se os recursos de cluster forem insuficientes, o agendamento de grupos pode melhorar significativamente a utilização dos recursos de cluster.

Procedimento

Depois que o Volcano for instalado, você poderá ativar ou desativar o agendamento Gang na página Scheduling Configuration. Essa função está ativada por padrão.

  1. Efetue logon no console do CCE.
  2. Clique no nome do cluster para acessar o console do cluster. Escolha Settings no painel de navegação e clique na guia Scheduling Configuration.
  3. No painel AI task performance enhanced scheduling, selecione se deseja ativar o Gang.

    Essa função ajuda a aprimorar a taxa de transferência de serviço do cluster e melhorar o desempenho da execução do serviço.

  4. Clique em Confirm.
  5. Após a configuração, use o agendamento Gang em cargas de trabalho ou tarefas de Volcano.

    • Crie uma carga de trabalho usando o agendamento Gang.
      1. Crie um grupo de pods e especifique minMember e minResources da seguinte forma:
        apiVersion: scheduling.volcano.sh/v1beta1
        kind: PodGroup
        metadata:
          name: pg-test1
        spec:
          minMember: 3
          minResources:
            cpu: 3
            memory: 3Gi
        • minMember: especifica o requisito mínimo sobre o número de pods para executar uma carga de trabalho. Quando o número de pods no grupo de pods atual atende ao requisito, esses pods podem ser agendados centralmente.
        • minResources: especifica o requisito mínimo de recursos para executar uma carga de trabalho. Quando os recursos disponíveis em um cluster atendem ao requisito, o grupo de pods pode ser agendado centralmente.
      2. Ao criar uma carga de trabalho, use schedulerName para especificar o Volcano scheduler e annotation para especificar o grupo de pods no qual o Volcano scheduler é executado.
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: podgroup-test
          labels:
            app: podgroup-test
        spec:
          replicas: 6
          selector:
            matchLabels:
              app: podgroup-test
          template:
            metadata:
              annotations:
                scheduling.k8s.io/group-name: pg-test1
              labels:
                app: podgroup-test
            spec:
              schedulerName: volcano
              containers:
              - name: test
                image: busybox
                imagePullPolicy: IfNotPresent
                command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
                resources:
                  requests:
                    cpu: 500m
                  limits:
                    cpu: 500m
        • schedulerName: defina este parâmetro para volcano, indicando que o vulcão será usado para programar pods para a carga de trabalho.
        • scheduling.k8s.io/group-name: especifica o grupo de pods criado na etapa anterior, por exemplo, pg-test1.
    • Crie uma tarefa de Volcano usando o agendamento Gang.

      Ao criar uma tarefa de Volcano, você só precisa configurar minAvailable e definir o schedulerName para volcano. O Volcano scheduler criará automaticamente um grupo de pods e o gerenciará. O seguinte mostra um exemplo:

      apiVersion: batch.volcano.sh/v1alpha1
      kind: Job
      metadata:
        name: vcjob
      spec:
        schedulerName: volcano
        minAvailable: 2
        tasks:
          - replicas: 4
            name: "test"
            template:
              spec:
                containers:
                  - image: alpine
                    command: ["/bin/sh", "-c", "sleep 1000"]
                    imagePullPolicy: IfNotPresent
                    name: running
                    resources:
                      requests:
                        cpu: "1"
                restartPolicy: OnFailure