Integração ClearML
Sobre o ClearML
ClearML é uma plataforma de MLOps de código aberto projetada para otimizar seu fluxo de trabalho de machine learning e economizar seu tempo ⏱️.
🔨 Rastreie cada execução de treinamento YOLOv5 no gerenciador de experimentos
🔧 Versionar e acessar facilmente seus dados de treinamento personalizados com a Ferramenta de Versionamento de Dados ClearML integrada
🔦 Treine e monitore remotamente suas execuções de treinamento YOLOv5 usando o ClearML Agent
🔬 Obtenha o melhor mAP usando a Otimização de Hiperparâmetros ClearML
🔭 Transforme seu modelo YOLOv5 recém-treinado em uma API com apenas alguns comandos usando o ClearML Serving
E muito mais. Depende de você quantos dessas ferramentas você deseja usar, você pode usar apenas o gerenciador de experimentos ou encadeá-los todos em um pipeline impressionante!
🦾 Preparando Tudo
Para manter o controle de suas experiências e/ou dados, o ClearML precisa se comunicar com um servidor. Você tem 2 opções para obter um:
Inscreva-se gratuitamente no Serviço Hospedado ClearML ou configure seu próprio servidor ClearML. Mesmo o servidor sendo de código aberto, mesmo que você esteja lidando com dados confidenciais, você deve estar pronto para começar!
-
Instale o
clearml
pacote python:pip install clearml
-
Conecte o SDK ClearML ao servidor criando credenciais (vá no canto superior direito em Settings -> Workspace -> Create new credentials), depois execute o comando abaixo e siga as instruções:
clearml-init
É isso aí! Você terminou 😎
🚀 Treinando YOLOv5 com ClearML
Para ativar o rastreamento de experimentos ClearML, basta instalar o pacote ClearML pip.
pip install clearml
Isso permitirá a integração com o script de treinamento YOLOv5. Cada execução de treinamento a partir de agora será capturada e armazenada pelo gerenciador de experimentos ClearML.
Se você quiser alterar o project_name
ou task_name
, use o --project
e --name
argumentos do train.py
script, por padrão, o projeto será chamado YOLOv5
e a tarefa Training
. ATENÇÃO: O ClearML utiliza /
como um delimitador para subprojetos, então tenha cuidado ao usar /
no nome do seu projeto!
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
ou com nome de projeto e tarefa personalizados:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Isto irá capturar:
- Código fonte + alterações não commitadas
- Pacotes instalados
- (Hiper)parâmetros
- Arquivos de modelo (use
--save-period n
para salvar um checkpoint a cada n épocas) - Saída do console
- Escalares (mAP_0.5, mAP_0.5:0.95, precisão, recall, perdas, taxas de aprendizado, ...)
- Informações gerais, como detalhes da máquina, tempo de execução, data de criação, etc.
- Todos os gráficos produzidos, como o correlograma de rótulos e a matriz de confusão
- Imagens com bounding boxes por época
- Mosaico por época
- Imagens de validação por época
É muita coisa, certo? 🤯 Agora, podemos visualizar todas essas informações na interface do usuário do ClearML para obter uma visão geral do nosso progresso de treinamento. Adicione colunas personalizadas à visualização da tabela (como, por exemplo, mAP_0.5) para que você possa classificar facilmente o modelo com melhor desempenho. Ou selecione vários experimentos e compare-os diretamente!
Há ainda mais que podemos fazer com todas essas informações, como otimização de hiperparâmetros e execução remota, então continue lendo se quiser ver como isso funciona!
🔗 Gerenciamento de Versão do Conjunto de Dados
Controlar as versões dos seus dados separadamente do seu código é geralmente uma boa ideia e facilita a obtenção da versão mais recente. Este repositório suporta o fornecimento de um ID de versão do conjunto de dados e garante a obtenção dos dados, caso ainda não estejam presentes. Além disso, este fluxo de trabalho também salva o ID do conjunto de dados usado como parte dos parâmetros da tarefa, para que você sempre saiba com certeza quais dados foram usados em qual experimento!
Prepare Seu Conjunto de Dados
O repositório YOLOv5 suporta vários conjuntos de dados diferentes usando arquivos YAML contendo suas informações. Por padrão, os conjuntos de dados são baixados para o ../datasets
pasta em relação à pasta raiz do repositório. Portanto, se você baixou o coco128
conjunto de dados usando o link no YAML ou com os scripts fornecidos pelo yolov5, você obtém esta estrutura de pastas:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Mas este pode ser qualquer conjunto de dados que desejar. Sinta-se à vontade para usar o seu próprio, desde que mantenha esta estrutura de pastas.
Em seguida, ⚠️copie o arquivo YAML correspondente para a raiz da pasta do conjunto de dados⚠️. Este arquivo YAML contém as informações que o ClearML precisará para usar corretamente o conjunto de dados. Você também pode criar este arquivo, é claro, basta seguir a estrutura dos YAMLs de exemplo.
Basicamente, precisamos das seguintes chaves: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Fazer Upload do Seu Conjunto de Dados
Para inserir este conjunto de dados no ClearML como um conjunto de dados versionado, vá para a pasta raiz do conjunto de dados e execute o seguinte comando:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
O comando clearml-data sync
é, na verdade, um comando abreviado. Você também pode executar esses comandos um após o outro:
# 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
Executar o Treinamento Usando um Conjunto de Dados ClearML
Agora que você tem um conjunto de dados ClearML, pode usá-lo de forma muito simples para treinar modelos YOLOv5 🚀 personalizados!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache
👀 Otimização de Hiperparâmetros
Agora que temos nossos experimentos e dados versionados, é hora de dar uma olhada no que podemos construir em cima!
Usando as informações do código, os pacotes instalados e os detalhes do ambiente, o experimento em si agora é completamente reproduzível. Na verdade, o ClearML permite clonar um experimento e até mesmo alterar seus parâmetros. Podemos então apenas executá-lo novamente com esses novos parâmetros automaticamente, isso é basicamente o que o HPO faz!
Para executar a otimização de hiperparâmetros localmente, incluímos um script pré-fabricado para você. Apenas certifique-se de que uma tarefa de treinamento tenha sido executada pelo menos uma vez, para que esteja no gerenciador de experimentos ClearML, essencialmente iremos cloná-la e alterar seus hiperparâmetros.
Você precisará preencher o ID disto template task
no script encontrado em utils/loggers/clearml/hpo.py
e então é só executá-lo. Você pode mudar task.execute_locally()
para task.execute()
para colocá-lo em uma fila ClearML e ter um agente remoto trabalhando nele.
# 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
🤯 Execução Remota (avançado)
Executar HPO localmente é realmente útil, mas e se quisermos executar nossos experimentos em uma máquina remota? Talvez você tenha acesso a uma máquina GPU muito poderosa no local ou tenha algum orçamento para usar GPUs na nuvem. É aqui que o Agente ClearML entra em ação. Veja o que o agente pode fazer aqui:
Resumindo: cada experimento rastreado pelo gerenciador de experimentos contém informações suficientes para reproduzi-lo em uma máquina diferente (pacotes instalados, alterações não confirmadas, etc.). Portanto, um agente ClearML faz exatamente isso: ele escuta uma fila para tarefas recebidas e, quando encontra uma, recria o ambiente e o executa, enquanto ainda reporta escalares, gráficos, etc. para o gerenciador de experimentos.
Você pode transformar qualquer máquina (uma VM na nuvem, uma máquina GPU local, seu próprio laptop...) em um agente ClearML simplesmente executando:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
Clonagem, Edição e Enfileiramento
Com nosso agente em execução, podemos dar-lhe algum trabalho. Lembra-se da seção HPO que podemos clonar uma tarefa e editar os hiperparâmetros? Podemos fazer isso também a partir da interface!
🪄 Clone o experimento clicando com o botão direito nele
🎯 Edite os hiperparâmetros para o que você deseja que eles sejam
⏳ Enfileire a tarefa em qualquer uma das filas clicando com o botão direito nela
Executando Uma Tarefa Remotamente
Agora você pode clonar uma tarefa como explicamos acima, ou simplesmente marcar seu script atual adicionando task.execute_remotely()
e, na execução, ele será colocado em uma fila, para que o agente comece a trabalhar!
Para executar o script de treinamento YOLOv5 remotamente, tudo o que você precisa fazer é adicionar esta linha ao script training.py após a instanciação do logger 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
# ...
Ao executar o script de treinamento após esta alteração, o python executará o script até essa linha, após o qual ele empacotará o código e o enviará para a fila!
Trabalhadores com escalonamento automático
O ClearML também vem com autoscalers! Esta ferramenta irá automaticamente ativar novas máquinas remotas na nuvem de sua escolha (AWS, GCP, Azure) e transformá-las em agentes ClearML para você sempre que houver experimentos detectados na fila. Uma vez que as tarefas são processadas, o autoscaler irá automaticamente desligar as máquinas remotas, e você para de pagar!
Confira o vídeo de introdução aos autoscalers abaixo.
Saiba Mais
Para obter mais informações sobre como integrar o ClearML com os modelos Ultralytics, consulte nosso guia de integração do ClearML e explore como você pode aprimorar seu fluxo de trabalho de MLOps com outras ferramentas de rastreamento de experimentos.