Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Submit a TensorFlow single-node training job with Arena

Dernière mise à jour :Aug 11, 2026

Soumettez une tâche d'entraînement distribué TensorFlow en mode PS-Worker et suivez sa progression avec TensorBoard.

Prérequis

Vérifiez que vous disposez des éléments suivants :

Étape 1 : Vérifier les ressources GPU disponibles

Consultez la disponibilité des GPU sur tous les nœuds :

arena top node

Résultat attendu :

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

Le cluster dispose de deux nœuds GPU, chacun offrant deux GPU inactifs.

Étape 2 : Soumettre une tâche d'entraînement distribué TensorFlow

Le format de la commande est arena submit tfjob/tf [--flag] command.

Important

Paramètres requis pour le mode PS-Worker :

  • --name : nom unique de la tâche

  • --ps : nombre de nœuds de serveur de paramètres (PS)

  • --workers : nombre de nœuds de travail (worker)

  • --ps-image : image du nœud PS (ou --image si l'image est partagée)

  • --worker-image : image du nœud worker (ou --image si l'image est partagée)

  • --gpus : nombre de GPU par worker (requis pour les charges de travail GPU)

Soumettez une tâche d'entraînement distribué avec un nœud PS et deux nœuds worker :

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"

Résultat attendu :

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

Le tableau ci-dessous répertorie les principaux paramètres. Pour obtenir la liste complète des options, exécutez arena submit tf --help.

Paramètre Obligatoire Description Valeur par défaut
--name Oui Nom unique de la tâche au sein du cluster. Aucune
--working-dir Non Répertoire de travail pour la commande d'entraînement. Le code synchronisé est placé sous code/. /root
--gpus Non Nombre de GPU alloués par nœud worker. 0
--workers Non Nombre de nœuds worker. 1
--image Requis sauf si --worker-image et --ps-image sont définis Image de conteneur pour les nœuds worker et PS. Elle est remplacée par --worker-image ou --ps-image. Aucune
--worker-image Requis sauf si --image est défini Image du nœud worker. Elle a priorité sur --image. Aucune
--ps Oui (tâches distribuées) Nombre de nœuds PS. 0
--ps-image Requis sauf si --image est défini Image du nœud PS. Elle a priorité sur --image. Aucune
--sync-mode Non Mode de synchronisation : git ou rsync. Aucune
--sync-source Non URL du dépôt source. À utiliser avec --sync-mode. Le code est téléchargé dans code/ sous --working-dir. Aucune
--data Non Monte un PVC. Format : <pvc-name>:<mount-path>. Exécutez arena data list pour afficher les PVC disponibles. Aucune
--tensorboard Non Active TensorBoard. Utilisez --logdir pour définir le chemin des données d'événement. Aucune
--logdir Non Chemin des données d'événement TensorBoard. À utiliser avec --tensorboard. /training_logs

Utilisation d'un dépôt Git privé

Arena utilise git-sync pour extraire le code source. Pour les dépôts privés, transmettez les identifiants sous forme de variables d'environnement :

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"

Définissez n'importe quelle variable d'environnement issue du projet git-sync à l'aide de --env.

Important

Si l'extraction depuis GitHub échoue en raison de problèmes réseau, l'image de démonstration contient le code à l'emplacement /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py. Soumettez la tâche sans --sync-mode ni --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"

Étape 3 : Surveiller la tâche d'entraînement

Répertoriez toutes les tâches soumises :

arena list

Résultat attendu :

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

Vérifiez les détails de la tâche :

arena get -n default tf-mnist-dist

Résultat attendu :

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
Remarque

Les lignes indiquant le point de terminaison TensorBoard n'apparaissent que si l'option --tensorboard est activée.

Vérifiez l'allocation des GPU par tâche :

arena top job

Résultat attendu :

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

Vérifiez l'allocation des GPU sur tous les nœuds :

arena top node

Résultat attendu :

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

Étape 4 : Consulter TensorBoard

Important

La commande kubectl port-forward est réservée au développement et au débogage. Pour la mise en production, utilisez la gestion des ingress.

  1. Redirigez TensorBoard vers le port local 9090 :

    kubectl port-forward -n default svc/tf-dist-tensorboard 9090:6006
  2. Ouvrez localhost:9090 dans un navigateur.

tf

Étape 5 : Afficher les journaux de la tâche d'entraînement

Par défaut, arena logs diffuse en continu les journaux de worker-0. Pour afficher d'autres instances, répertoriez-les avec arena get et spécifiez-en une avec -i.

Affichez les journaux par défaut (worker-0) :

arena logs -n default tf-dist

Résultat attendu :

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

Affichez les journaux d'une instance spécifique :

# Get the instance list
arena get tf-dist

Résultat attendu :

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

Résultat attendu :

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

Autres commandes de journalisation :

Commande Description
arena logs <job> -f Diffuse en continu la sortie des journaux en temps réel
arena logs <job> -t N Affiche les N dernières lignes des journaux
arena logs --help Répertorie toutes les options de journalisation

Affichez les 5 dernières lignes :

arena logs tf-dist -t 5

Résultat attendu :

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

(Facultatif) Étape 6 : Nettoyer les ressources

Une fois la tâche terminée, supprimez-la pour libérer les ressources :

arena delete -n default tf-mnist-dist

Résultat attendu :

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