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
- Um cluster de v1.19 ou posterior está disponível. Para mais detalhes, consulte Compra de um cluster do CCE.
- O complemento Volcano foi instalado. Para mais detalhes, consulte Volcano scheduler.
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.
- Efetue logon no console do CCE.
- Clique no nome do cluster para acessar o console do cluster. Escolha Settings no painel de navegação e clique na guia Scheduling Configuration.
- 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.
- Clique em Confirm.
- 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.
- 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.
- 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 um grupo de pods e especifique minMember e minResources da seguinte forma:
- 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
- Crie uma carga de trabalho usando o agendamento Gang.