Coreflow - Abstração de Funções para MLFlow não oficial.
Project description
Guia de Desenvolvimento: Modelos e Inferência no coremlflow
Este guia explica como criar scripts de Treinamento (train.py) e Predição/Inferência (predict.py) utilizando o framework base da biblioteca coremlflow.
A arquitetura orientada a objetos obriga a implementação de métodos especÃficos para padronizar o ciclo de vida do modelo e a integração automática com o MLflow.
🚀 1. Criando um Modelo de Treinamento (train.py)
Com o coremlflow, você tem a opção de herdar da classe base genérica ou utilizar as abstrações especÃficas construÃdas para os principais frameworks de Data Science.
A. Utilizando as Classes Especializadas (Recomendado)
O pacote coremlflow.models provê classes preparadas que já implementam automaticamente a melhor forma de salvar o seu modelo (ex: usando mlflow.sklearn ou mlflow.prophet).
Exemplo: Random Forest
Para Random Forest ou Isolation Forest, herde das classes em coremlflow.models.sklearn:
import pandas as pd
from typing import Dict, Any
from sklearn.ensemble import RandomForestClassifier
from coremlflow.models.sklearn import RandomForestMLFlowModel
class MeuModeloRF(RandomForestMLFlowModel):
def __init__(self, experiment_name: str, data_path: str, tracking_uri: str = None):
super().__init__(experiment_name, tracking_uri)
self.data_path = data_path
def load_data(self) -> Dict[str, Any]:
# Exemplo carregando dados de Treino/Teste
return {"X_train": [...], "y_train": [...], "X_test": [...], "y_test": [...]}
def train(self, data: Dict[str, Any], params: Dict[str, Any]) -> Any:
model = RandomForestClassifier(**params)
model.fit(data["X_train"], data["y_train"])
return model
def evaluate(self, model: Any, data: Dict[str, Any]) -> Dict[str, float]:
# Calcule e retorne suas métricas
score = model.score(data["X_test"], data["y_test"])
return {"accuracy": score}
def get_signature_data(self, model: Any, data: Dict[str, Any]) -> tuple:
return (data["X_train"], data["y_train"])
Note que não foi necessário implementar o método save_model(), pois ele já foi abstraÃdo pela classe mãe RandomForestMLFlowModel.
Outros modelos suportados nativamente:
IsolationForestMLFlowModel(emcoremlflow.models.sklearn)ProphetMLFlowModel(emcoremlflow.models.prophet)
B. Utilizando a Classe Base Genérica
Se você estiver treinando um modelo Keras, PyTorch, ou outro ainda não mapeado nas classes filhas nativas, basta herdar nativamente da MLFlowModelBase e definir seu .save_model().
from coremlflow.base import MLFlowModelBase
import mlflow.keras
class MeuModeloGenerico(MLFlowModelBase):
# ... defina load(), train(), evaluate(), get_signature_data() ...
def save_model(self, model, signature) -> None:
# [Obrigatório na Base]
mlflow.keras.log_model(model, artifact_path="model", signature=signature)
Executando o Treinamento
Para rodar, instancie a sua classe e chame o método genérico run(params). Ele vai orquestrar todas as chamadas garantindo o log correto no MLflow.
if __name__ == "__main__":
predictor = MeuModeloRF(experiment_name="Projeto_Churn", data_path="dados.csv")
params = {"n_estimators": 100, "max_depth": 5}
modelo = predictor.run(params=params)
🔮 2. Consumindo um Modelo em Produção (predict.py)
Ao fazer a inferência, importe o MLFlowPredictorBase.
Essa classe cuida internamente do carregamento do modelo a partir do Registry do MLflow. Se o Tracking Server do MLflow estiver fora do ar, você ainda pode fornecer um local_model_path como fallback.
Estrutura da Classe de Predição
Opcionalmente, você pode sobrescrever o método predict, mas por base, a classe já traz o comportamento chamando recursivamente o modelo baixado no formato pyfunc.
from coremlflow.predictor import MLFlowPredictorBase
# Você pode usar a classe base diretamente:
servico_ia = MLFlowPredictorBase(
internal_alias="CHURN_PROD",
internal_alias_map_path="./mlflow_aliases.json",
local_model_path="./modelos_backup/rf_model_v1" # Fallback opcional offline
)
# Os resultados dependerão da natureza do modelo treinado.
resultados = servico_ia.predict(dados_de_entrada)
Ou, caso você precise criar um fluxo complexo de tratamento de dados de entrada antes / depois de passar pelo .predict():
class SeuPredictorService(MLFlowPredictorBase):
def predict(self, input_data):
# 1. Trata input_data (ex: limpeza, feature engineering)
dados_tratados = limpar(input_data)
# 2. Chama a predição da classe base
resultado = super().predict(dados_tratados)
# 3. Pós Processa
return formatar(resultado)
Exemplo de arquivo ./mlflow_aliases.json (apelido interno -> run_id):
{
"CHURN_PROD": "a1b2c3d4e5f6g7h8i9j0",
"FORECAST_PROD": { "run_id": "ffffeeee111122223333444455556666", "artifact_path": "model" }
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file coremlflow-0.0.2.tar.gz.
File metadata
- Download URL: coremlflow-0.0.2.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e06c7113bbe69314d1e76a398719aca06858da202226b4aab0f3715d7caccb21
|
|
| MD5 |
51c435b1810245eb7b9d6d608d0d7da8
|
|
| BLAKE2b-256 |
06e9243fd830c4e0d302bb250e98cc76f011c77039af80575574a9ee4a3da328
|
File details
Details for the file coremlflow-0.0.2-py3-none-any.whl.
File metadata
- Download URL: coremlflow-0.0.2-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3342cc90281de4dca164d33dc71dc5aca33322a027595e808122b1e781ebddb5
|
|
| MD5 |
5abe4a23a1b326b2bf9023b46fcdccdd
|
|
| BLAKE2b-256 |
4a907600b87fc6e128f2a705bf07a293884a24fa4ef6ae425648edc7b9864e1b
|