ClearML Integração
Sobre ClearML
ClearML é uma caixa de ferramentas de código aberto concebida para te poupar tempo ⏱️.
Acompanha cada treino de YOLOv5 no gestor de experiências
Versões e acesso fácil aos teus dados de formação personalizados com aferramenta integradade versões de dados ClearML
Treina e monitoriza remotamente os teus treinos em YOLOv5 utilizando o ClearML Agent
🔬 Obtém o melhor mAP utilizando ClearML Hyperparameter Optimization
🔭 Transforma o teu modeloYOLOv5 recém-treinado numa API com apenas alguns comandos utilizando ClearML Serving
E muito mais. Depende de ti quantas destas ferramentas queres utilizar, podes limitar-te ao gestor de experiências ou encadeá-las todas num pipeline impressionante!
Prepara as coisas
Para manteres um registo das tuas experiências e/ou dados, ClearML precisa de comunicar com um servidor. Tens 2 opções para obter um:
Podes inscrever-te gratuitamente no serviço alojadoClearML ou podes criar o teu próprio servidor, vê aqui. Até o servidor é de código aberto, por isso, mesmo que estejas a lidar com dados sensíveis, não deves ter problemas!
-
Instala o
clearml
python pacote: -
Liga o ClearML SDK ao servidor criando credenciais (vai ao topo direito para Definições -> Espaço de trabalho -> Criar novas credenciais), depois executa o comando abaixo e segue as instruções:
Já está! Estás pronto 😎
🚀 Treino YOLOv5 Com ClearML
Para ativar o acompanhamento de experiências em ClearML , basta instalar o pacote pip ClearML .
Isto permitirá a integração com o script de treino YOLOv5 . A partir de agora, todos os treinos serão capturados e armazenados pelo gestor de experiências ClearML .
Se quiseres alterar o project_name
ou task_name
utiliza o --project
e --name
argumentos do train.py
por defeito, o projeto chamar-se-á YOLOv5
e a tarefa Training
. OBSERVAÇÃO: ClearML utiliza /
como um delimitador para subprojectos, por isso tem cuidado quando utilizares /
no nome do teu projeto!
ou com o nome personalizado do projeto e da tarefa:
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 (utiliza
--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
É muita coisa, 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. Adiciona colunas personalizadas à vista de tabela (como, por exemplo, mAP_0.5) para que possas ordenar facilmente o modelo com melhor desempenho. Ou selecciona várias experiências e compara-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 continua a ler se quiseres ver como isso funciona!
Gestão de versões de conjuntos de dados
Criar uma versão dos teus dados separadamente do teu código é geralmente uma boa ideia e facilita a aquisição da versão mais recente também. Este repositório suporta o fornecimento de um ID de versão do conjunto de dados e certifica-se de que obtém os dados se ainda não estiverem lá. 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ás sempre com certeza que dados foram utilizados em que experiência!
Prepara o teu 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 descarregaste a pasta coco128
utilizando a ligação no YAML ou com os scripts fornecidos por yolov5, obtém esta estrutura de pastas:
Mas pode ser qualquer conjunto de dados que queiras. Podes usar o teu próprio conjunto de dados, desde que mantenhas esta estrutura de pastas.
Em seguida,⚠️copy o arquivo YAML correspondente à raiz do conjunto de dados folder⚠️.Este ficheiro YAML contém as informações de que ClearML vai precisar para utilizar corretamente o conjunto de dados. Também podes fazer isto tu mesmo, claro, basta seguires a estrutura dos exemplos de YAMLs.
Basicamente, precisamos das seguintes chaves: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Carrega o teu conjunto de dados
Para colocar este conjunto de dados em ClearML como um conjunto de dados com versão, vai à pasta raiz do conjunto de dados e executa o seguinte comando:
O comando clearml-data sync
é na verdade um comando abreviado. Também podes 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
Executa o treino utilizando um conjunto de dados ClearML
Agora que tens um conjunto de dados ClearML , podes 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, está na altura de vermos o que podemos construir em cima!
Utilizando a informação do código, os pacotes instalados e os detalhes do ambiente, a experiência em si é agora completamente reproduzível. De facto, ClearML permite-te clonar uma experiência e até alterar os seus parâmetros. Depois, podes voltar a executá-la automaticamente com estes novos parâmetros, que é basicamente o que o HPO faz!
Para executar a otimização de hiperparâmetros localmente, incluímos um script pré-fabricado para ti. Certifica-te de que uma tarefa de treino foi executada pelo menos uma vez, de modo a que esteja no gestor de experiências ClearML . Vamos essencialmente cloná-la e alterar os seus hiperparâmetros.
Tens de preencher o ID deste template task
no script que se encontra em utils/loggers/clearml/hpo.py
e depois executa-o :) Podes 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
Execução remota (avançado)
Executar o HPO localmente é muito útil, mas e se, em vez disso, quisermos executar as nossas experiências numa máquina remota? Talvez tenhas acesso a uma máquina GPU muito poderosa no local, ou tenhas algum orçamento para usar GPUs na nuvem. É aqui que o agente ClearML entra em ação. Vê 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.). Então, um agente ClearML faz exatamente isso: 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.
Podes transformar qualquer máquina (uma VM na nuvem, uma máquina local GPU , o teu próprio portátil ... ) num agente ClearML , executando simplesmente:
Clonagem, edição e colocação em fila
Com o nosso agente em execução, podemos dar-lhe algum trabalho. Lembra da seção HPO que podemos clonar uma tarefa e editar os hiperparâmetros? Também podemos fazer isso a partir da interface!
Clona a experiência clicando nela com o botão direito do rato
Edita os hiperparâmetros de acordo com o que desejas que eles sejam
Coloca a tarefa em fila de espera em qualquer uma das filas, clicando com o botão direito do rato
Executando uma tarefa remotamente
Agora podes clonar uma tarefa como explicámos acima, ou simplesmente marcar o teu script atual adicionando task.execute_remotely()
e, após a sua execução, é colocado numa fila de espera, para que o agente comece a trabalhar!
Para executar o script de treino YOLOv5 remotamente, tudo o que tens de fazer é adicionar esta linha ao script training.py depois de o registador clearml ter 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
# ...
Quando executas o script de treino após esta alteração, python executa o script até essa linha, após o que empacota o código e envia-o para a fila de espera!
Escala automática de trabalhadores
ClearML também vem com autoscalers! Esta ferramenta irá automaticamente criar novas máquinas remotas na nuvem da tua escolha (AWS, GCP, Azure) e transformá-las em agentes ClearML para ti sempre que forem detectadas experiências na fila. Assim que as tarefas forem processadas, o autoscaler desliga automaticamente as máquinas remotas e tu deixas de pagar!
Vê o vídeo de introdução aos autoscalers abaixo.