Enfileire jobs até que os recursos do cluster fiquem livres para evitar contenção e desperdício de GPU/CPU ociosa.
Instale o ack-kube-queue, ative tipos adicionais de jobs (opcional) e envie-os para a fila.
Como funciona
O ack-kube-queue usa o mecanismo nativo suspend do Kubernetes. Ao enviar um job com suspend definido como true (via campo ou anotação), ele entra na fila. O ack-kube-queue monitora a disponibilidade de recursos e define suspend como false quando há recursos suficientes, iniciando o job.
Tipos de cluster compatíveis
O ack-kube-queue é compatível com:
Clusters gerenciados ACK com Kubernetes 1.18 ou posterior
Clusters ACK Edge com Kubernetes 1.18 ou posterior
Clusters ACK Lingjun com Kubernetes 1.18 ou posterior
Instale o ack-kube-queue
As etapas de instalação variam conforme o tipo de cluster.
Clusters gerenciados ACK e clusters ACK Edge
Escolha o procedimento adequado ao estado atual do seu cluster.
Se o conjunto de IA nativa da nuvem ainda não estiver instalado
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, selecione Applications > Cloud-native AI Suite.
Na parte inferior da página Cloud-native AI Suite, clique em Deploy. Na seção Scheduling, selecione Kube-Queue. Na seção Ecosystem Tools, selecione Kubeflow and Arena. Em seguida, clique em Deploy Cloud-native AI Suite.
Se o conjunto de IA nativa da nuvem já estiver instalado
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, selecione Applications > Cloud-native AI Suite.
-
Instale ack-arena e ack-kube-queue separadamente. Após a instalação, o campo Status em Components exibirá Deployed.
Localize ack-arena e clique em Deploy na coluna Actions. No painel Parameters, clique em OK.
Localize ack-kube-queue e clique em Deploy na coluna Actions. No painel, clique em OK.
Clusters ACK Lingjun
Faça login no console ACK. No painel de navegação à esquerda, selecione Marketplace > Marketplace.
Na página Marketplace, pesquise por ack-kube-queue e clique no resultado correspondente.
Na página de detalhes da aplicação, clique em Deploy. Na etapa Basic Information, defina Cluster, Namespace e Release Name; depois, clique em Next.
Na etapa Parameters, defina Chart Version como a versão mais recente e clique em OK.
Ative tipos adicionais de jobs
Por padrão, o ack-kube-queue habilita o enfileiramento apenas para jobs nativos do Kubernetes. Para enfileirar jobs TensorFlow, PyTorch, MPI, workflows Argo, jobs Ray ou aplicações Spark, ative cada tipo individualmente.
Para enfileirar jobs nativos do Kubernetes, o cluster deve executar o Kubernetes 1.22 ou posterior.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, selecione Applications > Helm.
Localize ack-kube-queue e clique em Update na coluna Actions.
-
No modelo YAML, defina os parâmetros dos tipos de jobs a serem ativados:
Parâmetro
Efeito
extension.argo.enable: trueAtiva workflows Argo
extension.mpi.enable: trueAtiva jobs MPI
extension.ray.enable: trueAtiva jobs Ray
extension.spark.enable: trueAtiva aplicações Spark
extension.tf.enable: trueAtiva jobs TensorFlow
extension.pytorch.enable: trueAtiva jobs PyTorch
Clique em OK.
Envie jobs
Envie cada tipo de job compatível para uma fila e verifique se ele foi enfileirado.
Restrições
|
Tipo de job |
Restrição |
|
TensorFlow, PyTorch, MPI |
Use o operador fornecido pelo ack-arena |
|
MPI |
Envio permitido apenas via Arena |
|
Workflows Argo |
Apenas workflows completos podem ser enfileirados; etapas individuais não. Declare os requisitos de recursos com a anotação |
|
Jobs nativos do Kubernetes |
O cluster deve executar o Kubernetes 1.22 ou posterior |
Jobs TensorFlow, PyTorch e MPI
Adicione a anotação scheduling.x-k8s.io/suspend: "true" ao manifesto do job.
Exemplo de job TensorFlow:
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "job1"
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
Verifique se o job está enfileirado:
kubectl describe tfjob job1
Um job enfileirado exibe a condição Suspended.
Jobs nativos do Kubernetes
Defina spec.suspend como true. Quando retirado da fila, o ack-kube-queue define esse campo como false e o job é iniciado.
apiVersion: batch/v1
kind: Job
metadata:
generateName: pi-
spec:
suspend: true
...
Verifique se o job está enfileirado:
kubectl get job <job-name>
Um job enfileirado exibe SUSPENDED. Quando o ack-kube-queue admite o job, o status SUSPENDED é removido e a execução começa.
Workflows Argo
Pré-requisito: Instale o Argo Workflows no Marketplace do console ACK.
Adicione um modelo personalizado chamado kube-queue-suspend do tipo suspend e defina spec.suspend como true. Declare os requisitos de recursos com a anotação kube-queue/min-resources:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: <workflow-name>-
annotations:
kube-queue/min-resources: |
cpu: 5
memory: 5G
spec:
suspend: true
entrypoint: <entrypoint-template>
templates:
# Required: add a suspend template named kube-queue-suspend
- name: kube-queue-suspend
suspend: {}
- name: <entrypoint-template>
# ... your workflow steps
Aplicações Spark
Pré-requisito: Instale o ack-spark-operator no Marketplace do console ACK.
Adicione a anotação scheduling.x-k8s.io/suspend: "true" ao manifesto SparkApplication:
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
generateName: spark-pi-suspend-
namespace: spark-operator
annotations:
scheduling.x-k8s.io/suspend: "true"
spec:
...
Jobs Ray
Pré-requisito: Instale o Kuberay-Operator na página Add-ons do console ACK. Consulte Gerenciar componentes.
Defina spec.suspend como true:
apiVersion: ray.io/v1
kind: RayJob
metadata:
name: rayjob-sample
spec:
# Suspend specifies whether the RayJob controller should create a RayCluster instance.
# If a job is applied with the suspend field set to true, the RayCluster will not be created and we will wait for the transition to false.
# If the RayCluster is already created, it will be deleted. In the case of transition to false, a new RayCluster will be created.
suspend: true
...