Entrenar, interpretar y ajustar ejecuciones
Inicia una ejecución en la nube con un presupuesto definido, evalúala a partir de las curvas por época y realiza un ajuste fino sin que el optimizador predeterminado ignore tu tasa de aprendizaje.
Una GPU en la nube se factura por cada minuto que sigue ejecutándose un entrenamiento condenado al fracaso; el error más habitual al ajustar un modelo no cuesta nada, pero desperdicia la ejecución en silencio: el optimizador predeterminado ignora la tasa de aprendizaje que configuras. En esta lección entrenarás un modelo real con el conjunto de datos medical pills, interpretarás sus curvas con una regla de decisión y ajustarás el modelo para que se apliquen tus parámetros.
Práctico
Iniciar una ejecución#
Haz clic en New Model en la página de un proyecto o conjunto de datos. La pestaña Cloud Training te guía por estos ajustes:

| Parámetro | Predeterminado | Cuándo cambiarlo |
|---|---|---|
| Modelo base | Elige uno en Official (se recomienda YOLO26) | Si vas a ajustar un modelo, elige la ejecución anterior en My Models |
| Conjunto de datos | — | Activa siempre Save Dataset Version para vincular la ejecución a sus datos |
| Épocas | 100 | Prueba rápida (10–20) o conjuntos de datos muy grandes |
| Tamaño del lote | -1 (se ajusta automáticamente a la memoria de la GPU) | Necesitas dos ejecuciones para que sean exactamente comparables |
| Tamaño de imagen | 640 | Los objetos son pequeños: auméntalo (el control deslizante llega hasta 1280; el editor YAML admite hasta 4096) |
| Ajustes avanzados | Valores predeterminados | Más de 50 argumentos model.train() en YAML, incluidos el optimizador, la tasa de aprendizaje y el aumento de datos |
Son los mismos argumentos que model.train(...) acepta localmente; más adelante, la página del modelo muestra un comando yolo train que puedes copiar y que incluye los valores no predeterminados.
Elige la GPU y calcula el presupuesto de la ejecución#
| Categoría | Ejemplos (VRAM, precio por hora) | Ideal para |
|---|---|---|
| Económica | RTX 2000 Ada (16 GB, 0,24 $), RTX A5000 (24 GB, 0,27 $), RTX 4090 (24 GB, 0,69 $) | Pruebas rápidas, modelos nano y pequeños |
| Intermedia | L40S (48 GB, 0,86 $), RTX 5090 (32 GB, 0,99 $), A100 SXM (80 GB, 1,49 $) | Modelos medianos y lotes más grandes |
| Predeterminado | RTX PRO 6000 (96 GB, 2,09 $) | La mayoría de los trabajos |
| Gama alta | H100 SXM (80 GB, 3,29 $), H200 SXM (141 GB, 4,39 $) | Conjuntos de datos grandes cuando el tiempo importa |
| Pro y Enterprise | B200 (180 GB, 5,89 $), B300 (288 GB, 7,39 $) | Los trabajos más grandes |
La tarjeta de costes estima la duración y el precio antes de empezar: unos 0,23 $ por 1000 imágenes × YOLO26n × 100 épocas en la RTX PRO 6000 predeterminada, y unos 1,56 $ por 5000 imágenes × YOLO26s × 100 épocas en una H100 SXM, que entrena aproximadamente 3,4 veces más rápido que una RTX 4090. La facturación se basa en el tiempo real de GPU: se cobran las ejecuciones completadas, canceladas y fallidas una vez que se ha iniciado la GPU; una ejecución requiere un saldo que cubra su coste estimado (al menos 15 minutos de tiempo de GPU), y las ejecuciones activas se detienen si el saldo queda en negativo, así que activa la recarga automática en Settings > Billing para los trabajos largos. Si seleccionas una GPU más barata que la RTX PRO 6000, puedes obtener una mejora gratuita a esta cuando haya capacidad gestionada por Ultralytics inactiva, y se te seguirá cobrando la tarifa seleccionada.
Reglas para decidir: prueba primero un conjunto de datos nuevo con 10–20 épocas en la GPU predeterminada. Pásate a una H100 o H200 cuando una ejecución tarde horas y alguien esté esperando. Elige una GPU más barata, no más rápida, cuando la utilización de la GPU sea baja.
Supervisa la ejecución#
La pestaña Train de la página del modelo muestra tres subpestañas en tiempo real. Charts representa las métricas, las pérdidas de entrenamiento y validación, y la tasa de aprendizaje por época; Console conserva las últimas 2000 líneas y detiene la ejecución de inmediato si se produce un traceback o un error de falta de memoria de CUDA; System muestra la utilización, la memoria y la temperatura de la GPU:


Una ejecución que no informa de nada durante 4 horas se marca como fallida. El mejor punto de control se carga periódicamente, por lo que una ejecución cancelada conserva la mejor época alcanzada hasta el momento, y las alertas de Slack pueden avisarte cuando las ejecuciones terminen o fallen.
Ejemplo práctico: entrena, transmite y consulta una ejecución#
Puedes entrenar en cualquier lugar y seguir la ejecución en Platform. Con una clave de API exportada desde Settings > API Keys como ULTRALYTICS_API_KEY, un project del formato username/project transmite los gráficos, la consola y el mejor punto de control a ese proyecto:
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.ptEl mismo comando se ejecuta en las GPU de Platform al hacer clic en New Model; localmente tardó menos de dos minutos en la CPU de un portátil con imgsz=320. El results.csv de la ejecución contiene las series por época que representa la subpestaña Charts, así que bastan unas pocas líneas para convertir «vigila las curvas» en una regla:
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 mejor época es la última, mAP50-95 ha subido 2,8 puntos en las tres últimas épocas y la pérdida de validación sigue bajando: esta ejecución de 10 épocas se ha detenido antes de tiempo, y será útil alargarla o ajustar el modelo. Usa las mismas tres señales en la subpestaña Charts de cualquier ejecución de Platform: dónde se sitúa la mejor época, la mejora reciente y la tendencia de la pérdida de validación.
Ajusta un modelo anterior#
Elige tu modelo anterior en My Models como modelo base; Platform crea un modelo nuevo que parte de ese punto de control y deja el anterior sin cambios. Lo habitual es usar una tasa de aprendizaje menor, pero con el valor predeterminado optimizer: auto, el entrenamiento elige su propio optimizador y tasa de aprendizaje e ignora lr0. La consola lo indica en las primeras líneas:
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)Establece explícitamente optimizer en Advanced Settings para que se aplique el valor. Los registros del ajuste del modelo de pastillas durante 5 épocas más con optimizer: SGD y lr0: 0.001 son:
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 ha subido de 0,659 a 0,687. En la siguiente lección someterás este candidato a un proceso de promoción.

Para reproducir una ejecución anterior, abre su tabla Training Configuration en la página del modelo, elige Copy JSON y pégalo en Advanced Settings. La guía de ajuste fino explica cómo congelar capas, y la guía de ajuste de hiperparámetros explica cómo realizar barridos sistemáticos.
Errores habituales#
Síntoma: estableces lr0: 0.001 y la consola muestra ignoring 'lr0=...'. Solución: con optimizer: auto, el entrenamiento elige el optimizador y la tasa de aprendizaje por sí mismo. Establece optimizer en SGD o AdamW, junto con lr0, y confirma después la línea optimizer: en la consola.
Síntoma: la pestaña secundaria Sistema muestra una utilización de la GPU muy inferior al 80 % durante toda la ejecución. Solución: el cuello de botella es la carga de datos, no la GPU, así que una GPU más rápida solo cuesta más. Elige una GPU más barata o aumenta el tamaño del lote si la memoria lo permite.
Síntoma: el mAP50-95 de validación lleva 10 épocas estancado mientras la pérdida de validación aumenta poco a poco. Solución: cancela. Se conserva el mejor punto de control hasta el momento, y la siguiente mejora vendrá de los datos (lecciones 3 y 4), no de entrenar más épocas.
Mostrar solución
Ejemplo resuelto con pastillas médicas: la línea base de 10 épocas alcanza su máximo en la época 10 con mAP50-95 de 0,659, una mejora de 0,028 en las tres últimas épocas y una pérdida de caja de validación que baja de 1,367 a 1,045; por tanto, el veredicto es «continuar». En lugar de volver a entrenar desde cero, ajusta el modelo: modelo base v1-baseline en My Models, 5 épocas, Advanced Settings optimizer: SGD y lr0: 0.001. La consola confirma SGD(lr=0.001, momentum=0.937) y mAP50-95 alcanza 0,687. El coste en la GPU predeterminada es de unos céntimos; la tarjeta de costes muestra la estimación antes de hacer clic en Start Training, y Settings > Billing muestra el importe real después.