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:
Um cluster Kubernetes com nós GPU foi criado.
Os nós do cluster têm acesso à rede pública.
O cliente Arena está instalado.
Uma Persistent Volume Claim (PVC) chamada
training-datacontém o conjunto de dados MNIST emtf_data. Consulte Configurar armazenamento compartilhado NAS.
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.
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--imagese compartilhada)--worker-image— imagem do nó worker (ou--imagese 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 |
|
|
Sim |
Nome exclusivo do job no cluster. |
Nenhum |
|
|
Não |
Diretório de trabalho do comando de treinamento. O código sincronizado fica em |
|
|
|
Não |
GPUs alocadas por nó worker. |
|
|
|
Não |
Quantidade de nós workers. |
|
|
|
Obrigatório, a menos que |
Imagem de contêiner para nós worker e PS. Substituído por |
Nenhum |
|
|
Obrigatório, a menos que |
Imagem do nó worker. Tem precedência sobre |
Nenhum |
|
|
Sim (jobs distribuídos) |
Quantidade de nós PS. |
|
|
|
Obrigatório, a menos que |
Imagem do nó PS. Tem precedência sobre |
Nenhum |
|
|
Não |
Modo de sincronização: |
Nenhum |
|
|
Não |
URL do repositório de origem. Use com |
Nenhum |
|
|
Não |
Monta uma PVC. Formato: |
Nenhum |
|
|
Não |
Ativa o TensorBoard. Use |
Nenhum |
|
|
Não |
Caminho dos dados de evento do TensorBoard. Use com |
|
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.
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
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
O comando kubectl port-forward destina-se apenas a desenvolvimento e depuração. Para redes de produção, use o gerenciamento de Ingress.
-
Encaminhe o TensorBoard para a porta local 9090:
kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006 Abra
localhost:9090em um navegador.

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 |
|
|
Exibe a saída de log em tempo real |
|
|
Mostra as últimas N linhas dos logs |
|
|
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