Cette rubrique explique comment soumettre une tâche d'entraînement TensorFlow autonome avec Arena et la visualiser à l'aide de TensorBoard.
Prérequis
Vous avez créé un cluster Kubernetes avec des GPU. Pour plus d'informations, consultez Créer un cluster Kubernetes avec des GPU.
Les nœuds du cluster peuvent accéder au réseau public. Pour plus d'informations, consultez Activer l'accès au réseau public pour un cluster.
Le client Arena est installé. Pour plus d'informations, consultez Configurer le client Arena.
Vous avez créé une instance PVC nommée
training-dataet le jeu de données MNIST est stocké dans le chemin tf_data. Pour plus d'informations, consultez Configurer le stockage partagé NAS.
Contexte
Cet exemple télécharge le code source depuis un référentiel Git et utilise un jeu de données issu d'un système de stockage partagé basé sur des PV et des PVC gérés par NAS. Il suppose que vous disposez d'une instance PVC nommée training-data (un volume de stockage partagé) contenant le jeu de données dans un répertoire nommé tf_data.
Procédure
Étape 1 : Afficher les ressources GPU
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 résultat indique que le cluster dispose de deux nœuds GPU. Chaque nœud possède deux cartes GPU inactives disponibles pour les tâches d'entraînement.
Étape 2 : Soumettre une tâche TensorFlow
Exécutez la commande arena submit tfjob/tf [--flag] pour soumettre une tâche TensorFlow.
Utilisez la commande suivante pour soumettre une tâche TensorFlow autonome qui utilise un seul nœud et une seule carte 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"
Résultat attendu :
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
Le tableau suivant décrit les paramètres.
Paramètre | Obligatoire | Description | Valeur par défaut |
--name | Oui | Nom de la tâche. Il doit être globalement unique. | N/A |
--working-dir | Non | Répertoire dans lequel la commande est exécutée. | /root |
--gpus | Non | Nombre de cartes GPU utilisées par le nœud worker de la tâche. | 0 |
--image | Oui | URL de l'image pour l'environnement d'entraînement. | N/A |
--sync-mode | Non | Mode de synchronisation du code source. Les valeurs valides sont git et rsync. Cet exemple utilise git. | N/A |
--sync-source | Non | URL du référentiel de code source. Ce paramètre est requis lorsque vous spécifiez --sync-mode. Pour le mode git, ce paramètre peut correspondre à l'URL de n'importe quel référentiel de code basé sur Git, tel qu'un projet GitHub ou un projet Alibaba Cloud Code. Le code du projet est téléchargé dans le répertoire code/ situé dans le chemin spécifié par --working-dir. Dans cet exemple, le chemin est /root/code/arena. | N/A |
--data | Non | Monte un volume de stockage partagé (PVC) dans le conteneur de la tâche. Le format de la valeur est pvc-name Remarque Exécutez Si aucun PVC n'est disponible, vous devez en créer un. Pour plus d'informations, consultez Configurer le stockage partagé NAS. | N/A |
--tensorboard | Non | Active un service TensorBoard pour la visualisation des données. Utilisez ce paramètre avec --logdir pour spécifier le chemin d'accès aux fichiers d'événements lus par TensorBoard. | N/A |
--logdir | Non | Spécifie le chemin d'accès aux fichiers d'événements pour TensorBoard. Ce paramètre est requis lorsque --tensorboard est spécifié. | /training_logs |
Pour utiliser un référentiel Git privé, définissez vos identifiants à l'aide des variables d'environnement GIT_SYNC_USERNAME et 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"
Arena utilise git-sync pour synchroniser le code source. Vous pouvez donc utiliser n'importe quelle variable d'environnement prise en charge par le projet git-sync.
Si le téléchargement du code échoue en raison de problèmes réseau, vous pouvez le télécharger manuellement vers votre système de stockage partagé. L'image d'exemple fournie inclut également le code d'exemple à l'emplacement /code/github.com/kubeflow/arena/examples/tensorflow/mnist/main.py, ce qui vous permet de soumettre la tâche directement comme indiqué ci-dessous :
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"
Étape 3 : Vérifier l'état de la tâche
-
Exécutez la commande suivante pour répertorier toutes les tâches soumises avec Arena.
arena listRésultat attendu :
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE tf-mnist RUNNING TFJOB 3s 1 1 192.168.xxx.xxx -
Exécutez la commande suivante pour vérifier les ressources GPU utilisées par la tâche.
arena top jobRésultat attendu :
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 -
Exécutez la commande suivante pour vérifier les ressources GPU utilisées par le cluster.
arena top nodeRé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 1 cn-beijing.192.168.xxx.xxx 192.168.xxx.xxx <none> Ready 2 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 1/4 (25.0%) -
Exécutez la commande suivante pour afficher les détails de la tâche d'entraînement.
arena get -n default tf-mnistRésultat attendu :
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:31243RemarqueComme TensorBoard est activé, le résultat inclut l'URL de TensorBoard. Cette URL n'est pas affichée si TensorBoard est désactivé.
Étape 4 : Afficher TensorBoard
Consultez le tableau de bord TensorBoard à l'aide d'un navigateur web.
-
Exécutez la commande suivante pour transférer le service TensorBoard du cluster vers le port 9090 de votre machine locale.
Importantkubectl port-forwardest destiné uniquement au développement et au débogage ; il n'est ni fiable, ni sécurisé, ni évolutif pour la production. Pour la mise en réseau en production, consultez Présentation d'Ingress.kubectl port-forward -n default svc/tf-mnist-tensorboard 9090:6006 -
Ouvrez
http://localhost:9090dans votre navigateur pour afficher le tableau de bord TensorBoard.Le panneau SCALARS de TensorBoard affiche deux courbes : train (rouge) et test (bleu). La métrique accuracy_1 converge vers une valeur supérieure à 0,96 après environ 1 000 étapes, et la métrique cross_entropy_1 chute jusqu'à environ 0,05 à 0,10. Cela indique que le modèle MNIST a été entraîné avec succès. Dans le panneau de gauche, vous pouvez ajuster les options d'affichage telles que Smoothing (actuellement 0,6) et Horizontal Axis (actuellement STEP). Le chemin des journaux est
/mnt/tf_data/logs.
Étape 5 : Afficher les journaux de la tâche
Exécutez la commande suivante pour obtenir les journaux de la tâche.
arena logs -n default tf-mnist
Résultat attendu :
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
Pour diffuser les journaux de la tâche en temps réel, ajoutez le paramètre
-f.Pour afficher uniquement les N dernières lignes des journaux, ajoutez le paramètre
-t Nou--tail N.Pour plus d'options, exécutez
arena logs --help.
(Facultatif) Étape 6 : Nettoyer l'environnement
Une fois la tâche d'entraînement terminée, supprimez-la en exécutant la commande suivante :
arena delete -n default tf-mnist
Résultat attendu :
INFO[0002] The training job tf-mnist has been deleted successfully