Hermione para Data Scientists

Bárbara Silveira Fraga
A3data
Published in
6 min readJun 4, 2020

Hermione — ML made simple

Muitos cientistas de dados aprendem a construir seus modelos em Jupyter Notebooks. Se você não conhece os Jupyter notebooks (notebooks para os íntimos), eles são uma das ferramentas mais usadas por cientistas de dados para explorar dados, testar hipóteses e treinar seus modelos de ML. E é fácil perceber o motivo para isso: notebooks são fáceis de usar, fáceis de entender e auxiliam o cientista a expor seu trabalho.

Em alguns projetos, o principal objetivo do Cientista de Dados é a entrega de um modelo em produção. Entretanto é nessas horas que sentimos como é complicado colocar um notebook em produção, afinal, normalmente o nosso pensamento como Cientistas de Dados está na solução de um problema por meio de dados, na produção de inovação e na geração de valor para o negócio. Podemos resumir essa questão em “Como produtizar um notebook?” Normalmente, se não nos preparamos para esse momento, podemos travar e começar a pensar nos vários problemas que iremos encontrar.

Indivíduos tentando produtizar um Jupyter Noteook.

Notebooks nascem para ser uma ferramenta de exploração e exposição do trabalho, de forma que, colocá-lo em produção parece ser um pouco limitante. Imagine: cenários que requerem manutenção constante, modelos que dependem da agregação e tratamento de múltiplas bases, pipelines de pré-processamento de dados, além das próprias chamadas ao modelo. E como fica o ciclo de retreino e o monitoramento do modelo? Tudo em um só notebook… Não, não será nada fácil utilizar um notebook cheio de detalhes e colocá-lo em produção para ser consumido.

Trazendo um pouco da experiência da A3Data, nós trabalhamos em times de Ciência de Dados de várias empresas e é inegável que os notebooks são ótimos para a exploração de dados. Mas quando estamos em um contexto de produto, quando esse modelo precisa ser consumido, monitorado e receber manutenção de forma recorrente, colocá-lo em produção dentro de um Jupyter notebook não é a melhor escolha, e olha que nem estamos falando de desempenho de memória e CPU. E é por isso que surge a Hermione!

It’s a magic!
The Hermione!!

Mas não, não é essa Hermione pessoal! Mas sim, nós nos inspiramos nessa mulher, bruxa, empoderada e cabulosa para batizarmos esse framework!

Hermione é a mais nova biblioteca open source que vai ajudar os Data Scientists a construírem códigos mais bem estruturados, de uma forma mais rápida e simples. Além disso, Hermione possui algumas classes que auxiliam em tarefas rotineiras, por exemplo: tarefas de normalização e desnormalização de colunas, visualização de dados, vetorização de texto, etc. Com a Hermione basta a chamada de um método e ela faz todo o resto, como um passe de mágica! Mas para isso é preciso ter conhecimentos básicos sobre Orientação a Objetos, se precisar consulte aqui.

O que a Hermione sabe fazer?

Hermione surge para facilitar a construção de modelos de Machine Learning. Para isso, ela usa várias estratégias combinadas: Hermione indica uma determinada estrutura de pastas, que mantem seu código mais organizado; classes para guiar a construção de um pipeline estruturado de um modelo de ML. Hermione possui uma classe com diversos métodos para visualização de dados de forma estática e/ou interativa, isto tudo com apenas uma linha. E, como demos spoiler anteriormente, ela também possui classes para facilitar a normalização dos dados e vetorização em textos na etapa de pré-processamento.

A Hermione sugere a utilização do MLflow para manter o gerenciamento do ciclo de vida dos modelos de Machine Learning. O MLflow possui uma interface, que podemos abrir no navegador, para auxiliar neste gerenciamento.

Além disso, a Hermione possui uma estrutura para testes unitários. Testes unitários são super relevantes para garantir que o que o código esteja funcionando corretamente, continue funcionando corretamente e respeitando as regras de negócio definidas. Imagine, você realiza uma alteração nos métodos do pipeline de pré-processamento e esquece de refletir essa modificação no pipeline de treino? Dependendo da situação, você poderia demorar horas para perceber que isso aconteceu, quando não percebesse só em produção dias depois. Com boas práticas de uso de teste unitário, o erro seria visto rapidamente.

Como começar com a Hermione?

Para utilizar Hermione basta:

  1. pip install hermione-ml
  2. hermione info
  3. hermione new nome_projeto

No passo 2 verificamos se a instalação da Hermione ocorreu corretamente e checamos a versão instalada. No passo 3, você deve escolher se deseja criar um projeto vazio ou um que está preenchido com o dataset Titanic, de exemplo. O projeto é criado com o nome que passamos depois do new. Depois desses passos, seu projeto é criado com toda a estrutura da Hermione:

  • Estrutura de pastas para organização dos códigos
  • Códigos comumente utilizados
  • Repositório .git para gerenciamento das versões do código
  • Ambiente virtual conda para controle das versões das bibliotecas

Usando a Hermione

Agora vamos usar a Hermione na prática. Para isto, mostraremos alguns pontos chaves usando o exemplo que já vem instalado no pacote.

  1. Crie o seu projeto:

2. Informe “y” para implementarmos o código de exemplo:

3. Como falamos anteriormente, Hermione já cria um ambiente virtual conda para o projeto, ative-o:

4. Após a ativação, você deve instalar algumas bibliotecas. Existem algumas sugestões no arquivo “requirements.txt”:

5. Agora vamos treinar o modelo do nosso exemplo, utilizando o MLflow ❤.
Para isto, basta digitarmos dentro do diretório src: hermione train. O comando “hermione train” vai procurar um arquivo train.py e executá-lo. No exemplo, os modelos e métricas já são controlados via MLflow.

6. Após isto, um experimento do mlflow é criado. Para verificar o experimento no mlflow, digite: mlflow ui. A aplicação subirá:

7. Para acessar o experimento, basta entrar no caminho disponibilizado anteriormente no seu navegador de preferência. Assim é possível verificar os modelos treinado e suas métricas.

8. No exemplo do Titanic, também disponibilizamos um notebook com o passo a passo. Para visualizá-lo basta digitar jupyter notebook dentro da pasta /src/notebooks/.

Quer contribuir com funcionalidades na Hermione?

Hermione está disponível no github!

Link: https://github.com/a3data/hermione

Faça um pull request com sua implementação.

Para sugestões, reclamações, entre em contato conosco: hermione@a3data.com.br

#GoA3Data #EmpoweringPeopleThroughData

--

--