Ir para o conteúdo

Integração ClearML

Clear|MLClear|ML

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!

Painel de escalares ClearML



🦾 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!

Interface de Dataset ClearML

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

HPO

🤯 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

Colocar uma tarefa na fila a partir da interface do utilizador

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.

Assista ao vídeo

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.



📅 Criado há 1 ano ✏️ Atualizado há 3 meses

Comentários