Saltar para o conteúdo

ClearML Integração

Limpar|MLLimpar|ML

Sobre ClearML

ClearML é uma caixa de ferramentas de código aberto concebida para lhe poupar tempo ⏱️.

Acompanhar todos os treinos de YOLOv5 no gestor de experiências

🔧 Controle e aceda facilmente aos seus dados de formação personalizados com aferramenta integradade controlo de versões de dados ClearML

Treine e monitorize remotamente os seus treinos em YOLOv5 utilizando o ClearML Agent

🔬 Obter o melhor mAP utilizando a ClearML Otimização de hiperparâmetros

🔭 Transforme seu modeloYOLOv5 recém-treinado em uma API com apenas alguns comandos usando ClearML Serving


E muito mais. Cabe-lhe a si decidir quantas destas ferramentas quer utilizar, pode limitar-se ao gestor de experiências ou encadeá-las todas num pipeline impressionante!

ClearML painel de controlo dos escalares



🦾 Preparar as coisas

Para manter o controlo das suas experiências e/ou dados, o ClearML precisa de comunicar com um servidor. Tem 2 opções para obter um:

Pode inscrever-se gratuitamente no ClearML Hosted Service ou pode configurar o seu próprio servidor, veja aqui. Até o servidor é de código aberto, por isso, mesmo que esteja a lidar com dados sensíveis, não deve ter problemas!

  • Instalar o clearml python pacote:

    pip install clearml
    
  • Ligue o SDK ClearML ao servidor criando credenciais (vá ao topo direito para Definições -> Espaço de trabalho -> Criar novas credenciais), depois execute o comando abaixo e siga as instruções:

    clearml-init
    

É isso aí! Está feito 😎


🚀 Formação YOLOv5 Com ClearML

Para ativar o acompanhamento de experiências em ClearML , basta instalar o pacote pip ClearML .

pip install clearml>=1.2.0

Isto permitirá a integração com o guião de treino YOLOv5 . A partir de agora, cada treino será capturado e armazenado pelo gestor de experiências ClearML .

Se pretender alterar o project_name ou task_nameutilizar o --project e --name argumentos do train.py por defeito, o projeto chamar-se-á YOLOv5 e a tarefa Training. ATENÇÃO: ClearML utiliza / como um delimitador para subprojectos, por isso tenha cuidado ao utilizar / 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 confirmadas
  • Pacotes instalados
  • (Hiper)parâmetros
  • Ficheiros modelo (utilizar --save-period n para guardar um ponto de controlo a cada n épocas)
  • Saída da consola
  • Escalares (mAP_0.5, mAP_0.5:0.95, precisão, recuperação, perdas, taxas de aprendizagem, ...)
  • 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 etiquetas e a matriz de confusão
  • Imagens com caixas delimitadoras por época
  • Mosaico por época
  • Imagens de validação por época

Isso é muito, certo? 🤯 Agora, podemos visualizar todas essas informações na interface do usuário ClearML para obter uma visão geral do progresso do nosso treinamento. Adicione colunas personalizadas à visualização da tabela (como, por exemplo, mAP_0.5) para que você possa classificar facilmente o modelo de melhor desempenho. Ou selecione várias experiências e compare-as diretamente!

Há ainda mais coisas que podemos fazer com toda esta informação, como a otimização de hiperparâmetros e a execução remota, por isso continue a ler se quiser ver como isso funciona!

Gestão de versões de conjuntos de dados

O facto de versionar os seus dados separadamente do seu código é geralmente uma boa ideia e facilita também a aquisição da versão mais recente. Este repositório suporta o fornecimento de um ID de versão do conjunto de dados e certificar-se-á de que obtém os dados se estes ainda não estiverem disponíveis. Além disso, este fluxo de trabalho também guarda o ID do conjunto de dados utilizado como parte dos parâmetros da tarefa, pelo que saberá sempre com certeza que dados foram utilizados em que experiência!

ClearML Interface do conjunto de dados

Preparar o conjunto de dados

O repositório YOLOv5 suporta uma série de conjuntos de dados diferentes, utilizando ficheiros YAML que contêm as suas informações. Por defeito, os conjuntos de dados são descarregados para o ficheiro ../datasets em relação à pasta raiz do repositório. Assim, se descarregou a pasta coco128 utilizando a ligação no YAML ou com os scripts fornecidos por yolov5, obtém-se esta estrutura de pastas:

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

Mas este pode ser qualquer conjunto de dados que deseje. Pode utilizar o seu próprio conjunto de dados, desde que respeite esta estrutura de pastas.

Em seguida,⚠️copy o ficheiro YAML correspondente à raiz do conjunto de dados folder⚠️.Este ficheiro YAML contém as informações de que ClearML necessitará para utilizar corretamente o conjunto de dados. Você também pode fazer isso sozinho, é 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

Carregar o seu conjunto de dados

Para colocar este conjunto de dados em 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 é de facto um comando abreviado. Também pode executar estes 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 treinamento usando um conjunto de dados ClearML

Agora que tem um conjunto de dados ClearML , pode muito simplesmente utilizá-lo 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 as nossas experiências e dados versionados, é altura de vermos o que podemos construir em cima!

Utilizando as informações do código, os pacotes instalados e os detalhes do ambiente, a própria experiência é agora completamente reproduzível. De facto, ClearML permite clonar uma experiência e até alterar os seus parâmetros. Podemos então executá-la de novo com estes novos parâmetros automaticamente, que é basicamente o que o HPO faz!

Para executar a otimização de hiperparâmetros localmente, incluímos um script pré-fabricado para si. Basta certificar-se de que uma tarefa de treino foi executada pelo menos uma vez, para que esteja no gestor de experiências ClearML . Iremos essencialmente cloná-la e alterar os seus hiperparâmetros.

Terá de preencher o ID deste template task no guião que se encontra em utils/loggers/clearml/hpo.py e depois basta executá-lo :) Pode alterar task.execute_locally() para task.execute() para o colocar numa fila ClearML e fazer com que um agente remoto trabalhe 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çada)

Executar o HPO localmente é muito útil, mas e se quisermos executar as nossas experiências numa 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 experiência monitorizada pelo gestor de experiências contém informação suficiente para a reproduzir numa máquina diferente (pacotes instalados, alterações não confirmadas, etc.). Assim, um agente ClearML faz exatamente isso: ouve uma fila para tarefas recebidas e, quando encontra uma, recria o ambiente e executa-a enquanto continua a reportar escalares, gráficos, etc. ao gestor de experiências.

Pode transformar qualquer máquina (uma VM na nuvem, uma máquina local GPU , o seu próprio portátil ... ) num agente ClearML , bastando para isso executar:

clearml-agent daemon --queue <queues_to_listen_to> [--docker]

Clonagem, edição e colocação em fila de espera

Com o nosso agente em execução, podemos dar-lhe algum trabalho. Lembra-se de que, na secção HPO, podemos clonar uma tarefa e editar os hiperparâmetros? Também podemos fazer isso a partir da interface!

🪄 Clonar a experiência clicando com o botão direito do rato

🎯 Editar os hiperparâmetros de acordo com o que pretende que eles sejam

Colocar a tarefa em fila de espera em qualquer uma das filas de espera, clicando com o botão direito do rato

Colocar uma tarefa em fila de espera a partir da interface do utilizador

Execução de uma tarefa remotamente

Agora pode clonar uma tarefa como explicámos acima, ou simplesmente marcar o seu script atual adicionando task.execute_remotely() e, após a sua execução, será colocada numa fila de espera, para que o agente comece a trabalhar nela!

Para executar o script de treinamento YOLOv5 remotamente, tudo o que você precisa fazer é adicionar esta linha ao script training.py depois que o logger clearml tiver sido instanciado:

# ...
# 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 treino após esta alteração, python executará o script até essa linha, após o que empacotará o código e enviá-lo-á para a fila de espera!

Escalonamento automático de trabalhadores

ClearML também vem com autoscalers! Esta ferramenta irá automaticamente ligar novas máquinas remotas na nuvem da sua escolha (AWS, GCP, Azure) e transformá-las em agentes ClearML sempre que forem detectadas experiências na fila. Assim que as tarefas forem processadas, o autoscaler desligará automaticamente as máquinas remotas e deixará de pagar!

Veja o vídeo de introdução aos autoscalers abaixo.

Ver o vídeo

📅C riado há 1 ano ✏️ Atualizado há 2 meses

Comentários