ClearML Integración
Acerca de ClearML
ClearML es una caja de herramientas de código abierto diseñada para ahorrarte tiempo ⏱️.
🔨 Sigue cada entrenamiento de YOLOv5 en el gestor de experimentos
🔧 Version and easily access your custom training data with the integrated ClearML Data Versioning Tool
🔦 Entrena y supervisa a distancia tus carreras de entrenamiento en YOLOv5 utilizando ClearML Agente
🔬 Consigue el mejor mAP utilizando ClearML Optimización de hiperparámetros
🔭 Convierte tu modeloYOLOv5 recién entrenado en una API con sólo unos comandos utilizando ClearML Serving
Y mucho más. Depende de ti cuántas de estas herramientas quieras utilizar, puedes ceñirte al gestor de experimentos, o encadenarlas todas en un impresionante pipeline.
🦾 Preparando las cosas
Para hacer un seguimiento de tus experimentos y/o datos, ClearML necesita comunicarse con un servidor. Tienes 2 opciones para conseguir uno:
Puedes registrarte gratuitamente en el servicio alojado deClearML o configurar tu propio servidor, consulta aquí. Incluso el servidor es de código abierto, así que, aunque trabajes con datos sensibles, ¡no tendrás problemas!
-
Instala el
clearml
python paquete: -
Conecta el SDK ClearML al servidor creando credenciales (ve arriba a la derecha a Configuración -> Espacio de trabajo -> Crear nuevas credenciales), luego ejecuta el comando que aparece a continuación y sigue las instrucciones:
Ya está. Ya has terminado 😎
🚀 Formación YOLOv5 Con ClearML
Para activar el seguimiento de experimentos de ClearML , sólo tienes que instalar el paquete pip ClearML .
Esto permitirá la integración con el script de entrenamiento YOLOv5 . A partir de ahora, cada ejecución de entrenamiento será capturada y almacenada por el gestor de experimentos ClearML .
Si quieres cambiar el project_name
o task_name
utiliza el --project
y --name
argumentos de la train.py
por defecto el proyecto se llamará YOLOv5
y la tarea Training
. NOTA: ClearML utiliza /
como delimitador de subproyectos, así que ten cuidado al utilizar /
¡en el nombre de tu proyecto!
o con un nombre de proyecto y 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 comprometidos
- Paquetes instalados
- (Hiper)parámetros
- Archivos modelo (utiliza
--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.
- All produced plots such as label correlogram and confusion matrix
- Images with bounding boxes per epoch
- Mosaico por época
- Imágenes de validación por época
Son muchos, ¿verdad? 🤯 Ahora, podemos visualizar toda esta información en la IU de ClearML para tener una visión general de nuestro progreso en el entrenamiento. Añade columnas personalizadas a la vista de tabla (como, por ejemplo, mAP_0,5) para poder ordenar fácilmente el modelo con mejor rendimiento. ¡O selecciona varios experimentos y compáralos directamente!
Hay aún más cosas que podemos hacer con toda esta información, como la optimización de hiperparámetros y la ejecución remota, ¡así que sigue leyendo si quieres ver cómo funciona!
🔗 Gestión de la versión del conjunto de datos
Versionar tus datos por separado de tu código suele ser una buena idea, y además facilita la adquisición de la última versión. Este repositorio admite el suministro de un ID de versión del conjunto de datos, y se asegurará de obtener los datos si aún no están ahí. 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, ¡así siempre sabrás con seguridad qué datos se utilizaron en cada experimento!
Prepara tu conjunto de datos
El repositorio YOLOv5 admite distintos conjuntos de datos mediante archivos YAML que contienen su información. Por defecto, los conjuntos de datos se descargan en ../datasets
en relación con la carpeta raíz del repositorio. Por tanto, si has descargado la carpeta coco128
dataset utilizando el enlace en el YAML o con los scripts proporcionados por yolov5, obtendrás esta estructura de carpetas:
Pero puede ser cualquier conjunto de datos que desees. Siéntete libre de utilizar los tuyos propios, siempre que mantengas esta estructura de carpetas.
A continuación,⚠️copy el archivo YAML correspondiente a la raíz del conjunto de datos folder⚠️.Este archivo YAML contiene la información que ClearML necesitará para utilizar correctamente el conjunto de datos. También puedes hacerlo tú mismo, por supuesto, sólo tienes que seguir la estructura de los 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
Sube tu conjunto de datos
Para introducir este conjunto de datos en ClearML como conjunto de datos versionado, ve a la carpeta raíz del conjunto de datos y ejecuta el siguiente comando:
La orden clearml-data sync
es en realidad un comando abreviado. También puedes ejecutar estos comandos uno detrás de 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
Ejecuta el entrenamiento utilizando un conjunto de datos ClearML
Ahora que tienes un conjunto de datos ClearML , puedes utilizarlo de forma muy sencilla 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!
Utilizando la información del código, los paquetes instalados y los detalles del entorno, el experimento en sí es ahora completamente reproducible. De hecho, ClearML te permite clonar un experimento e incluso cambiar sus parámetros. A continuación, podemos 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 preelaborado para ti. Sólo tienes que asegurarte de que una tarea de entrenamiento se ha ejecutado al menos una vez, de modo que esté en el gestor de experimentos ClearML , esencialmente la clonaremos y cambiaremos sus hiperparámetros.
Tendrás que rellenar el ID de este template task
en el script que se encuentra en utils/loggers/clearml/hpo.py
y ejecútalo :) Puedes cambiar task.execute_locally()
a task.execute()
ponerlo en una cola de ClearML y hacer que un agente remoto trabaje en él en su lugar.
# 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
🤯 Ejecución remota (avanzada)
Ejecutar HPO localmente es realmente práctico, pero ¿y si en lugar de eso queremos ejecutar nuestros experimentos en una máquina remota? Tal vez tengas acceso a una máquina GPU muy potente in situ, o dispongas de algo de presupuesto para utilizar GPUs en la nube. Aquí es donde entra en juego el Agente ClearML . Echa un vistazo a lo que puede hacer el agente aquí:
En resumen: cada experimento rastreado por el gestor de experimentos contiene información suficiente para reproducirlo en una máquina diferente (paquetes instalados, cambios no comprometidos, etc.). Así que un agente de ClearML hace exactamente eso: escucha una cola de tareas entrantes y, cuando encuentra una, recrea el entorno y lo ejecuta sin dejar de informar de escalares, gráficos, etc. al gestor de experimentos.
Puedes convertir cualquier máquina (una VM en la nube, una máquina local de GPU , tu propio portátil... ) en un agente de ClearML con sólo ejecutarlo:
Clonación, edición y puesta en cola
Con nuestro agente en marcha, podemos darle algo de trabajo. ¿Recuerdas de la sección HPO que podemos clonar una tarea y editar los hiperparámetros? ¡También podemos hacerlo desde la interfaz!
🪄 Clona el experimento haciendo clic con el botón derecho del ratón.
🎯 Edita los hiperparámetros como desees
⏳ Pon en cola la tarea en cualquiera de las colas haciendo clic con el botón derecho sobre ella
Ejecutar una tarea remotamente
Ahora puedes clonar una tarea como hemos explicado antes, o simplemente marcar tu script actual añadiendo task.execute_remotely()
y al ejecutarlo se pondrá en una cola, ¡para que el agente empiece a trabajar en él!
Para ejecutar el script de entrenamiento YOLOv5 a distancia, todo lo que tienes que hacer es añadir esta línea al script training.py después de que se haya instanciado el registrador 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 en su lugar!
Autoescalado de trabajadores
ClearML ¡también viene con autoescaladores! Esta herramienta creará automáticamente nuevas máquinas remotas en la nube que elijas (AWS, GCP, Azure) y las convertirá en agentes de ClearML para ti siempre que se detecten experimentos en la cola. Una vez procesadas las tareas, el autoescalador apagará automáticamente las máquinas remotas, ¡y tú dejarás de pagar!
Echa un vistazo al siguiente vídeo de iniciación a los autoescaladores.