Ir al contenido

Integración de ClearML

Clear|MLClear|ML

Acerca de ClearML

ClearML es una plataforma MLOps de código abierto diseñada para optimizar su flujo de trabajo de aprendizaje automático y ahorrarle tiempo ⏱️.

🔨 Realiza un seguimiento de cada ejecución de entrenamiento de YOLOv5 en el gestor de experimentos.

🔧 Versiona y accede fácilmente a tus datos de entrenamiento personalizados con la Herramienta de Versionado de Datos integrada de ClearML.

🔦 Entrena y monitoriza de forma remota tus ejecuciones de entrenamiento de YOLOv5 utilizando ClearML Agent

🔬 Obtén el mejor mAP utilizando la Optimización de Hiperparámetros de ClearML.

🔭 Convierte tu modelo YOLOv5 recién entrenado en una API con tan solo unos comandos utilizando ClearML Serving.


Y mucho más. Depende de ti cuántas de estas herramientas quieres usar, puedes quedarte con el administrador de experimentos o encadenarlas todas en un pipeline impresionante.

Panel de control de escalares de ClearML



🦾 Configurando las cosas

Para realizar un seguimiento de sus experimentos y/o datos, ClearML necesita comunicarse con un servidor. Tiene 2 opciones para obtener uno:

Regístrese gratis en el Servicio Alojado de ClearML o configure su propio servidor ClearML. ¡Incluso el servidor es de código abierto, por lo que, incluso si está tratando con datos confidenciales, debería estar bien!

  • Instale el clearml paquete de python:

    pip install clearml
    
  • Conecte el SDK de ClearML al servidor creando credenciales (vaya a la parte superior derecha a Configuración -> Espacio de trabajo -> Crear nuevas credenciales), luego ejecute el siguiente comando y siga las instrucciones:

    clearml-init
    

¡Eso es todo! Ya terminaste 😎


🚀 Entrenando YOLOv5 con ClearML

Para habilitar el seguimiento de experimentos con ClearML, simplemente instale el paquete pip de ClearML.

pip install clearml

Esto permitirá la integración con el script de entrenamiento YOLOv5. Cada ejecución de entrenamiento a partir de ahora será capturada y almacenada por el administrador de experimentos ClearML.

Si quieres cambiar el project_name o task_name, usa el --project y --name argumentos del train.py script, por defecto el proyecto se llamará YOLOv5 y la tarea Training. POR FAVOR, TENGA EN CUENTA: ClearML utiliza / como delimitador de subproyectos, así que tenga cuidado al usar / en el nombre de su proyecto.

python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

o con un proyecto y nombre de tarea personalizados:

python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

Esto capturará:

  • Código fuente + cambios no confirmados
  • Paquetes instalados
  • (Hiper)parámetros
  • Archivos de modelo (usar --save-period n para guardar un punto de control cada n épocas)
  • Salida de la consola
  • Escalares (mAP_0.5, mAP_0.5:0.95, precisión, recall, pérdidas, tasas de aprendizaje, ...)
  • Información general, como detalles de la máquina, tiempo de ejecución, fecha de creación, etc.
  • Todos los gráficos producidos, como el correlograma de etiquetas y la matriz de confusión
  • Imágenes con cuadros delimitadores por época
  • Mosaico por época
  • Imágenes de validación por época

Es mucha información, ¿verdad? 🤯 Ahora, podemos visualizar toda esta información en la interfaz de usuario de ClearML para obtener una visión general del progreso de nuestro entrenamiento. Añade columnas personalizadas a la vista de tabla (como, por ejemplo, mAP_0.5) para que puedas ordenar fácilmente por el modelo de mejor rendimiento. ¡O selecciona múltiples experimentos y compáralos directamente!

Incluso hay más que podemos hacer con toda esta información, como la optimización de hiperparámetros y la ejecución remota, ¡así que siga leyendo si quiere ver cómo funciona!

🔗 Gestión de versiones del conjunto de datos

Generalmente, es una buena idea controlar las versiones de tus datos por separado de tu código, lo que facilita la adquisición de la última versión. Este repositorio permite proporcionar un ID de versión del conjunto de datos y se asegurará de obtener los datos si aún no están disponibles. Además, este flujo de trabajo también guarda el ID del conjunto de datos utilizado como parte de los parámetros de la tarea, ¡para que siempre sepas con certeza qué datos se utilizaron en qué experimento!

Interfaz de Conjunto de Datos de ClearML

Prepara tu conjunto de datos

El repositorio YOLOv5 admite varios conjuntos de datos diferentes mediante el uso de archivos YAML que contienen su información. Por defecto, los conjuntos de datos se descargan en el ../datasets carpeta en relación con la carpeta raíz del repositorio. Así que si descargaste el coco128 conjunto de datos utilizando el enlace en el YAML o con los scripts proporcionados por yolov5, obtendrá esta estructura de carpetas:

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ LICENSE
        |_ README.txt

Pero este puede ser cualquier conjunto de datos que desees. Siéntete libre de usar el tuyo propio, siempre y cuando mantengas esta estructura de carpetas.

A continuación, ⚠️copie el archivo YAML correspondiente en la raíz de la carpeta del conjunto de datos⚠️. Este archivo YAML contiene la información que ClearML necesitará para utilizar correctamente el conjunto de datos. Por supuesto, también puede crearlo usted mismo, simplemente siga la estructura de los archivos YAML de ejemplo.

Básicamente, necesitamos las siguientes claves: path, train, test, val, nc, names.

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml  # <---- HERE!
        |_ LICENSE
        |_ README.txt

Subir su conjunto de datos

Para introducir este conjunto de datos en ClearML como un conjunto de datos versionado, ve a la carpeta raíz del conjunto de datos y ejecuta el siguiente comando:

cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .

El comando clearml-data sync es en realidad un comando abreviado. También podría ejecutar estos comandos uno tras otro:

# Optionally add --parent <parent_dataset_id> if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close

Ejecutar el entrenamiento usando un conjunto de datos ClearML

Ahora que tiene un conjunto de datos de ClearML, ¡puede usarlo muy fácilmente para entrenar modelos YOLOv5 🚀 personalizados!

python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache


👀 Optimización de Hiperparámetros

Ahora que tenemos nuestros experimentos y datos versionados, ¡es hora de echar un vistazo a lo que podemos construir encima!

Usando la información del código, los paquetes instalados y los detalles del entorno, el experimento en sí ahora es completamente reproducible. De hecho, ClearML te permite clonar un experimento e incluso cambiar sus parámetros. ¡Luego podemos simplemente volver a ejecutarlo con estos nuevos parámetros automáticamente, esto es básicamente lo que hace HPO!

Para ejecutar la optimización de hiperparámetros localmente, hemos incluido un script predefinido para usted. Solo asegúrese de que una tarea de entrenamiento se haya ejecutado al menos una vez, de modo que esté en el administrador de experimentos de ClearML, esencialmente lo clonaremos y cambiaremos sus hiperparámetros.

Tendrá que rellenar el ID de este template task en el script que se encuentra en utils/loggers/clearml/hpo.py y luego simplemente ejecútelo. Puede cambiar task.execute_locally() a datos task.execute() para ponerlo en una cola de ClearML y que un agente remoto trabaje en ello.

# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py

HPO

🤯 Ejecución remota (avanzado)

Ejecutar HPO localmente es muy útil, pero ¿qué pasa si queremos ejecutar nuestros experimentos en una máquina remota? Tal vez tengas acceso a una máquina con una GPU muy potente en tus instalaciones, o tengas presupuesto para usar GPU en la nube. Aquí es donde entra en juego el Agente ClearML. Consulta lo que el agente puede hacer aquí:

En resumen: cada experimento rastreado por el administrador de experimentos contiene suficiente información para reproducirlo en una máquina diferente (paquetes instalados, cambios no confirmados, etc.). Así que un agente de ClearML hace precisamente eso: escucha una cola para las tareas entrantes y cuando encuentra una, recrea el entorno y lo ejecuta mientras sigue informando de escalares, gráficos, etc. al administrador de experimentos.

Puedes convertir cualquier máquina (una VM en la nube, una máquina GPU local, tu propio portátil...) en un agente de ClearML simplemente ejecutando:

clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]

Clonación, edición y puesta en cola

Con nuestro agente en ejecución, podemos darle algo de trabajo. ¿Recuerda de la sección de HPO que podemos clonar una tarea y editar los hiperparámetros? ¡Podemos hacer eso también desde la interfaz!

🪄 Clona el experimento haciendo clic derecho sobre él

🎯 Edita los hiperparámetros a tu gusto.

⏳ Ponga en cola la tarea en cualquiera de las colas haciendo clic derecho en ella

Poner en cola una tarea desde la UI

Ejecución remota de una tarea

Ahora puede clonar una tarea como explicamos anteriormente, o simplemente marcar su script actual añadiendo task.execute_remotely() y al ejecutarse se colocará en una cola, ¡para que el agente comience a trabajar!

Para ejecutar el script de entrenamiento YOLOv5 de forma remota, todo lo que tienes que hacer es añadir esta línea al script training.py después de que se haya instanciado el logger de ClearML:

# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
    loggers = Loggers(save_dir, weights, opt, hyp, LOGGER)  # loggers instance
    if loggers.clearml:
        loggers.clearml.task.execute_remotely(queue="my_queue")  # <------ ADD THIS LINE
        # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML
        data_dict = loggers.clearml.data_dict
# ...

Al ejecutar el script de entrenamiento después de este cambio, python ejecutará el script hasta esa línea, ¡después de lo cual empaquetará el código y lo enviará a la cola!

Trabajadores de autoescalado

¡ClearML también viene con escaladores automáticos! Esta herramienta activará automáticamente nuevas máquinas remotas en la nube de su elección (AWS, GCP, Azure) y las convertirá en agentes de ClearML para usted siempre que se detecten experimentos en la cola. Una vez que se procesan las tareas, el escalador automático apagará automáticamente las máquinas remotas, ¡y usted dejará de pagar!

Echa un vistazo al vídeo de introducción a los autoescaladores que aparece a continuación.

Ver el video

Más información

Para obtener más información sobre la integración de ClearML con los modelos de Ultralytics, consulte nuestra guía de integración de ClearML y explore cómo puede mejorar su flujo de trabajo de MLOps con otras herramientas de seguimiento de experimentos.



📅 Creado hace 1 año ✏️ Actualizado hace 4 meses

Comentarios