Implantar um modelo personalizado em um ponto de extremidade em lote
Se você quiser implantar um modelo em um ponto de extremidade em lote sem usar o formato de modelo MLflow, precisará criar o script de pontuação e o ambiente.
Para implantar um modelo, você já deve ter criado um ponto de extremidade. Em seguida, você pode implantar o modelo no ponto de extremidade.
Criar o script de pontuação
O script de pontuação é um arquivo que lê os novos dados, carrega o modelo e executa a pontuação.
O script de pontuação deve incluir duas funções:
init()
: Chamado uma vez no início do processo, então use para qualquer preparação cara ou comum, como carregar o modelo.run()
: Chamado para cada mini lote para realizar a pontuação.
O run()
método deve retornar um pandas DataFrame ou uma matriz/lista.
Um script de pontuação pode ter a seguinte aparência:
import os
import mlflow
import pandas as pd
def init():
global model
# get the path to the registered model file and load it
model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
model = mlflow.pyfunc.load(model_path)
def run(mini_batch):
print(f"run method start: {__file__}, run({len(mini_batch)} files)")
resultList = []
for file_path in mini_batch:
data = pd.read_csv(file_path)
pred = model.predict(data)
df = pd.DataFrame(pred, columns=["predictions"])
df["file"] = os.path.basename(file_path)
resultList.extend(df.values)
return resultList
Há algumas coisas a observar no script de exemplo:
AZUREML_MODEL_DIR
é uma variável de ambiente que você pode usar para localizar os arquivos associados ao modelo.- Use
global
a variável para disponibilizar todos os ativos necessários para pontuar os novos dados, como o modelo carregado. - O tamanho do
mini_batch
é definido na configuração de implantação. Se os arquivos no mini lote são muito grandes para serem processados, você precisa dividir os arquivos em arquivos menores. - Por padrão, as previsões serão gravadas em um único arquivo.
Gorjeta
Saiba mais sobre como criar scripts de pontuação para implantações em lote.
Criar um ambiente
Sua implantação requer um ambiente de execução no qual executar o script de pontuação. Qualquer dependência que seu código exija deve ser incluída no ambiente.
Você pode criar um ambiente com uma imagem do Docker com dependências do Conda ou com um Dockerfile.
Você também precisará adicionar a biblioteca azureml-core
, pois ela é necessária para que as implantações em lote funcionem.
Para criar um ambiente usando uma imagem base do Docker, você pode definir as dependências do Conda em um conda.yaml
arquivo:
name: basic-env-cpu
channels:
- conda-forge
dependencies:
- python=3.8
- pandas
- pip
- pip:
- azureml-core
- mlflow
Em seguida, para criar o ambiente, execute o seguinte código:
from azure.ai.ml.entities import Environment
env = Environment(
image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
conda_file="./src/conda-env.yml",
name="deployment-environment",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)
Configurar e criar a implantação
Finalmente, você pode configurar e criar a implantação com a BatchDeployment
classe.
from azure.ai.ml.entities import BatchDeployment, BatchRetrySettings
from azure.ai.ml.constants import BatchDeploymentOutputAction
deployment = BatchDeployment(
name="forecast-mlflow",
description="A sales forecaster",
endpoint_name=endpoint.name,
model=model,
compute="aml-cluster",
code_path="./code",
scoring_script="score.py",
environment=env,
instance_count=2,
max_concurrency_per_instance=2,
mini_batch_size=2,
output_action=BatchDeploymentOutputAction.APPEND_ROW,
output_file_name="predictions.csv",
retry_settings=BatchRetrySettings(max_retries=3, timeout=300),
logging_level="info",
)
ml_client.batch_deployments.begin_create_or_update(deployment)
Gorjeta
Explore a documentação de referência para criar uma implantação em lote com o Python SDK v2.