Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Utiliser Arena pour soumettre des tâches d'entraînement PyTorch autonomes

Dernière mise à jour :Aug 11, 2026

Arena est un outil en ligne de commande destiné à la gestion des charges de travail de machine learning sur Kubernetes. Ce guide explique comment soumettre une tâche d'entraînement PyTorch autonome sur un cluster Container Service for Kubernetes (ACK), en utilisant soit un seul GPU, soit plusieurs GPU sur un même nœud, et comment visualiser la progression de l'entraînement avec TensorBoard.

À l'issue de ce guide, vous aurez :

  • Vérifié la disponibilité des GPU dans votre cluster

  • Soumis une tâche d'entraînement PyTorch à l'aide de arena submit pytorch

  • Surveillé le statut de la tâche et l'utilisation des GPU

  • Accédé à TensorBoard pour visualiser les résultats de l'entraînement

  • Consulté les journaux d'entraînement

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

Fonctionnement de torchrun et git-sync dans ce guide

Ce guide utilise torchrun, le lanceur intégré de PyTorch pour l'entraînement sur un nœud unique. Il gère le lancement des processus et l'initialisation distribuée, vous offrant ainsi le même flux de travail, que vous utilisiez un seul GPU ou plusieurs GPU sur le même nœud.

Le code d'entraînement est extrait d'un dépôt Git distant à l'aide de git-sync. Les données d'entraînement sont lues depuis un volume File Storage NAS (NAS) partagé, monté via un volume persistant (PV) et une PVC. L'exemple s'appuie sur le fichier main.py issu du dépôt Arena.

GPU unique ou multiples : Utilisez un seul GPU pour les modèles standards qui tiennent dans la mémoire d'un GPU. Optez pour plusieurs GPU sur un même nœud lorsque votre modèle ou la taille de lot dépasse la capacité mémoire d'un seul GPU, ou si vous souhaitez accélérer l'entraînement grâce au parallélisme des données. Basculez d'une configuration à l'autre en ajustant les paramètres --gpus et --nproc-per-node.

Étape 1 : Vérifier la disponibilité des GPU

Exécutez la commande suivante pour connaître le nombre de GPU disponibles dans le cluster :

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

La sortie indique deux nœuds accélérés par GPU, chacun disposant de deux GPU inactifs, soit quatre GPU au total disponibles pour l'entraînement.

Étape 2 : Soumettre une tâche d'entraînement PyTorch

Tâche sur GPU unique

Exécutez la commande suivante pour soumettre une tâche d'entraînement PyTorch autonome utilisant un seul 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"

Résultat attendu :

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

Tâche multi-GPU

Pour utiliser deux GPU sur le même nœud, définissez --gpus=2 et --nproc-per-node=2. torchrun lance alors deux processus d'entraînement, un par 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"

Paramètres

Paramètre Obligatoire Description Par défaut
--name Oui Nom de la tâche. Doit être unique dans le cluster. Sans objet
--namespace Non Namespace Kubernetes default
--workers Non Nombre de nœuds de calcul. Le nœud maître est inclus — une valeur de 1 signifie que la tâche s'exécute uniquement sur le nœud maître. 1
--gpus Non Nombre de GPU alloués à chaque nœud de calcul 0
--nproc-per-node Non Nombre de processus d'entraînement par nœud. Définissez cette valeur égale à --gpus pour obtenir un processus par GPU. Sans objet
--working-dir Non Répertoire dans lequel la commande d'entraînement s'exécute /root
--image Oui Image de conteneur utilisée pour exécuter la tâche d'entraînement Sans objet
--sync-mode Non Mode de synchronisation du code source. Valeurs valides : git, rsync. Sans objet
--sync-source Non URL du dépôt pour la synchronisation du code source. Utilisé conjointement avec --sync-mode. Le code est téléchargé dans le répertoire code/ situé sous --working-dir. Sans objet
--data Non Monte une PVC dans le conteneur d'entraînement. Format : <pvc-name>:<mount-path>. Exécutez arena data list pour afficher les PVC disponibles. Sans objet
--tensorboard Non Active TensorBoard pour la visualisation des résultats d'entraînement. Requiert le paramètre --logdir. Sans objet
--logdir Non Chemin où TensorBoard lit les fichiers d'événements. /training_logs

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

Si votre dépôt nécessite une authentification, transmettez les identifiants via les variables d'environnement 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"

Toutes les variables d'environnement prises en charge par git-sync peuvent être transmises de cette manière. Consultez la documentation git-sync pour la liste complète.

Si le dépôt GitHub est inaccessible

Si le code ne peut pas être extrait de GitHub en raison de problèmes réseau, téléchargez-le manuellement sur votre volume NAS à l'emplacement /code/github.com/kubeflow/arena. Soumettez ensuite la tâche sans spécifier --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"

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

Répertorier les tâches

Exécutez la commande suivante pour lister toutes les tâches Arena dans le namespace :

arena list -n default

Résultat attendu :

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

Vérifier l'utilisation des GPU

Exécutez la commande suivante pour afficher l'allocation des GPU pour les tâches en cours d'exécution :

arena top job -n default

Résultat attendu :

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

Exécutez la commande suivante pour visualiser l'utilisation des GPU sur tous les nœuds du cluster :

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           1
cn-beijing.192.168.xxx.xxx  192.168.xxx.xxx  <none>  Ready   2           0
---------------------------------------------------------------------------------------------------
Allocated/Total GPUs In Cluster:
1/4 (25.0%)

Un GPU est désormais alloué.

Afficher les détails de la tâche

Exécutez la commande suivante pour afficher les détails complets de la tâche, y compris l'URL TensorBoard :

arena get pytorch-mnist -n default

Résultat attendu :

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
Remarque

L'URL TensorBoard apparaît dans les détails de la tâche uniquement si le paramètre --tensorboard a été spécifié lors de la soumission de la tâche.

Étape 4 : Accéder à TensorBoard

  1. Sur votre machine locale, redirigez le port 6006 du service TensorBoard vers le port local 9090 :

    Important

    La commande kubectl port-forward est destinée uniquement au développement et au débogage. Elle n'est ni fiable, ni sécurisée, ni évolutive pour un usage en production. Pour des solutions de mise en réseau adaptées à la production dans les clusters ACK, consultez la section Gestion Ingress.

    kubectl port-forward -n default svc/pytorch-mnist-tensorboard 9090:6006
  2. Ouvrez <http://127.0.0.1:9090> dans un navigateur web pour accéder à TensorBoard.

    Remarque

    Le code d'entraînement écrit les résultats dans des fichiers d'événements toutes les 10 époques. Si vous modifiez le paramètre --epochs, définissez-le comme un multiple de 10 ; sinon, TensorBoard n'affichera aucun résultat d'entraînement.

    pytorch single node

Étape 5 : Consulter les journaux d'entraînement

Exécutez la commande suivante pour afficher les journaux d'entraînement :

arena logs pytorch-mnist -n default

Résultat attendu :

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

Pour diffuser les journaux en temps réel, ajoutez l'option -f. Pour afficher uniquement les N dernières lignes, utilisez -t N ou --tail N. Pour consulter toutes les options disponibles, exécutez arena logs --help.

(Facultatif) Étape 6 : Nettoyer les ressources

Pour supprimer la tâche d'entraînement et libérer les ressources GPU :

arena delete pytorch-mnist -n default

Résultat attendu :

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

Étapes suivantes