Entraîner, interpréter et ajuster finement les exécutions
Lance une exécution cloud dans les limites de ton budget, évalue-la à partir de ses courbes par époque et effectue un ajustement fin sans que l’optimiseur par défaut ignore ton taux d’apprentissage.
Un GPU cloud est facturé chaque minute pendant laquelle une exécution vouée à l’échec continue, et l’erreur d’ajustement fin la plus courante ne coûte rien, mais gaspille discrètement l’exécution : l’optimiseur par défaut ignore le taux d’apprentissage que tu définis. Cette leçon entraîne un vrai modèle sur le jeu de données medical pills, interprète ses courbes à l’aide d’une règle de décision et effectue un ajustement fin pour que tes paramètres soient réellement appliqués.
Pratique
Lancer une exécution#
Clique sur Nouveau modèle sur une page de projet ou de jeu de données. L’onglet Entraînement cloud te guide dans les paramètres suivants :

| Paramètre | Par défaut | À modifier quand |
|---|---|---|
| Modèle de base | Choisis-en un sous Officiel (YOLO26 est recommandé) | Pour effectuer un ajustement fin, choisis ton exécution antérieure sous Mes modèles |
| Jeu de données | — | Active toujours Enregistrer la version du jeu de données pour associer l’exécution à ses données |
| Époques | 100 | Test rapide (10–20) ou très grands jeux de données |
| Taille de lot | -1 (s’adapte automatiquement à la mémoire du GPU) | Tu as besoin de deux exécutions pour que la comparaison soit parfaitement équitable |
| Taille de l’image | 640 | Les objets sont petits : augmente-la (le curseur s’arrête à 1280 ; l’éditeur YAML accepte jusqu’à 4096) |
| Paramètres avancés | Valeurs par défaut | Plus de 50 arguments model.train() en YAML, dont l’optimiseur, le taux d’apprentissage et l’augmentation des données |
Les arguments sont les mêmes que ceux acceptés localement par model.train(...), et la page du modèle affiche ensuite une commande yolo train que tu peux copier, avec les valeurs non définies par défaut.
Choisir le GPU et établir le budget de l’exécution#
| Catégorie | Exemples (VRAM, prix horaire) | Adapté à |
|---|---|---|
| Entrée de gamme | RTX 2000 Ada (16 Go, 0,24 $), RTX A5000 (24 Go, 0,27 $), RTX 4090 (24 Go, 0,69 $) | Tests rapides, modèles nano et petits modèles |
| Intermédiaire | L40S (48 Go, 0,86 $), RTX 5090 (32 Go, 0,99 $), A100 SXM (80 Go, 1,49 $) | Modèles moyens, lots plus volumineux |
| Par défaut | RTX PRO 6000 (96 Go, 2,09 $) | La plupart des tâches |
| Haut de gamme | H100 SXM (80 GB, 3,29 $), H200 SXM (141 GB, 4,39 $) | Grands jeux de données quand le temps compte |
| Pro et Enterprise | B200 (180 GB, 5,89 $), B300 (288 GB, 7,39 $) | Les tâches les plus volumineuses |
La carte de coût estime la durée et le prix avant le démarrage : environ 0,23 $ pour 1 000 images × YOLO26n × 100 époques sur le RTX PRO 6000 par défaut, et environ 1,56 $ pour 5 000 images × YOLO26s × 100 époques sur un H100 SXM, qui entraîne environ 3,4× plus vite qu’un RTX 4090. La facturation se base sur le temps GPU réel : les exécutions terminées, annulées et échouées sont facturées dès qu’un GPU a démarré, une exécution nécessite un solde couvrant son estimation (au moins 15 minutes de temps GPU), et les exécutions actives s’arrêtent si le solde devient négatif. Active donc le rechargement automatique dans Settings > Billing pour les tâches longues. Si tu sélectionnes un GPU moins cher que le RTX PRO 6000, tu peux bénéficier gratuitement de ce dernier lorsque la capacité gérée par Ultralytics est inactive, tout en étant facturé au tarif du GPU sélectionné.
Règles de décision : teste rapidement un nouveau jeu de données avec 10 à 20 époques sur le GPU par défaut. Passe à un H100 ou H200 lorsqu’une exécution prend des heures et que quelqu’un l’attend. Choisis un GPU moins cher, pas plus rapide, lorsque l’utilisation du GPU reste faible.
Surveiller l’exécution#
L’onglet Train de la page du modèle diffuse les données dans trois sous-onglets. Charts trace les métriques, les pertes d’entraînement et de validation, ainsi que le taux d’apprentissage pour chaque époque ; Console conserve les 2 000 dernières lignes et arrête immédiatement l’exécution en cas de traceback ou d’erreur CUDA de mémoire insuffisante ; System affiche l’utilisation, la mémoire et la température du GPU :


Une exécution qui ne rapporte rien pendant 4 heures est marquée comme échouée. Le meilleur checkpoint est téléversé périodiquement, donc une exécution annulée conserve sa meilleure époque à ce stade, et les alertes Slack peuvent t’informer de la réussite ou de l’échec des exécutions.
Exemple pratique : entraîner, diffuser et analyser une exécution#
Tu peux entraîner où que ce soit et suivre quand même l’exécution dans Platform. Avec une clé API obtenue dans Settings > API Keys et exportée sous la forme ULTRALYTICS_API_KEY, un project de la forme username/project diffuse les graphiques, la console et le meilleur checkpoint dans ce projet :
from ultralytics import YOLO
# export ULTRALYTICS_API_KEY="..." first to stream this run into your Platform project
model = YOLO("yolo26n.pt")
results = model.train(data="medical-pills.yaml", epochs=10, imgsz=320, project="username/pill-inspection", name="v1-baseline")
print(f"mAP50-95 {results.box.map:.3f}, best checkpoint: {model.trainer.best}") Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.97 0.957 0.977 0.659
mAP50-95 0.659, best checkpoint: .../runs/detect/username/pill-inspection/v1-baseline/weights/best.ptLa même commande s’exécute sur les GPU de Platform lorsque tu cliques sur New Model ; en local, elle a pris moins de deux minutes sur le CPU d’un ordinateur portable avec imgsz=320. Le results.csv de l’exécution contient les séries par époque tracées dans le sous-onglet Charts. Quelques lignes suffisent donc à transformer « surveiller les courbes » en règle :
import pandas as pd
df = pd.read_csv("results.csv") # the per-epoch metrics behind the Charts subtab
df.columns = df.columns.str.strip()
m = df["metrics/mAP50-95(B)"]
best_epoch = int(df.loc[m.idxmax(), "epoch"])
recent_gain = m.iloc[-1] - m.iloc[-4] # change over the last 3 epochs
val_loss = df["val/box_loss"]
print(f"epochs={len(df)} best mAP50-95={m.max():.3f} at epoch {best_epoch}")
print(f"gain over last 3 epochs: {recent_gain:+.3f}")
print(f"val box loss: {val_loss.iloc[0]:.3f} -> {val_loss.iloc[-1]:.3f}")
if recent_gain < 0.005 and val_loss.iloc[-1] >= val_loss.iloc[-4]:
print("verdict: plateaued - stop, and fix the data before training longer")
elif best_epoch == len(df):
print("verdict: still improving at the last epoch - more epochs should help")
else:
print("verdict: converged - keep best.pt")epochs=10 best mAP50-95=0.659 at epoch 10
gain over last 3 epochs: +0.028
val box loss: 1.367 -> 1.045
verdict: still improving at the last epoch - more epochs should helpLa meilleure époque est la dernière, mAP50-95 a augmenté de 2,8 points au cours des trois dernières époques et la perte de validation continue de diminuer : cette exécution de 10 époques s’est arrêtée trop tôt, et une exécution plus longue ou un ajustement fin sera utile. Applique ces trois mêmes indicateurs à toute exécution de Platform dans le sous-onglet Charts : la position de la meilleure époque, le gain récent et l’évolution de la perte de validation.
Ajuster un modèle antérieur#
Choisis ton modèle précédent dans My Models comme modèle de base ; Platform crée un nouveau modèle qui repart de ce checkpoint et laisse l’ancien inchangé. En général, on recommande un taux d’apprentissage plus faible, mais avec le paramètre par défaut optimizer: auto, l’entraînement choisit son propre optimiseur et son propre taux d’apprentissage et ignore lr0. La console le précise dans les premières lignes :
optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and determining best 'optimizer' and 'lr0' automatically...
optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)Définis explicitement optimizer dans Advanced Settings pour que la valeur soit prise en compte. Voici les journaux de l’ajustement fin du modèle des pilules pendant 5 époques supplémentaires avec optimizer: SGD et lr0: 0.001 :
optimizer: SGD(lr=0.001, momentum=0.937) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)
all 23 399 0.969 0.962 0.983 0.687mAP50-95 est passé de 0.659 à 0.687. Dans la prochaine leçon, tu soumettras ce candidat à une étape de validation avant sa promotion.

Pour reproduire une exécution antérieure, ouvre son tableau Training Configuration sur la page du modèle, choisis Copy JSON et colle le résultat dans Advanced Settings. Le guide d’ajustement fin explique le gel des couches, et le guide de réglage des hyperparamètres explique les balayages systématiques.
Pièges#
Symptôme : tu définis lr0: 0.001, et la console affiche ignoring 'lr0=...'. Correctif : avec optimizer: auto, l’entraînement choisit lui-même l’optimiseur et le taux d’apprentissage. Définis optimizer sur SGD ou AdamW en même temps que lr0, puis vérifie la ligne optimizer: dans la console.
Symptôme : le sous-onglet System indique une utilisation du GPU bien inférieure à 80 % pendant toute l’exécution. Correctif : le goulot d’étranglement est le chargement des données, pas le GPU ; un GPU plus rapide ne ferait qu’augmenter les coûts. Choisis un GPU moins cher ou augmente la taille du lot si la mémoire le permet.
Symptôme : le mAP50-95 de validation stagne depuis 10 époques, tandis que la perte de validation augmente lentement. Correctif : annule l’entraînement. Le meilleur point de contrôle obtenu jusqu’ici est conservé, et le prochain gain viendra des données (leçons 3 et 4), pas d’un plus grand nombre d’époques.
Afficher la solution
Exemple de réponse pour les pilules médicales : la référence de 10 époques atteint son meilleur résultat à l’époque 10, avec mAP50-95 à 0.659, une hausse de +0.028 au cours des trois dernières époques et une perte de boîte de validation qui diminue de 1.367 à 1.045. La décision est donc « continuer ». Plutôt que de tout réentraîner, effectue un ajustement fin : modèle de base v1-baseline dans My Models, 5 époques, Advanced Settings optimizer: SGD et lr0: 0.001. La console confirme SGD(lr=0.001, momentum=0.937), et mAP50-95 atteint 0.687. Le coût sur le GPU par défaut est de quelques centimes ; la carte de coût affiche l’estimation avant que tu cliques sur Start Training, et Settings > Billing affiche le montant réel après l’entraînement.