Skip to main content

No project description provided

Project description

DHuolib um produto do DHuo.data

Dhuolib é uma biblioteca projetada para gerenciar o ciclo de vida de modelos de machine learning de forma rápida e eficaz. Com a Dhuolib, é possível implementar e gerenciar ciclos de deploy, controle de versões e gerenciamento de modelos em predição de maneira simples e intuitiva. Este documento tem como objetivo demonstrar essas funcionalidades, facilitando o uso da ferramenta e potencializando sua eficiência.

dhuolib

Funcionalidades

Nesta sessão serão abordadas as principais funcionalidades presentes na dhuolib

Análise Exploratória / Persistencia / Aquisição de Dados

A análise exploratória de dados envolve a persistência e aquisição de dados de forma eficiente. Utiliza métodos para inserção direta de dados, atualização de tabelas com DataFrames, recuperação de registros e conversão de dados de tabela em DataFrames, facilitando o trabalho dos desenvolvedores na predição de modelos de machine learning.

Class: GenericRepository

A classe GenericRepository simplifica o uso e o acesso ao datalake. Possui diversos métodos, incluindo inserção e busca de dados. Seu objetivo é facilitar o trabalho dos desenvolvedores no processo de predição de modelos de machine learning, fornecendo uma interface simplificada para a interação com os dados.

init(self, db_connection)

O repositorio é iniciado passando uma conexão com o banco de dados como parametro no construtor

  • Parameters:
    • db_connection: Uma instancia do DatabaseConnection que provê a conexão e controle de acesso com o datalake

create_table_by_dataframe(self, table_name: str, df: pd.DataFrame)

Cria uma tabela baseada em um dataframe existente

  • Parameters:
    • table_name: Nome da tabela onde o dado será inserido.
    • dataframe: Um dataframe representando a tabela e os dados a serem inseridos
  • Returns:
    • Retorna o numero de itens inseridos na tabela

Example:

df = pd.DataFrame({"name": ["example"], "value": [42]})
number_lines = repo.create_table_by_dataframe("my_table", data)

update_table_by_dataframe(self, table_name: str, df_predict: pd.DataFrame, if_exists: str = "append", is_update_version: bool, force_replace_delete_itens_in_table: bool)

Atualiza uma tabela adicionando ou substituindo registros usando um DataFrame do pandas.

  • Parâmetros:

  • table_name ==obrigatório==: O nome da tabela a ser atualizada.

  • dataframe: Um DataFrame do pandas contendo os registros a serem inseridos.

  • if_exists: Especifica o comportamento se a tabela já existir, podendo ser replace ou append. O padrão é "append" .

  • is_update_version: Faz update da versão do dado a ser inserido na tabela que vai receber o resultado da predição. A table precisa ter três colunas ==PREDICT, CREATED_AT e VERSION.==

  • **force_replace_delete_itens_in_table: ==WARNING ==**Esta função também suporta a substituição de valores na tabela. É importante entender que, se essa opção for definida como True, todos os dados da tabela serão substituídos.

  • Example:

    df = pd.DataFrame({"name": ["example"], "value": [42]})
    repo.update_table_by_dataframe("my_table", df)
    

to_dataframe(self, table_name: str , filter_clause: str , list_columns: list )

Converte os resultados da consulta em um DataFrame do pandas.

  • Parâmetros:
    • table_name ==obrigatório==: O nome da tabela a ser consultada.
    • filter_clause: Uma cláusula de filtro opcional para aplicar à consulta.
    • list_columns: Uma lista opcional de colunas a serem incluídas na consulta.
  • Retorna:
    • Um DataFrame do pandas contendo os resultados da consulta.
  • Exemplo:
df = repo.to_dataframe("my_table", filter_clause="value > 10", list_columns=["name", "value"])

Criação de Experimentos, Ciclo de vida do modelo e Predição

Class: DhuolibExperimentClient

DhuolibExperimentClient interage com o serviço Dhuolib para gerenciar experimentos, executar modelos, criar modelos e fazer previsões. Inclui métodos para criar e executar experimentos, criar modelos e fazer previsões em lote.

init(self, service_uri: str, token: str)

Inicializa o cliente com um endpoint de serviço.

  • Parâmetros:
    • service_uri ==obrigatório==: O uri da api de serviço Dhuolib
    • token ==obrigatório==: token de autenticação
  • Lança:
    • ValueError: Se service_uri ou token não for fornecido.

create_experiment(self, experiment_name: str, experiment_tags: dict) -> dict

Cria um novo experimento com o nome e tags especificados. Se o experimento já existir com o mesmo nome ele retorna um dict com as informações do modelo.

  • Parâmetros:
    • experiment_name ==obrigatório==: O nome do experimento.
    • experiment_tags: Dicionário opcional de tags para o experimento.
  • Retorna:
    • Um dicionário contendo os detalhes do experimento criado ou uma mensagem de erro.

Exemplo:

experiment_response = dhuolib_client.create_experiment(
        experiment_name="iris-classification", experiment_tags={"tag": "iris"}
    )

execute_run_for_experiment(self, type_model: str, experiment_name: str, modelpkl_path: str, requirements_path:str, tags: dict) -> dict

Executa um experimento com o modelo e requisitos especificados.

  • Parâmetros:

    • type_model ==obrigatório==: O tipo do modelo.
    • experiment_name ==obrigatório==: O nome do experimento.
    • modelpkl_path ==obrigatório==: O caminho para o arquivo pickle do modelo.
    • requirements_path ==obrigatório==: O caminho para o arquivo de requisitos.
    • tags: O parametro tags é utilizado para facilitar o processo de busca de execuções para um determinado experimento
  • Retorna:

    • Um dict com os seguintes valores:
      • run_id : id de execução do run
      • model_uri: model_uri que sera utilizado para criar um modelo para esse run executado
  • Exemplo:

      experiment_run = dhuolib_client.execute_run_for_experiment(
            type_model="lightgbm",
            experiment_name="iris-classification",
            tags={"version": "v2", "priority": "P2"},
            modelpkl_path="{path}/iris.pkl",
            requirements_path="{path}/requirements.txt"
        )
    

create_model(self, model_params: dict) -> dict

Cria um novo modelo com os parâmetros especificados.

  • Parâmetros:
    • modelname ==obrigatório==: Nome que sera dado para identificar o modelo
    • stage ==obrigatório ==: O estado do modelo podendo ser STAGING e PRODUCTION
    • run_id ==obrigatório==: O run id da execução do experimento
    • model_uri==obrigatório==: O model path da execução do experimento
    • tags: O parametro tags é utilizado para facilitar o processo de busca de modelos
  • Retorna:
    • Um dicionário contendo os detalhes do modelo criado ou uma mensagem de erro.
      • model_version: O numero que identifica a versão do modelo
      • model_version_name: O nome dessa versão do modelo
      • run_id: O identificador unico da execução do experimento para um pkl especifico
      • previous_stage: O estado anterior do modelo
      • current_stage: O estado atual do modelo
      • last_updated_timestamp: data demontrando o tempo da ultima alteração do modelo

Exemplo:

dhuolib_client.create_model(modelname="iris-classification",
                           stage="Production",
                           run_id=experiment_run["run_id"],
                           model_uri=experiment_run["model_uri"],
                           tags={"type_model": "lightgbm"})

search_experiments(filter_string: str , max_results: int = 10, page_token: str ) -> dict:

Busca por experimentos atraves de um filtro passada por parametro

  • Parâmetros:
    • max_results: Quantidade de experimentos que são retornados . Valor default é 10
    • page_token: Token code que deve ser passado para buscar novos valores paginados
    • filter_string: ==obrigatório== String de consulta de filtro (por exemplo, "name = 'my_experiment'"), por padrão, busca todos os experimentos. Os seguintes identificadores, comparadores e operadores lógicos são suportados.
      • Identificadores:

        • name: Nome do experimento.
        • creation_time: Hora de criação do experimento.
        • last_update_time: Hora da última atualização do experimento.
        • tags.<tag_key>: Tag do experimento. Se tag_key contiver espaços, deve ser envolvida por crases (por exemplo, "tags.extra key").

        Comparadores para atributos de string e tags:

        • =: Igual a.
        • !=: Diferente de.
        • LIKE: Correspondência de padrão sensível a maiúsculas e minúsculas.
        • ILIKE: Correspondência de padrão insensível a maiúsculas e minúsculas.

        Comparadores para atributos numéricos:

        • =: Igual a.
        • !=: Diferente de.
        • <: Menor que.
        • <=: Menor ou igual a.
        • >: Maior que.
        • >=: Maior ou igual a.

        Operadores Lógicos:

        • AND: Combina duas subconsultas e retorna True se ambas forem True.
  • Retorna uma lista de experimentos com os seguintes parâmetros:
    • experiment_id: Identificador do experimento.
    • experiment_name: Nome do experimento.
    • lifecycle_stage: Estágio do ciclo de vida do experimento.
    • creation_time: Hora de criação do experimento.
    • last_update_time: Hora da última atualização do experimento.
    • tags: Tags associadas ao experimento.
 results = dhuolib_client.search_experiments(
     filter_string="tags.version LIKE 'v%'", max_results=10
    )

 results = dhuolib_client.search_experiments(
     filter_string="tags.version='v1'", max_results=2
 )

 print("All Experiments:")
 for result in results["experiments"]:
     print(result)

search_runs(filter_string: str, max_results: int = 10, page_token: str, experiment_name: str) -> dict:

Busca por execuções através de um filtro passado por parâmetro. Por padrão filter_string=* busca todos os runs.

  • Parâmetros:
    • max_results: Número máximo de resultados a serem retornados.
    • page_token: Token code que deve ser passado para buscar novos valores paginados.
    • experiment_name: Nome do experimento para filtrar as execuções.
    • filter_string ==obrigatório==:
      • Comparadores para atributos de string e tags:

        • =: Igual a.
        • !=: Diferente de.
        • LIKE: Correspondência de padrão sensível a maiúsculas e minúsculas.
        • ILIKE: Correspondência de padrão insensível a maiúsculas e minúsculas.

        Comparadores para atributos numéricos:

        • =: Igual a.
        • !=: Diferente de.
        • <: Menor que.
        • <=: Menor ou igual a.
        • >: Maior que.
        • >=: Maior ou igual a.

        Operadores Lógicos:

        • AND: Combina duas subconsultas e retorna True se ambas forem True.
  • Retorna uma lista de execuções com os seguintes parâmetros:
    • run_id: Identificador da execução.
    • experiment_id: Identificador do experimento.
    • status: Status da execução.
    • start_time: Hora de início da execução.
    • end_time: Hora de término da execução.
    • metrics: Métricas da execução.
    • params: Parâmetros da execução.
    • tags: Tags da execução.
 dholib_client = DhuolibExperimentMLClient(service_uri)
 print("Runs:")
 results = dhuolib_client.search_runs(
        experiment_name="wine-regression",
        filter_string="tags.type_model='keras'",
        max_results=2,
    )
 for result in results["runs"]:
     print(result)

search_models(filter_string: str , max_results: int = 10, page_token: str) -> dict:

Busca por modelos através de um filtro passado por parâmetro

  • Parâmetros:
    • max_results: Número máximo de resultados a serem retornados.

    • page_token: Token da página para busca paginada.

    • filter_string ==obrigatório==: String de consulta de filtro (por exemplo, "name = 'a_model_name' and tag.key = 'value1'"), por padrão, busca todas as versões de modelos. Os seguintes identificadores, comparadores e operadores lógicos são suportados.

      Identificadores:

      • name: Nome do modelo.
      • source_path: Caminho da fonte da versão do modelo.
      • run_id: ID da execução do mlflow que gerou a versão do modelo.
      • tags.<tag_key>: Tag da versão do modelo. Se tag_key contiver espaços, deve ser envolvida por crases (por exemplo, "tags.extra key").

      Comparadores:

      • =: Igual a.
      • !=: Diferente de.
      • LIKE: Correspondência de padrão sensível a maiúsculas e minúsculas.
      • ILIKE: Correspondência de padrão insensível a maiúsculas e minúsculas.
      • IN: Em uma lista de valores. Apenas o identificador run_id suporta o comparador IN.

      Operadores Lógicos:

      • AND: Combina duas subconsultas e retorna True se ambas forem True.
  • Retorna uma lista de modelos com os seguintes parâmetros:
    • model_id: Identificador do modelo.
    • model_name: Nome do modelo.
    • creation_time: Hora de criação do modelo.
    • last_update_time: Hora da última atualização do modelo.
    • tags: Tags associadas ao modelo.
results = dhuolib_client.search_models(
        filter_string="tags.version='v1'", max_results=2
    )
results = dhuolib_client.search_models(max_results=2, filter_string="name = 'iris-classification'")

transition_model(self, model_name: str, version: str, stage: str) -> dict:

Faz a transição dos modelos para diferentes ambientes por padrão o valor é None. Existem outros ambientes tambem Production, Staging ou Archived.

  • Parâmetros:
    • model_name ==obrigatório==: O nome do modelo
    • version ==obrigatório==: A versão do modelo que se deseja modar de ambiente
    • stage ==obrigatório==: Qual ambiente que se quer transicionar
  • Retorna:
    • Uma messagem indicando que o modelo foi transicionado ou uma mensagem de erro.

download_pkl(self, batch_params: dict) -> model

Faz o download de um determinado pkl.

  • Parâmetros:
    • batch_params ==obrigatório==: Um dicionário contendo os parâmetros do modelo ou run.
  • Retorna:
    • O load do pkl que foi baixado do servidor.

Exemplo:

batch_params = {
        "modelname": "iris-classification-lightgbm",
        "stage": "Production",
        "experiment_name": "iris-classification",
        "type_model": "lightgbm",
        "run_id": "",
        "batch_model_dir": "iris.pkl",
}
response = client.download_pkl(batch_params)

prediction_batch_with_dataframe(self, batch_params: dict, dataframe: pd.DataFrame) -> dict

Faz uma previsão em lote usando um DataFrame do pandas.

  • Parâmetros:
    • batch_params ==obrigatório==: Um dicionário contendo os parâmetros da previsão em lote.
    • df ==obrigatório==: Um DataFrame do pandas contendo os dados para a previsão.
  • Retorna:
    • Um dicionário contendo os resultados da previsão em lote ou uma mensagem de erro.

Exemplo:

batch_params = {
        "modelname": "iris-classification-lightgbm",
        "stage": "Production",
        "experiment_name": "iris-classification",
        "type_model": "lightgbm",
        "run_id": "",
        "batch_model_dir": "iris.pkl",
}
response = client.prediction_batch_with_dataframe(batch_params, dataframe)

Exemplo de Uso

import pickle
import lightgbm as lgb

from dhuolib.clients.experiment import DhuolibExperimentMLClient
from dhuolib.repository import DatabaseConnection, GenericRepository


def get_repository(config_file_name):
    if not config_file_name:
        raise ValueError("config_file_name is required")

    db = DatabaseConnection(config_file_name=config_file_name)
    repository = GenericRepository(db_connection=db)

    return repository


def train():
    service_uri = "https://dhuo-data-api-data-service-stg.br.engineering"

    dhuolib_client = DhuolibExperimentMLClient(
        service_uri=service_uri,
        token="{token}"
    )
    repository = get_repository(
        config_file_name="{path}/config/database.json"
    )
    df_iris_train = repository.to_dataframe(table_name="IRIS_TRAIN")

    print(df_iris_train.columns)

    X = df_iris_train[["sepal_length", "sepal_width", "petal_length", "petal_width"]]
    y = df_iris_train["class"]
    clf = lgb.LGBMClassifier()
    clf.fit(X, y)
    with open("iris.pkl", "wb") as f:
        pickle.dump(clf, f)

    dhuolib_client.create_experiment(
        experiment_name="lightgbm-iris", experiment_tags={"tag": "iris"}
    )

    experiment_run = dhuolib_client.execute_run_for_experiment(
        type_model="lightgbm",
        experiment_name="lightgbm-iris",
        tags={"version": "v2", "priority": "P2"},
        modelpkl_path="{path}/iris.pkl",
        requirements_path="{path}/requirements.txt",
    )
    print(experiment_run)

    result = dhuolib_client.create_model(
        modelname="iris-classification",
        stage="Production",
        run_id=experiment_run["run_id"],
        model_uri=experiment_run["model_uri"],
        tags={"type_model": "lightgbm"},
    )
    print(result)


if __name__ == "__main__":
    train()

Class: DhuolibPlatformClient

DhuolibPlatformClient interage com o serviço Dhuolib para gerenciar projetos em lote, implantar scripts, verificar o status do pipeline, criar clusters e executar pipelines em lote.

init(self, service_uri: str, project_name:str)

Inicializa o cliente com um endpoint de serviço e um nome de projeto opcional.

  • Parâmetros:
    • service_endpoint==obrigatório==: O endpoint do serviço Dhuolib.
    • project_name: Nome opcional do projeto.
    • token ==obrigatório==: token de autenticação
  • Lança:
    • ValueError: Se o projeto já existir.
    • ConnectionError: Se houver um erro de conexão.

create_batch_project(self, project_name: str)

Cria um novo projeto em lote com o nome especificado.

  • Parâmetros:

    • project_name ==obrigatório==: O nome do projeto.
  • Retorna:

    • Um dicionário contendo os detalhes do projeto criado ou uma mensagem de erro.
  • Lança:

    • ValueError: Se o projeto já existir.
    • ConnectionError: Se houver um erro de conexão.
  • Exemplo:

    response = dhuolib_platform.create_batch_project("MeuProjeto")
    

deploy_batch_project(self, script_filename: str, requirements_filename: str)

Implanta um projeto em lote com o script e requisitos especificados.

  • Parâmetros:
    • script_filename ==obrigatório==: O nome do arquivo do script.
    • project_name ==Não é obrigatório se o project_name for passado no construtor==: O nome do projeto.
    • requirements_filename ==obrigatório==: O nome do arquivo de requisitos.
  • Retorna:
    • A resposta do serviço Dhuolib ou uma mensagem de erro.
  • Lança:
    • ValueError: Se project_name, script_filename ou requirements_filename não foram fornecidos
    • FileNotFoundError: Se os arquivos especificados não forem encontrados.

Exemplo:

 response = dhuolib_platform.deploy_batch_project(
        script_filename="{path}/script.py",
        requirements_filename="{path}/requirements.txt"
    )

pipeline_status_report(self)

Gera um relatório de status do pipeline para o projeto em lote.

  • Parâmetros:

    • project_name ==Não é obrigatório se o project_name for passado no construtor==: O nome do projeto.
  • Retorna:

    • Uma lista de dicionários contendo a data, etapa e status de cada log do pipeline.
  • Lança:

    • ValueError: Se project_name não for fornecido
  • Exemplo:

    status_report = dhuolib_platform.pipeline_status_report()
    

create_cluster(self, cluster_size: int)

Cria um cluster com o tamanho especificado para o projeto em lote.

  • Parâmetros:

    • cluster_size: O tamanho do cluster (1, 2 ou 3).
    • project_name ==Não é obrigatório se o project_name for passado no construtor==: O nome do projeto.
  • Retorna:

    • A resposta do serviço Dhuolib.
  • Lança:

    • ValueError: Se project_name ou cluster_size não forem fornecidos ou se cluster_size não for 1, 2 ou 3.
  • Exemplo:

    response = dhuolib_platform.create_cluster(2)
    

batch_run(self)

Executa o pipeline em lote para o projeto.

  • Parâmetros:

    • project_name ==Não é obrigatório se o project_name for passado no construtor==: O nome do projeto.
  • Retorna:

    • A resposta do serviço Dhuolib.
  • Lança:

    • ValueError: Se project_name não for fornecido.
  • Exemplo:

    response = dhuolib_platform.batch_run()
    

schedule_batch_run(self, project_name: str, schedule_interval: str):

Cria o agendamento de execução de um processamento em batch

  • Parâmetros:

    • project_name ==obrigatório==: O nome do projeto que foi utilizado anteriormente
    • schedule_interval ==obrigatório==: O padrão de schedule a ser atribuido para o projeto ==schedule_interval="*/5 * * * *"==
  • Lança:

    • ValueError: Se o project_name não for fornecido.
  • Retorna:

    • Retorna um json com uma mensagem indicando se a schedule foi ou não criada
  • Exemplo:

dhuolib_platform.schedule_batch_run(
            project_name="lightgbm-iris",
            schedule_interval="*/5 * * * *"
        )

remove_schedule(self, project_name: str):

Deleta o agendamento de execução de um determinado projeto

  • Parâmetros:

    • project_name ==obrigatório==: O nome do projeto que foi utilizado anteriormente
  • Lança:

    • ValueError: Se o project_name não for fornecido.
  • Retorna:

    • Retorna um json com uma mensagem indicando se a schedule foi ou não criada
dhuolib_platform.remove_schedule(project_name="lightgbm-iris")
print(dholib_platform.schedule_batch_run(project_name="lightgbm-iris-stg", schedule_interval="*/5 * * * *"))

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dhuolib-0.2.2.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

dhuolib-0.2.2-py3-none-any.whl (44.3 kB view details)

Uploaded Python 3

File details

Details for the file dhuolib-0.2.2.tar.gz.

File metadata

  • Download URL: dhuolib-0.2.2.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.28.2 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.12

File hashes

Hashes for dhuolib-0.2.2.tar.gz
Algorithm Hash digest
SHA256 66f981fce5b127c9eed15fcd5ee3d670e40ecc30e215d3cde066775a499ff6e3
MD5 200580d18490b609227198494b2e6524
BLAKE2b-256 aea2993cf954f3ef829453f286dbf2818d29d70b5f43cb8930636d2ace26b665

See more details on using hashes here.

File details

Details for the file dhuolib-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: dhuolib-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 44.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.28.2 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.12

File hashes

Hashes for dhuolib-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 006b124606471a3feafe402e8e20f07f0d98675db79f532b007facd2047451ab
MD5 d51f0602ebc92a60ea3422e8c6e702e0
BLAKE2b-256 50fbbccd66214320d45c0d7287d2ddc3d471797fd31b7d2e6b6021b78bd54ae9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page