Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use Arena to submit standalone PyTorch training jobs

Última atualização: Jun 27, 2026

O Arena é uma ferramenta CLI para gerenciar cargas de trabalho de machine learning no Kubernetes. Este guia mostra como enviar um job de treinamento PyTorch autônomo em um cluster Container Service for Kubernetes (ACK) — com uma ou mais GPUs em um único nó — e visualizar o progresso do treinamento com o TensorBoard.

Ao final deste guia, você terá:

  • Verificado a disponibilidade de GPUs no cluster

  • Enviado um job de treinamento PyTorch com arena submit pytorch

  • Monitorado o status do job e o uso da GPU

  • Acessado o TensorBoard para visualizar os resultados do treinamento

  • Visualizado os logs de treinamento

Pré-requisitos

Antes de começar, verifique se você tem:

Como torchrun e git-sync funcionam neste guia

Este guia usa o torchrun, launcher nativo do PyTorch para treinamento em nó único. Ele gerencia a criação de processos e a inicialização distribuída, mantendo o mesmo fluxo de trabalho para execução em uma ou várias GPUs no mesmo nó.

O código de treinamento vem de um repositório Git remoto via git-sync. Os dados de treinamento são lidos de um volume compartilhado File Storage NAS (NAS), montado por meio de um persistent volume (PV) e uma PVC. O exemplo usa o arquivo main.py do repositório do Arena.

GPU única vs. múltiplas GPUs: Use uma única GPU para modelos de tamanho padrão que caibam na memória de uma GPU. Utilize múltiplas GPUs em um único nó quando o modelo ou o tamanho do batch exceder a memória de uma única GPU, ou para acelerar o treinamento com paralelismo de dados. Alterne entre as opções ajustando os parâmetros --gpus e --nproc-per-node.

Etapa 1: Verificar a disponibilidade de GPUs

Execute o comando abaixo para verificar quantas GPUs estão disponíveis no cluster:

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 dois nós acelerados por GPU, cada um com duas GPUs ociosas, totalizando quatro GPUs disponíveis para treinamento.

Etapa 2: Enviar um job de treinamento PyTorch

Job com GPU única

Execute o comando abaixo para enviar um job de treinamento PyTorch autônomo usando uma GPU:

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=1 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=v0.13.1 \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"

Saída esperada:

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

Job com múltiplas GPUs

Para usar duas GPUs no mesmo nó, defina --gpus=2 e --nproc-per-node=2. O torchrun iniciará dois processos de treinamento, um por GPU:

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=2 \
    --nproc-per-node=2 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=v0.13.1 \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"

Parâmetros

Parâmetro

Obrigatório

Descrição

Padrão

--name

Sim

Nome do job. Deve ser único no cluster.

N/A

--namespace

Não

Namespace do Kubernetes

default

--workers

Não

Número de nós workers. O nó mestre está incluído; o valor 1 significa que o job executa apenas no nó mestre.

1

--gpus

Não

Quantidade de GPUs alocadas para cada nó worker

0

--nproc-per-node

Não

Número de processos de treinamento por nó. Defina como igual a --gpus para ter um processo por GPU.

N/A

--working-dir

Não

Diretório onde o comando de treinamento é executado

/root

--image

Sim

Imagem de contêiner usada para executar o job de treinamento

N/A

--sync-mode

Não

Modo de sincronização do código-fonte. Valores válidos: git, rsync.

N/A

--sync-source

Não

URL do repositório para sincronização do código-fonte. Usado com --sync-mode. O código é baixado para o diretório code/ dentro de --working-dir.

N/A

--data

Não

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

N/A

--tensorboard

Não

Habilita o TensorBoard para visualização dos resultados de treinamento. Requer --logdir.

N/A

--logdir

Não

Caminho onde o TensorBoard lê os arquivos de eventos.

/training_logs

Uso de repositório Git privado

Se o repositório exigir autenticação, passe as credenciais por variáveis de ambiente do git-sync:

arena submit pytorch \
    ...
    --sync-mode=git \
    --sync-source=https://github.com/kubeflow/arena.git \
    --env=GIT_SYNC_BRANCH=v0.13.1 \
    --env=GIT_SYNC_USERNAME=<username> \
    --env=GIT_SYNC_PASSWORD=<password> \
    "torchrun /root/code/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"

Todas as variáveis de ambiente suportadas pelo git-sync podem ser passadas dessa forma. Consulte a documentação do git-sync para obter a lista completa.

Se o repositório GitHub estiver inacessível

Caso não seja possível obter o código do GitHub devido a problemas de rede, baixe-o manualmente para o volume NAS em /code/github.com/kubeflow/arena. Em seguida, envie o job sem o parâmetro --sync-mode:

arena submit pytorch \
    --name=pytorch-mnist \
    --namespace=default \
    --workers=1 \
    --gpus=1 \
    --working-dir=/root \
    --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/pytorch-with-tensorboard:2.5.1-cuda12.4-cudnn9-runtime \
    --data=training-data:/mnt \
    --tensorboard \
    --logdir=/mnt/pytorch_data/logs \
    "torchrun /mnt/code/github.com/kubeflow/arena/examples/pytorch/mnist/main.py --epochs 10 --backend nccl --data /mnt/pytorch_data --dir /mnt/pytorch_data/logs"

Etapa 3: Monitorar o job de treinamento

Listar jobs

Execute o comando abaixo para listar todos os jobs do Arena no namespace:

arena list -n default

Saída esperada:

NAME           STATUS   TRAINER     DURATION  GPU(Requested)  GPU(Allocated)  NODE
pytorch-mnist  RUNNING  PYTORCHJOB  11s       1               1               192.168.xxx.xxx

Verificar o uso de GPU

Execute o comando abaixo para ver a alocação de GPU dos jobs em execução:

arena top job -n default

Saída esperada:

NAME           STATUS   TRAINER     AGE  GPU(Requested)  GPU(Allocated)  NODE
pytorch-mnist  RUNNING  PYTORCHJOB  18s  1               1               192.168.xxx.xxx

Total Allocated/Requested GPUs of Training Jobs: 1/1

Para ver o uso de GPU em todos os nós do cluster, execute:

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

Uma GPU agora está alocada.

Visualizar detalhes do job

Execute o comando abaixo para ver os detalhes completos do job, incluindo a URL do TensorBoard:

arena get pytorch-mnist -n default

Saída esperada:

Name:        pytorch-mnist
Status:      RUNNING
Namespace:   default
Priority:    N/A
Trainer:     PYTORCHJOB
Duration:    45s
CreateTime:  2025-02-12 11:20:10
EndTime:

Instances:
  NAME                    STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
  ----                    ------   ---  --------  --------------  ----
  pytorch-mnist-master-0  Running  45s  true      1               cn-beijing.192.168.xxx.xxx

Tensorboard:
  Your tensorboard will be available on:
  http://192.168.xxx.xxx:31949
Nota

A URL do TensorBoard aparece nos detalhes do job apenas se --tensorboard tiver sido especificado ao enviar o job.

Etapa 4: Acessar o TensorBoard

  1. Na máquina local, encaminhe a porta 6006 do serviço TensorBoard para a porta local 9090:

    Importante

    O comando kubectl port-forward destina-se apenas a desenvolvimento e depuração. Ele não é confiável, seguro ou escalável para uso em produção. Para soluções de rede de produção em clusters ACK, consulte Gerenciamento de Ingress.

    kubectl port-forward -n default svc/pytorch-mnist-tensorboard 9090:6006
  2. Abra <http://127.0.0.1:9090> em um navegador web para acessar o TensorBoard.

    Nota

    O código de treinamento grava resultados em arquivos de eventos a cada 10 épocas. Se alterar --epochs, defina um múltiplo de 10; caso contrário, o TensorBoard não exibirá nenhum resultado de treinamento.

    pytorch single node

Etapa 5: Visualizar logs de treinamento

Execute o comando abaixo para visualizar os logs de treinamento:

arena logs pytorch-mnist -n default

Saída esperada:

Train Epoch: 10 [55680/60000 (93%)]     Loss: 0.025778
Train Epoch: 10 [56320/60000 (94%)]     Loss: 0.086488
Train Epoch: 10 [56960/60000 (95%)]     Loss: 0.003240
Train Epoch: 10 [57600/60000 (96%)]     Loss: 0.046731
Train Epoch: 10 [58240/60000 (97%)]     Loss: 0.010752
Train Epoch: 10 [58880/60000 (98%)]     Loss: 0.010934
Train Epoch: 10 [59520/60000 (99%)]     Loss: 0.065813

Accuracy: 9921/10000 (99.21%)

Para transmitir logs em tempo real, adicione -f. Para visualizar apenas as últimas N linhas, adicione -t N ou --tail N. Para todas as opções, execute arena logs --help.

(Opcional) Etapa 6: Limpar recursos

Para excluir o job de treinamento e liberar recursos de GPU:

arena delete pytorch-mnist -n default

Saída esperada:

INFO[0001] The training job pytorch-mnist has been deleted successfully

Próximos passos