Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Envie um job de treinamento de nó único do TensorFlow com o Arena

Última atualização: Jun 27, 2026

Envie um job de treinamento distribuído do TensorFlow no modo PS-Worker e acompanhe o progresso com o TensorBoard.

Pré-requisitos

Certifique-se de que:

Etapa 1: Verificar recursos GPU disponíveis

Verifique a disponibilidade de GPU em todos os nós:

arena top node

Saída esperada:

NAME                        IPADDRESS        ROLE    STATUS  GPU(Total)  GPU(Allocated)
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   0           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
0/4 (0.0%)

O cluster tem dois nós GPU, cada um com duas GPUs ociosas.

Etapa 2: Enviar um job de treinamento distribuído do TensorFlow

O formato do comando é arena submit tfjob/tf [--flag] command.

Importante

Parâmetros obrigatórios para o modo PS-Worker:

  • --name — nome exclusivo do job

  • --ps — quantidade de nós de servidor de parâmetros (PS)

  • --workers — quantidade de nós workers

  • --ps-image — imagem do nó PS (ou --image se compartilhada)

  • --worker-image — imagem do nó worker (ou --image se compartilhada)

  • --gpus — GPUs por worker (obrigatório para cargas de trabalho com GPU)

Envie um job de treinamento distribuído com um nó PS e dois nós workers:

arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=master \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /root/code/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data/mnist.npz --dir /mnt/tf_data/logs"

Saída esperada:

service/tf-mnist-dist-tensorboard created
deployment.apps/tf-mnist-dist-tensorboard created
tfjob.kubeflow.org/tf-mnist-dist created
INFO[0004] The Job tf-mnist-dist has been submitted successfully
INFO[0004] You can run `arena get tf-mnist-dist --type tfjob -n default` to check the job status

Os principais parâmetros estão listados abaixo. Para visualizar todas as opções, execute arena submit tf --help.

Parâmetro

Obrigatório

Descrição

Padrão

--name

Sim

Nome exclusivo do job no cluster.

Nenhum

--working-dir

Não

Diretório de trabalho do comando de treinamento. O código sincronizado fica em code/.

/root

--gpus

Não

GPUs alocadas por nó worker.

0

--workers

Não

Quantidade de nós workers.

1

--image

Obrigatório, a menos que --worker-image e --ps-image estejam definidos

Imagem de contêiner para nós worker e PS. Substituído por --worker-image ou --ps-image.

Nenhum

--worker-image

Obrigatório, a menos que --image esteja definido

Imagem do nó worker. Tem precedência sobre --image.

Nenhum

--ps

Sim (jobs distribuídos)

Quantidade de nós PS.

0

--ps-image

Obrigatório, a menos que --image esteja definido

Imagem do nó PS. Tem precedência sobre --image.

Nenhum

--sync-mode

Não

Modo de sincronização: git ou rsync.

Nenhum

--sync-source

Não

URL do repositório de origem. Use com --sync-mode. O código é baixado para code/ dentro de --working-dir.

Nenhum

--data

Não

Monta uma PVC. Formato: <pvc-name>:<mount-path>. Execute arena data list para listar as PVCs disponíveis.

Nenhum

--tensorboard

Não

Ativa o TensorBoard. Use --logdir para definir o caminho dos dados de evento.

Nenhum

--logdir

Não

Caminho dos dados de evento do TensorBoard. Use com --tensorboard.

/training_logs

Uso de repositório Git privado

O Arena usa o git-sync para obter o código-fonte. Em repositórios privados, passe as credenciais como variáveis de ambiente:

arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=master \
    --env=GIT_SYNC_USERNAME=<your-username> \
    --env=GIT_SYNC_PASSWORD=<your-password> \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /root/code/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data/mnist.npz --dir /mnt/tf_data/logs"

Defina qualquer variável de ambiente do projeto git-sync com --env.

Importante

Se a obtenção do GitHub falhar devido a problemas de rede, a imagem de demonstração já contém o código em /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py. Envie sem --sync-mode e --sync-source:

arena submit tf \
    --name=tf-mnist-dist \
    --namespace=default \
    --working-dir=/root \
    --ps=1 \
    --ps-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --workers=2 \
    --worker-image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --gpus=1 \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/tf_data/logs \
    "python /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py --data /mnt/tf_data/mnist.npz --dir /mnt/tf_data/logs"

Etapa 3: Monitorar o job de treinamento

Liste todos os jobs enviados:

arena list

Saída esperada:

NAME     STATUS     TRAINER  AGE  NODE
tf-dist  RUNNING    TFJOB    58s  192.1xx.x.xx

Verifique os detalhes do job:

arena get -n default tf-mnist-dist

Saída esperada:

STATUS: RUNNING
NAMESPACE: default
PRIORITY: N/A
TRAINING DURATION: 1m

NAME     STATUS   TRAINER  AGE  INSTANCE          NODE
tf-dist  RUNNING  TFJOB    1m   tf-dist-ps-0      192.1xx.x.xx
tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-0  192.1xx.x.xx
tf-dist  RUNNING  TFJOB    1m   tf-dist-worker-1  192.1xx.x.xx

Your tensorboard will be available on:
http://192.1xx.x.xx:31870
Nota

As linhas de endpoint do TensorBoard aparecem apenas quando --tensorboard está ativado.

Verifique a alocação de GPU por job:

arena top job

Saída esperada:

NAME     GPU(Requests)  GPU(Allocated)  STATUS     TRAINER  AGE  NODE
tf-dist  2              2               RUNNING    tfjob    1m   192.1xx.x.x
tf-git   1              0               SUCCEEDED  tfjob    2h   N/A

Total Allocated GPUs of Training Job:
2

Total Requested GPUs of Training Job:
3

Verifique a alocação de GPU em todos os nós:

arena top node

Saída esperada:

NAME                       IPADDRESS     ROLE    STATUS  GPU(Total)  GPU(Allocated)
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  master  ready   0           0
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           1
cn-huhehaote.192.1xx.x.xx  192.1xx.x.xx  <none>  ready   2           0
-----------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
2/6 (33%)

Etapa 4: Visualizar o TensorBoard

Importante

O comando kubectl port-forward destina-se apenas a desenvolvimento e depuração. Para redes de produção, use o gerenciamento de Ingress.

  1. Encaminhe o TensorBoard para a porta local 9090:

    kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006
  2. Abra localhost:9090 em um navegador.

tf

Etapa 5: Visualizar logs do job de treinamento

Por padrão, arena logs exibe os logs de worker-0 em fluxo contínuo. Para visualizar outras instâncias, liste-as com arena get e especifique uma com -i.

Visualize os logs padrão (worker-0):

arena logs -n default tf-dist

Saída esperada:

WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
...
Accuracy at step 960: 0.9691
Accuracy at step 970: 0.9677
Accuracy at step 980: 0.9687
Accuracy at step 990: 0.968
Adding run metadata for 999
Total Train-accuracy=0.968

Visualize logs de uma instância específica:

# Get the instance list
arena get tf-dist

Saída esperada:

STATUS: SUCCEEDED
NAMESPACE: default
PRIORITY: N/A
TRAINING DURATION: 1m

NAME     STATUS     TRAINER  AGE  INSTANCE          NODE
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-ps-0      192.16x.x.xx
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-0  192.16x.x.xx
tf-dist  SUCCEEDED  TFJOB    5m   tf-dist-worker-1  192.16x.x.xx

Your tensorboard will be available on:
http://192.16x.x.xx:31870
# View logs from a specific worker instance
arena logs tf-dist -i tf-dist-worker-1

Saída esperada:

WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:
...
Accuracy at step 970: 0.9676
Accuracy at step 980: 0.968
Accuracy at step 990: 0.967
Adding run metadata for 999
Total Train-accuracy=0.967

Outros comandos de log:

Comando

Descrição

arena logs <job> -f

Exibe a saída de log em tempo real

arena logs <job> -t N

Mostra as últimas N linhas dos logs

arena logs --help

Lista todas as opções de log

Visualize as últimas 5 linhas:

arena logs tf-dist -t 5

Saída esperada:

Accuracy at step 9970: 0.9834
Accuracy at step 9980: 0.9828
Accuracy at step 9990: 0.9816
Adding run metadata for 9999
Total Train-accuracy=0.9816

(Opcional) Etapa 6: Limpar

Após a conclusão do job, exclua-o para liberar recursos:

arena delete -n default tf-mnist-dist

Saída esperada:

INFO[0002] The training job tf-mnist-dist has been deleted successfully