Implantar um modelo em um endpoint online gerenciado
Você pode optar por implantar um modelo em um ponto de extremidade online gerenciado sem usar o formato de modelo MLflow. Para implantar um modelo, você precisará criar o script de pontuação e definir o ambiente necessário durante a inferência.
Para implantar um modelo, você precisa ter criado um ponto de extremidade. Em seguida, você pode implantar o modelo no ponto de extremidade.
Implantar um modelo em um ponto de extremidade
Para implantar um modelo, você deve ter:
- Arquivos de modelo armazenados no caminho local ou modelo registrado.
- Um roteiro de pontuação.
- Um ambiente de execução.
Os arquivos de modelo podem ser registrados e armazenados quando você treina um modelo.
Criar o script de pontuação
O script de pontuação precisa incluir duas funções:
init()
: Chamado quando o serviço é inicializado.run()
: Chamado quando novos dados são enviados ao serviço.
A função init é chamada quando a implantação é criada ou atualizada, para carregar e armazenar em cache o modelo do registro do modelo. A função run é chamada para cada vez que o ponto de extremidade é invocado, para gerar previsões a partir dos dados de entrada. O seguinte exemplo de script Python mostra esse padrão:
import json
import joblib
import numpy as np
import os
# called when the deployment is created or updated
def init():
global model
# get the path to the registered model file and load it
model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'model.pkl')
model = joblib.load(model_path)
# called when a request is received
def run(raw_data):
# get the input data as a numpy array
data = np.array(json.loads(raw_data)['data'])
# get a prediction from the model
predictions = model.predict(data)
# return the predictions as any JSON serializable format
return predictions.tolist()
Criar um ambiente
Sua implantação requer um ambiente de execução no qual executar o script de pontuação.
Você pode criar um ambiente com uma imagem do Docker com dependências do Conda ou com um Dockerfile.
Para criar um ambiente usando uma imagem base do Docker, você pode definir as dependências do Conda em um conda.yml
arquivo:
name: basic-env-cpu
channels:
- conda-forge
dependencies:
- python=3.7
- scikit-learn
- pandas
- numpy
- matplotlib
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.yml",
name="deployment-environment",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env)
Criar a implantação
Quando você tiver seus arquivos de modelo, script de pontuação e ambiente, poderá criar a implantação.
Para implantar um modelo em um ponto de extremidade, você pode especificar a configuração de computação com dois parâmetros:
instance_type
: Tamanho da máquina virtual (VM) a ser usado. Reveja a lista de tamanhos suportados.instance_count
: Número de instâncias a serem usadas.
Para implantar o modelo, use a ManagedOnlineDeployment
classe e execute o seguinte comando:
from azure.ai.ml.entities import ManagedOnlineDeployment, CodeConfiguration
model = Model(path="./model",
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name="endpoint-example",
model=model,
environment="deployment-environment",
code_configuration=CodeConfiguration(
code="./src", scoring_script="score.py"
),
instance_type="Standard_DS2_v2",
instance_count=1,
)
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
Gorjeta
Explore a documentação de referência para criar uma implantação online gerenciada com o Python SDK v2.
Você pode implantar vários modelos em um ponto de extremidade. Para rotear o tráfego para uma implantação específica, use o seguinte código:
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.begin_create_or_update(endpoint).result()
Para excluir o ponto de extremidade e todas as implantações associadas, execute o comando:
ml_client.online_endpoints.begin_delete(name="endpoint-example")