Este tópico mostra como enviar um job de treinamento independente do TensorFlow com o Arena e visualizá-lo no TensorBoard.
Pré-requisitos
Crie um cluster Kubernetes com GPUs. Para mais informações, consulte Criar um cluster Kubernetes com GPUs.
Os nós do cluster devem ter acesso à rede pública. Para mais informações, consulte Ative acesso à rede pública para um cluster.
Instale o cliente Arena. Para mais informações, consulte Configure o cliente Arena.
Crie uma instância PVC chamada
training-datae armazene o conjunto de dados MNIST no caminho tf_data. Para mais informações, consulte Configure armazenamento compartilhado NAS.
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 Nota
Execute
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 |
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.
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
-
Execute o comando a seguir para listar todos os jobs enviados com o Arena.
arena listSaída esperada:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE tf-mnist RUNNING TFJOB 3s 1 1 192.168.xxx.xxx -
Verifique os recursos de GPU usados pelo job com o seguinte comando:
arena top jobSaí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 -
Verifique os recursos de GPU usados pelo cluster com o seguinte comando:
arena top nodeSaí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%) -
Visualize os detalhes do job de treinamento executando o comando a seguir:
arena get -n default tf-mnistSaí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:31243NotaComo 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.
-
Encaminhe o serviço do TensorBoard no cluster para a porta 9090 na sua máquina local com o seguinte comando:
Importantekubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006 -
Abra
http://localhost:9090no 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
Adicione o parâmetro
-fpara transmitir os logs do job em tempo real.Adicione o parâmetro
-t Nou--tail Npara visualizar apenas as últimas N linhas dos logs.Execute
arena logs --helppara 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