Skip to content

Commit

Permalink
Merge pull request #5 from messias077/sprint-02
Browse files Browse the repository at this point in the history
Release 1.6.5
  • Loading branch information
messias077 committed Aug 24, 2023
2 parents 332a5bb + 24e014d commit 1199033
Show file tree
Hide file tree
Showing 38 changed files with 598 additions and 835 deletions.
6 changes: 3 additions & 3 deletions HOW-TO-BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ cd mllibprodest
```
Crie o ambiente virtual.
```bash
python3 -m venv env
python3.10 -m venv env
```
Ative o ambiente virtual.
```bash
Expand Down Expand Up @@ -46,14 +46,14 @@ dependencies = ['minio==7.1.11', 'python-dotenv==0.21.0', 'mlflow==1.28.0', 'bot
Antes de rodar os comandos para construir o pacote com a biblioteca, atualize o *pip*, *build* e *twine*.

```bash
python3 -m pip install --upgrade pip build twine
python -m pip install --upgrade pip build twine
```

De dentro da pasta criada no processo de clonagem do repositório (mllibprodest), rode os comandos abaixo.

- Constrói o pacote e salva na pasta *'dist'*.
```bash
python3 -m build
python -m build
```

- Envia o pacote para o PyPI. Caso existam mais pacotes nesta pasta, é necessário especificar quais deles
Expand Down
23 changes: 17 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Acesse a [documentação da lib](https://prodest.github.io/mllibprodest)!
![](https://github.com/prodest/mllibprodest/blob/main/docs/workflow.png?raw=true)

## Pré-requisitos
* **Python >= 3.9.** Instruções: [Linux (Geralmente já vem instalado por padrão)](https://python.org.br/instalacao-linux) ou [Windows](https://www.python.org/downloads/windows).
* **Python == 3.10.** Instruções: [Linux (Geralmente já vem instalado por padrão)](https://python.org.br/instalacao-linux) ou [Windows](https://www.python.org/downloads/windows).
* **Git.** Instruções: [Linux](https://git-scm.com/download/linux) ou [Windows](https://git-scm.com/download/win).
* **Venv.** Gerenciador de ambiente virtual Python adotado no tutorial. Instruções: [Linux e Windows (escolha o sistema na página)](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment).
Ou qualquer outro gerenciador de ambiente Python que preferir.
Expand Down Expand Up @@ -241,6 +241,20 @@ git clone https://github.com/prodest/mllibprodest.git
- Entre na pasta gerada no processo de clonagem do repositório e copie o conteúdo da pasta '**templates**' para outro local
de sua preferência (não trabalhe na pasta do repositório).


- Organize o código responsável pelo treino do modelo. Copie todos os *scripts* que são utilizados para treinar o modelo
para a pasta '**training_model**' (**não** incluir a pasta '**env**' nem arquivos desnecessários) e altere o *script*
'**train.py**' para que ele chame o *script* principal do modelo, ou, se preferir, apague o *script* 'train.py' e
renomeie o *script* principal do modelo para 'train.py'.


- Gere o arquivo de *requirements* para o código do modelo e coloque-o dentro da pasta '**training_model**'.

![](https://github.com/prodest/mllibprodest/blob/main/docs/pasta-train.png?raw=true)

**NOTA**: Não altere o nome da pasta '**training_model**' nem do *script* '**train.py**'. Estruture o código para que
não haja necessidade de criar a variável de ambiente PYTHONPATH para fazer os 'imports' do código do modelo.

## 3. Implemente as interfaces da biblioteca

Antes de iniciar a implementação das interfaces, é importante criar um ambiente virtual Python **separadamente** para cada
Expand Down Expand Up @@ -387,13 +401,10 @@ em contato para informar o ocorrido e fornecer as informações sobre o erro.
Para disponibilizar o modelo para publicação:

- Crie uma pasta chamada '**publicar**';
- Copie as pastas '**worker_pub**' e '**worker_retrain**' para a pasta '**publicar**' (**não** incluir a pasta
- Copie as pastas '**worker_pub**', '**worker_retrain**' e '**training_model**' para a pasta '**publicar**'
(**não** incluir a pasta
'**env**', que é do ambiente virtual Python, nem a pasta '**temp_area**', que é utilizada para guardar arquivos
temporários) ;
- Gere um arquivo de *requirements.txt* para o código responsável pelo registro dos experimentos/modelo;
- Copie a pasta que contém o código responsável pelo registro dos experimentos/modelo para a pasta publicar (**não**
incluir a pasta '**env**' e arquivos desnecessários);
- Compacte a pasta '**publicar**' utilizando o formato '.zip';
- Envie o arquivo '**publicar.zip**' para o Prodest, conforme alinhamento prévio realizado em reunião ou qualquer
outro meio de contato.

5 changes: 5 additions & 0 deletions docs/howto_make_docs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@
- É necessário substituir ':param' por '@param' e saltar uma linha entre a descrição das funções e a primeira ocorrência do '@param'
- Também substituir ':return' por '@return'

# Criar um ambiente virtual para executar esta tarefa;

# Instalar a lib para gerar a documentação;
pip3 install pdoc3

# Instalar as dependências da lib (alterar as versões)
pip install minio==7.1.16 python-dotenv==1.0.0 mlflow==2.5.0 boto3==1.28.21

# Criar uma pasta chamada 'docs' em um local de sua preferência;

# Entrar na pasta da lib;
Expand Down
54 changes: 28 additions & 26 deletions docs/mllibprodest/initiators/model_initiator.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ <h1 class="title">Module <code>docs.mllibprodest.initiators.model_initiator</cod
<pre><code class="python"># ---------------------------------------------------------------------------------------------------------
# Classes e funções para inicialização de modelos de ML (Machine Learning).
# ---------------------------------------------------------------------------------------------------------
import logging
import importlib
from ..utils import get_models_params
from ..utils import get_models_params, make_log

# Para facilitar, define um logger único para todas as funções
LOGGER = make_log(&#34;LOG_MLLIB.log&#34;)


class InitModels:
Expand Down Expand Up @@ -61,18 +63,18 @@ <h1 class="title">Module <code>docs.mllibprodest.initiators.model_initiator</cod
msg = f&#34;Modelo: {model_name}. O módulo &#39;{caminho_import}&#39; não foi encontrado. Verifique no &#34; \
f&#34;arquivo &#39;params.conf&#39; se o parâmetro &#39;source_file&#39; foi informado corretamente e/ou se &#34; \
f&#34;este módulo está dentro da pasta &#39;models&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ModuleNotFoundError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {msg_erro}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ModuleNotFoundError(msg)
except ImportError as e:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {str(e)}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ImportError(msg)

Expand All @@ -86,13 +88,13 @@ <h1 class="title">Module <code>docs.mllibprodest.initiators.model_initiator</cod
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloCLF&#39;): {str(e)[64:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloCLF&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloCLF&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceCLF&#39; e possua as implementações para os métodos abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
elif models_params[model_name][&#39;model_class&#39;] == &#34;ModeloRETRAIN&#34;:
cls = getattr(modulo, &#34;ModeloRETRAIN&#34;)
Expand All @@ -106,20 +108,20 @@ <h1 class="title">Module <code>docs.mllibprodest.initiators.model_initiator</cod
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloRETRAIN&#39;): {str(e)[68:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloRETRAIN&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloRETRAIN&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceRETRAIN&#39; e possua as implementações para os métodos &#34; \
f&#34;abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
else:
msg = f&#34;Modelo: {model_name}. O valor do parâmetro &#39;model_class&#39; está incorreto. Foi informado &#34; \
f&#34;&#39;{models_params[model_name][&#39;model_class&#39;]}&#39; no arquivo &#39;params.conf&#39;, porém deve ser &#34; \
f&#34;&#39;ModeloCLF&#39; ou &#39;ModeloRETRAIN&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ValueError(msg)

return modelos</code></pre>
Expand Down Expand Up @@ -170,18 +172,18 @@ <h2 class="section-title" id="header-classes">Classes</h2>
msg = f&#34;Modelo: {model_name}. O módulo &#39;{caminho_import}&#39; não foi encontrado. Verifique no &#34; \
f&#34;arquivo &#39;params.conf&#39; se o parâmetro &#39;source_file&#39; foi informado corretamente e/ou se &#34; \
f&#34;este módulo está dentro da pasta &#39;models&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ModuleNotFoundError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {msg_erro}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ModuleNotFoundError(msg)
except ImportError as e:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {str(e)}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ImportError(msg)

Expand All @@ -195,13 +197,13 @@ <h2 class="section-title" id="header-classes">Classes</h2>
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloCLF&#39;): {str(e)[64:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloCLF&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloCLF&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceCLF&#39; e possua as implementações para os métodos abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
elif models_params[model_name][&#39;model_class&#39;] == &#34;ModeloRETRAIN&#34;:
cls = getattr(modulo, &#34;ModeloRETRAIN&#34;)
Expand All @@ -215,20 +217,20 @@ <h2 class="section-title" id="header-classes">Classes</h2>
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloRETRAIN&#39;): {str(e)[68:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloRETRAIN&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloRETRAIN&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceRETRAIN&#39; e possua as implementações para os métodos &#34; \
f&#34;abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
else:
msg = f&#34;Modelo: {model_name}. O valor do parâmetro &#39;model_class&#39; está incorreto. Foi informado &#34; \
f&#34;&#39;{models_params[model_name][&#39;model_class&#39;]}&#39; no arquivo &#39;params.conf&#39;, porém deve ser &#34; \
f&#34;&#39;ModeloCLF&#39; ou &#39;ModeloRETRAIN&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ValueError(msg)

return modelos</code></pre>
Expand Down Expand Up @@ -270,18 +272,18 @@ <h3>Static methods</h3>
msg = f&#34;Modelo: {model_name}. O módulo &#39;{caminho_import}&#39; não foi encontrado. Verifique no &#34; \
f&#34;arquivo &#39;params.conf&#39; se o parâmetro &#39;source_file&#39; foi informado corretamente e/ou se &#34; \
f&#34;este módulo está dentro da pasta &#39;models&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ModuleNotFoundError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {msg_erro}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ModuleNotFoundError(msg)
except ImportError as e:
msg = f&#34;Modelo: {model_name}. Erro ao importar os módulos necessários para o módulo &#34; \
f&#34;&#39;{caminho_import}&#39;. Mensagem do Import: {str(e)}&#34;
logging.error(msg)
LOGGER.error(msg)
# Não utilizei o &#39;from None&#39; para preservar o traceback
raise ImportError(msg)

Expand All @@ -295,13 +297,13 @@ <h3>Static methods</h3>
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloCLF&#39;): {str(e)[64:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloCLF&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloCLF&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceCLF&#39; e possua as implementações para os métodos abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
elif models_params[model_name][&#39;model_class&#39;] == &#34;ModeloRETRAIN&#34;:
cls = getattr(modulo, &#34;ModeloRETRAIN&#34;)
Expand All @@ -315,20 +317,20 @@ <h3>Static methods</h3>
except TypeError as e:
msg = f&#34;Faltou a implementação do(s) seguinte(s) método(s) para o modelo &#39;{model_name}&#39; &#34; \
f&#34;(classe &#39;ModeloRETRAIN&#39;): {str(e)[68:]}.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg) from None
else:
msg = f&#34;Modelo: {model_name}. O tipo do &#39;ModeloRETRAIN&#39; está incorreto: &#39;{type(cls).__name__}&#39;. &#34; \
f&#34;&#39;ModeloRETRAIN&#39; deve ser uma classe que herda os métodos da interface &#34; \
f&#34;&#39;ModelPublicationInterfaceRETRAIN&#39; e possua as implementações para os métodos &#34; \
f&#34;abstratos dela.&#34;
logging.error(msg)
LOGGER.error(msg)
raise TypeError(msg)
else:
msg = f&#34;Modelo: {model_name}. O valor do parâmetro &#39;model_class&#39; está incorreto. Foi informado &#34; \
f&#34;&#39;{models_params[model_name][&#39;model_class&#39;]}&#39; no arquivo &#39;params.conf&#39;, porém deve ser &#34; \
f&#34;&#39;ModeloCLF&#39; ou &#39;ModeloRETRAIN&#39;. Programa abortado!&#34;
logging.error(msg)
LOGGER.error(msg)
raise ValueError(msg)

return modelos</code></pre>
Expand Down
Loading

0 comments on commit 1199033

Please sign in to comment.