Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Submit a standalone TensorFlow job using Arena

Última atualização: Jun 27, 2026

Este tópico mostra como enviar um job de treinamento independente do TensorFlow com o Arena e visualizá-lo no TensorBoard.

Pré-requisitos

Contexto

Este exemplo baixa o código-fonte de um repositório Git e usa um conjunto de dados de um sistema de armazenamento compartilhado baseado em PVs e PVCs gerenciados pelo NAS. O exemplo pressupõe que você tenha uma instância PVC chamada training-data (um volume de armazenamento compartilhado) contendo o conjunto de dados em um diretório chamado tf_data.

Procedimento

Etapa 1: Visualize recursos de GPU

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%)

A saída indica que o cluster possui dois nós com GPU. Cada nó tem duas placas de GPU ociosas disponíveis para jobs de treinamento.

Etapa 2: Envie um job do TensorFlow

Execute o comando arena submit tfjob/tf [--flag] para enviar um job do TensorFlow.

Use o comando abaixo para enviar um job independente do TensorFlow que utiliza um único nó e uma única placa de GPU.

arena submit tf \
    --name=tf-mnist \
    --working-dir=/root \
    --workers=1 \
    --gpus=1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --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-tensorboard created
deployment.apps/tf-mnist-tensorboard created
tfjob.kubeflow.org/tf-mnist created
INFO[0005] The Job tf-mnist has been submitted successfully
INFO[0005] You can run `arena get tf-mnist --type tfjob -n default` to check the job status

A tabela a seguir descreve os parâmetros.

Parâmetro

Obrigatório

Descrição

Padrão

--name

Sim

Nome do job. Deve ser globalmente único.

N/A

--working-dir

Não

Diretório onde o comando é executado.

/root

--gpus

Não

Número de placas de GPU usadas pelo nó worker do job.

0

--image

Sim

URL da imagem do ambiente de treinamento.

N/A

--sync-mode

Não

Modo de sincronização do código-fonte. Os valores válidos são git e rsync. Este exemplo usa git.

N/A

--sync-source

Não

URL do repositório de código-fonte. Obrigatório ao especificar --sync-mode. No modo git, aceita a URL de qualquer repositório baseado em Git, como projetos do GitHub ou do Alibaba Cloud Code. O código do projeto é baixado para o diretório code/ dentro do caminho definido por --working-dir. Neste exemplo, o caminho é /root/code/arena.

N/A

--data

Não

Monta um volume de armazenamento compartilhado (PVC) no contêiner do job. O formato do valor é pvc-name:mount-path. pvc-name é o nome de um PVC existente. Execute arena data list para listar os PVCs disponíveis. mount-path é o caminho de destino dentro do contêiner de onde o código de treinamento lê os dados.

Nota

Execute arena data list para visualizar os PVCs disponíveis no cluster.

NAME           ACCESSMODE     DESCRIPTION  OWNER  AGE
    training-data  ReadWriteMany                      35m

Se nenhum PVC estiver disponível, crie um. Para mais informações, consulte Configure armazenamento compartilhado NAS.

N/A

--tensorboard

Não

Ativa um serviço TensorBoard para visualização de dados. Use este parâmetro com --logdir para especificar o caminho dos arquivos de evento lidos pelo TensorBoard.

N/A

--logdir

Não

Especifica o caminho para os arquivos de evento do TensorBoard. Obrigatório quando --tensorboard for especificado.

/training_logs

Nota

Para usar um repositório Git privado, defina suas credenciais com as variáveis de ambiente GIT_SYNC_USERNAME e GIT_SYNC_PASSWORD.

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

O Arena usa o git-sync para sincronizar o código-fonte. Portanto, você pode usar qualquer variável de ambiente suportada pelo projeto git-sync.

Importante

Se a extração do código falhar devido a problemas de rede, baixe-o manualmente para o sistema de armazenamento compartilhado. Alternativamente, a imagem de amostra fornecida inclui o código de exemplo em /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py, permitindo enviar o job diretamente conforme mostrado abaixo:

arena submit tf \
    --name=tf-mnist \
    --working-dir=/root \
    --workers=1 \
    --gpus=1 \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow-mnist-example:2.15.0-gpu \
    --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: Verificar o status do job

  1. Execute o comando a seguir para listar todos os jobs enviados com o Arena.

    arena list

    Saída esperada:

    NAME      STATUS   TRAINER  DURATION  GPU(Requested)  GPU(Allocated)  NODE
    tf-mnist  RUNNING  TFJOB    3s        1               1               192.168.xxx.xxx
  2. Verifique os recursos de GPU usados pelo job com o seguinte comando:

    arena top job

    Saída esperada:

    NAME      STATUS   TRAINER  AGE  GPU(Requested)  GPU(Allocated)  NODE
    tf-mnist  RUNNING  TFJOB    29s  1               1               192.168.xxx.xxx
    Total Allocated/Requested GPUs of Training Jobs: 1/1
  3. Verifique os recursos de GPU usados pelo cluster com o seguinte comando:

    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           1
    cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
    ---------------------------------------------------------------------------------------------------
    Allocated/Total GPUs In Cluster:
    1/4 (25.0%)
  4. Visualize os detalhes do job de treinamento executando o comando a seguir:

    arena get -n default tf-mnist

    Saída esperada:

    Name:        tf-mnist
    Status:      RUNNING
    Namespace:   default
    Priority:    N/A
    Trainer:     TFJOB
    Duration:    22s
    CreateTime:  2026-01-26 16:01:42
    EndTime:
    Instances:
      NAME              STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----              ------   ---  --------  --------------  ----
      tf-mnist-chief-0  Running  45s  true      1               cn-beijing.192.168.xxx.xxx
    Tensorboard:
      Your tensorboard will be available on:
      http://192.168.xxx.xxx:31243
    Nota

    Como o TensorBoard está ativado, a saída inclui sua URL. Essa URL não aparece se o TensorBoard estiver desativado.

Etapa 4: Visualize o TensorBoard

Use um navegador web para visualizar o painel do TensorBoard.

  1. Encaminhe o serviço do TensorBoard no cluster para a porta 9090 na sua máquina local com o seguinte comando:

    Importante
    kubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006
  2. Abra http://localhost:9090 no navegador para visualizar o painel do TensorBoard.

    O painel SCALARS no TensorBoard exibe duas curvas: train (vermelha) e test (azul). A métrica accuracy_1 converge para mais de 0,96 após cerca de 1.000 passos, enquanto a métrica cross_entropy_1 cai para aproximadamente 0,05 a 0,10. Isso indica que o modelo MNIST foi treinado com sucesso. No painel à esquerda, ajuste opções de exibição como Smoothing (atualmente 0,6) e Horizontal Axis (atualmente STEP). O caminho do log é /mnt/tf_data/logs.

Etapa 5: Visualize logs do job

Obtenha os logs do job com o seguinte comando:

arena logs -n default tf-mnist

Saída esperada:

Train Epoch: 14 [55680/60000 (93%)]     Loss: 0.029811
Train Epoch: 14 [56320/60000 (94%)]     Loss: 0.029721
Train Epoch: 14 [56960/60000 (95%)]     Loss: 0.029682
Train Epoch: 14 [57600/60000 (96%)]     Loss: 0.029781
Train Epoch: 14 [58240/60000 (97%)]     Loss: 0.029708
Train Epoch: 14 [58880/60000 (98%)]     Loss: 0.029761
Train Epoch: 14 [59520/60000 (99%)]     Loss: 0.029684
Test Accuracy: 9842/10000 (98.42%)
938/938 - 3s - loss: 0.0299 - accuracy: 0.9924 - val_loss: 0.0446 - val_accuracy: 0.9842 - lr: 0.0068 - 3s/epoch - 3ms/step
Nota
  • Adicione o parâmetro -f para transmitir os logs do job em tempo real.

  • Adicione o parâmetro -t N ou --tail N para visualizar apenas as últimas N linhas dos logs.

  • Execute arena logs --help para ver mais opções.

(Opcional) Etapa 6: Limpar o ambiente

Após a conclusão do job de treinamento, exclua-o com o seguinte comando:

arena delete -n default tf-mnist

Saída esperada:

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