Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
APLICA-SE A:
Azure CLI ml extension v2 (atual)
Neste artigo, você verá como implantar seu modelo MLflow em um ponto de extremidade online para inferência em tempo real. Quando você implanta seu modelo MLflow em um ponto de extremidade online, não precisa especificar um script de pontuação ou um ambiente — essa funcionalidade é conhecida como implantação sem código.
Para implantação sem código, Azure Machine Learning:
- Instala dinamicamente pacotes Python que você lista em um arquivo conda.yaml. Como resultado, as dependências são instaladas durante o tempo de execução do contêiner.
- Fornece uma imagem base MLflow, ou ambiente com curadoria, que contém os seguintes itens:
- o pacote
azureml-inference-server-http - o pacote
mlflow-skinny - Um script de pontuação para inferência
- o pacote
Prerequisites
Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Uma conta de usuário que tenha pelo menos uma das seguintes funções de controle de acesso baseado em função do Azure (Azure RBAC):
- Uma função de Proprietário para o espaço de trabalho do Azure Machine Learning
- Uma função de Colaborador para o espaço de trabalho do Azure Machine Learning
- Uma função personalizada que tem
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*permissões
Para obter mais informações, consulte Gerenciar o acesso aos espaços de trabalho do Azure Machine Learning.
Acesso ao Azure Machine Learning:
Instale a CLI do Azure e a
mlextensão da CLI do Azure. Para conhecer as etapas de instalação, consulte Instalar e configurar a CLI (v2).
Sobre o exemplo
O exemplo neste artigo mostra como desdobrar um modelo MLflow para um endpoint online a fim de realizar previsões. O exemplo usa um modelo MLflow baseado no conjunto de dados Diabetes. Este conjunto de dados contém 10 variáveis basais: idade, sexo, índice de massa corporal, pressão arterial média e 6 medições séricas obtidas de 442 pacientes com diabetes. Contém também a resposta de interesse, uma medida quantitativa da progressão da doença um ano após a data dos dados de referência.
O modelo foi treinado por meio de um scikit-learn regressor. Todo o pré-processamento necessário é empacotado como um pipeline, portanto, esse modelo é um pipeline de ponta a ponta que vai de dados brutos a previsões.
As informações neste artigo são baseadas em exemplos de código do repositório azureml-examples . Se você clonar o repositório, poderá executar os comandos neste artigo localmente sem precisar copiar ou colar arquivos YAML e outros arquivos. Use os seguintes comandos para clonar o repositório e ir para a pasta para sua linguagem de codificação:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Acompanhe no Jupyter Notebook
Para acompanhar as etapas neste artigo, consulte o bloco de anotações Implantar modelo MLflow em pontos de extremidade online no repositório de exemplos.
Ligar à sua área de trabalho
Conecte-se ao seu espaço de trabalho do Azure Machine Learning:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Registar o modelo
Você pode implantar apenas modelos registrados em endpoints online. As etapas neste artigo usam um modelo treinado para o conjunto de dados Diabetes. Nesse caso, você já tem uma cópia local do modelo em seu repositório clonado, portanto, só precisa publicar o modelo no registro no espaço de trabalho. Você pode pular esta etapa se o modelo que deseja implantar já estiver registrado.
MODEL_NAME='sklearn-diabetes'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "endpoints/online/ncd/sklearn-diabetes/model"
E se o seu modelo estivesse registado dentro de uma corrida?
Se o seu modelo foi registado dentro de uma execução, pode registá-lo diretamente.
Para registrar o modelo, você precisa saber seu local de armazenamento:
- Se você usar o recurso MLflow
autolog, o caminho para o modelo dependerá do tipo de modelo e da estrutura. Verifique a saída do trabalho para identificar o nome da pasta modelo. Esta pasta contém um arquivo chamado MLModel. - Se você usar o
log_modelmétodo para registrar manualmente seus modelos, você passa o caminho para o modelo como um argumento para esse método. Por exemplo, se você usarmlflow.sklearn.log_model(my_model, "classifier")para registrar o modelo,classifieré o caminho no qual o modelo está armazenado.
Você pode usar a CLI do Azure Machine Learning v2 para criar um modelo a partir da saída do trabalho de treinamento. O código a seguir usa os artefatos de um trabalho com ID $RUN_ID para registrar um modelo chamado $MODEL_NAME.
$MODEL_PATH é o caminho que o trabalho usa para armazenar o modelo.
az ml model create --name $MODEL_NAME --path azureml://jobs/$RUN_ID/outputs/artifacts/$MODEL_PATH
Desplegar uma modelo de MLflow a um terminal online
Use o código a seguir para configurar o nome e o modo de autenticação do ponto de extremidade no qual você deseja implantar o modelo:
Defina um nome de ponto de extremidade executando o seguinte comando. Primeiro, substitua
YOUR_ENDPOINT_NAMEpor um nome exclusivo.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Para configurar seu ponto de extremidade, crie um arquivo YAML chamado create-endpoint.yaml que contém as seguintes linhas:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: keyCrie o ponto de extremidade:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yamlConfigure a implantação. Uma implantação é um conjunto de recursos necessários para hospedar o modelo que faz a inferência real.
Crie um arquivo YAML chamado sklearn-deployment.yaml que contenha as seguintes linhas:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: sklearn-deployment endpoint_name: my-endpoint model: name: mir-sample-sklearn-ncd-model version: 2 path: sklearn-diabetes/model type: mlflow_model instance_type: Standard_DS3_v2 instance_count: 1Note
Geração automática do
scoring_scripteenvironmentsó são suportados para a variante de modeloPyFunc. Para usar uma variante diferente de modelo, consulte Personalizar implantações de modelos MLflow.Crie a implantação:
az ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficaz ml online-deployment create --name sklearn-deployment --endpoint $ENDPOINT_NAME -f endpoints/online/ncd/sklearn-deployment.yaml --all-trafficAtribua todo o tráfego à implantação. Até agora, o ponto final tem uma implantação, mas nenhum tráfego está atribuído a ela.
Esta etapa não é necessária na CLI do Azure se usar o sinalizador
--all-trafficdurante a criação. Se você precisar alterar o tráfego, você pode usar oaz ml online-endpoint update --trafficcomando. Para obter mais informações sobre como atualizar o tráfego, consulte Atualizar progressivamente o tráfego.Atualize a configuração do ponto final:
Esta etapa não é necessária na CLI do Azure se usar o sinalizador
--all-trafficdurante a criação. Se você precisar alterar o tráfego, você pode usar oaz ml online-endpoint update --trafficcomando. Para obter mais informações sobre como atualizar o tráfego, consulte Atualizar progressivamente o tráfego.
Invoque o ponto de extremidade
Quando sua implantação estiver pronta, você poderá usá-la para atender solicitações. Uma maneira de testar a implantação é usando o recurso de invocação interno em seu cliente de implantação. No repositório de exemplos, o arquivo sample-request-sklearn.json contém o seguinte código JSON. Você pode usá-lo como um arquivo de solicitação de exemplo para a implantação.
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Note
Este arquivo usa a chave input_data em vez de inputs, que o serviço MLflow utiliza. O Azure Machine Learning requer um formato de entrada diferente para gerar automaticamente os contratos Swagger para os endpoints. Para obter mais informações sobre formatos de entrada esperados, consulte Implantação no servidor interno MLflow versus implantação no servidor de inferência do Azure Machine Learning.
Envie uma solicitação para o endpoint:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A resposta deve ser semelhante ao seguinte texto:
[
11633.100167144921,
8522.117402884991
]
Important
Para a implementação sem código do MLflow, o teste via endpoints locais atualmente não é suportado.
Personalizar implantações de modelo MLflow
Não é necessário especificar um script de pontuação na definição de implantação de um modelo MLflow para um ponto de extremidade online. Mas você pode especificar um script de pontuação se quiser personalizar seu processo de inferência.
Normalmente, você deseja personalizar a implantação do modelo MLflow nos seguintes casos:
- O modelo não tem
PyFuncsabor. - Você precisa personalizar a maneira como executa o modelo. Por exemplo, você precisa usar
mlflow.<flavor>.load_model()para usar um sabor específico para carregar o modelo. - Você precisa fazer pré-processamento ou pós-processamento na sua rotina de pontuação, porque o modelo não faz esse processamento.
- A saída do modelo não pode ser bem representada em dados tabulares. Por exemplo, a saída é um tensor que representa uma imagem.
Important
Se você especificar um script de pontuação para uma implantação de modelo MLflow, também precisará especificar o ambiente em que a implantação é executada.
Implantar um script de pontuação personalizado
Para implantar um modelo MLflow que usa um script de pontuação personalizado, execute as etapas nas seções a seguir.
Identificar a pasta modelo
Identifique a pasta que contém seu modelo MLflow executando as seguintes etapas:
Vá para o estúdio do Azure Machine Learning.
Vá para a seção Modelos .
Selecione o modelo que você deseja implantar e vá para a guia Artefatos .
Anote a pasta exibida. Ao registrar um modelo, você especifica essa pasta.
Criar um script de pontuação
O script de pontuação a seguir, score.py, fornece um exemplo de como executar inferência com um modelo MLflow. Você pode adaptar esse script às suas necessidades ou alterar qualquer uma de suas partes para refletir seu cenário. Observe que o nome da pasta que você identificou anteriormente, model, está incluído na init() função.
import logging
import os
import json
import mlflow
from io import StringIO
from mlflow.pyfunc.scoring_server import infer_and_parse_json_input, predictions_to_json
def init():
global model
global input_schema
# "model" is the path of the mlflow artifacts when the model was registered. For automl
# models, this is generally "mlflow-model".
model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model")
model = mlflow.pyfunc.load_model(model_path)
input_schema = model.metadata.get_input_schema()
def run(raw_data):
json_data = json.loads(raw_data)
if "input_data" not in json_data.keys():
raise Exception("Request must contain a top level key named 'input_data'")
serving_input = json.dumps(json_data["input_data"])
data = infer_and_parse_json_input(serving_input, input_schema)
predictions = model.predict(data)
result = StringIO()
predictions_to_json(predictions, result)
return result.getvalue()
Warning
MLflow 2.0 advisory: O script de pontuação de exemplo funciona com MLflow 1.X e MLflow 2.X. No entanto, os formatos de entrada e saída esperados nessas versões podem variar. Verifique a definição do ambiente para ver qual versão do MLflow você usa. MLflow 2.0 só é suportado em Python 3.8 e versões posteriores.
Criar um ambiente
A próxima etapa é criar um ambiente no qual você possa executar o script de pontuação. Como o modelo é um modelo MLflow, os requisitos do conda também constam especificados no pacote do modelo. Para obter mais informações sobre os arquivos incluídos em um modelo MLflow, consulte O formato MLmodel. Você cria o ambiente usando as dependências do conda definidas no arquivo. No entanto, você também precisa incluir o azureml-inference-server-http pacote, que é necessário para implantações online no Azure Machine Learning.
Você pode criar um arquivo de definição de conda chamado conda.yaml que contém as seguintes linhas:
channels:
- conda-forge
dependencies:
- python=3.12
- pip
- pip:
- mlflow
- scikit-learn==1.7.0
- cloudpickle==3.1.1
- psutil==7.0.0
- pandas==2.3.0
- azureml-inference-server-http
name: mlflow-env
Note
A dependencies seção deste arquivo conda inclui o azureml-inference-server-http pacote.
Use este arquivo de dependências conda para criar o ambiente:
O ambiente é criado embutido na configuração de implantação.
Criar uma implantação
Na pasta endpoints/online/ncd, crie um arquivo de configuração de implantação, deployment.yml, que contenha as seguintes linhas:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: sklearn-diabetes-custom
endpoint_name: my-endpoint
model: azureml:sklearn-diabetes@latest
environment:
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: sklearn-diabetes/environment/conda.yaml
code_configuration:
code: sklearn-diabetes/src
scoring_script: score.py
instance_type: Standard_F2s_v2
instance_count: 1
Crie a implantação:
az ml online-deployment create -f endpoints/online/ncd/deployment.yml
Atender solicitações
Quando sua implantação estiver concluída, ela estará pronta para atender solicitações. Uma maneira de testar a implantação é usar o invoke método com um arquivo de solicitação de exemplo, como o seguinte arquivo, sample-request-sklearn.json:
{"input_data": {
"columns": [
"age",
"sex",
"bmi",
"bp",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6"
],
"data": [
[ 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 ],
[ 10.0,2.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0]
],
"index": [0,1]
}}
Envie uma solicitação para o endpoint:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/ncd/sample-request-sklearn.json
A resposta deve ser semelhante ao seguinte texto:
{
"predictions": [
1095.2797413413252,
1134.585328803727
]
}
Warning
Aviso MLflow 2.0: No MLflow versão 1.X, a resposta não inclui a chave predictions.
Limpar recursos
Se você não precisar mais do ponto de extremidade, exclua seus recursos associados:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes