Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A:
Extensão de ML da CLI do Azurev2 (atual)
Neste artigo, você verá como implantar seu modelo de MLflow em um ponto de extremidade online para inferência em tempo real. Ao implantar o modelo do MLflow em um ponto de extremidade online, não é necessário especificar um script de pontuação ou um ambiente; essa funcionalidade é conhecida como implantação sem código.
Para a implantação sem código, o Azure Machine Learning:
- Instala dinamicamente os pacotes do Python listados em um arquivo conda.yaml. Como resultado, as dependências são instaladas durante o runtime do contêiner.
- Fornece uma imagem base do MLflow ou um ambiente curado 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 assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Uma conta de usuário que tem pelo menos uma das seguintes funções de RBAC (controle de acesso baseado em função) do Azure:
- Uma função de Proprietário para o workspace do Azure Machine Learning
- Uma função de Colaborador para o workspace do Azure Machine Learning
- Uma função personalizada que tem permissões
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
Para obter mais informações, consulte Gerenciar acesso a workspaces do Azure Machine Learning.
Acesso ao Azure Machine Learning:
Instale a CLI do Azure e a extensão
mlna CLI do Azure. Para obter as etapas de instalação, consulte Instalar e configurar a CLI (v2).
Sobre o exemplo
O exemplo neste artigo mostra como implantar um modelo MLflow em um endpoint online para realizar previsões. O exemplo usa um modelo do MLflow baseado no conjunto de dados Diabetes. Esse conjunto de dados contém 10 variáveis de linha de base: idade, sexo, índice de massa corporal, pressão arterial média e 6 medidas de soro do sangue obtidas de 442 pacientes com diabetes. Também contém a resposta de interesse, uma medida quantitativa da progressão da doença um ano após a data dos dados da linha de base.
O modelo foi treinado usando 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 para previsões.
As informações neste artigo se baseiam em amostras 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 do idioma de codificação:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Acompanhar no Jupyter Notebook
Para acompanhar as etapas deste artigo, veja o notebook Implantar modelo do MLflow em pontos de extremidade online no repositório de exemplos.
Conecte-se ao seu workspace
Conecte-se ao workspace do Azure Machine Learning:
az account set --subscription <subscription-ID>
az configure --defaults workspace=<workspace-name> group=<resource-group-name> location=<location>
Registre o modelo
Você pode implantar apenas modelos registrados em pontos de extremidade 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, você só precisa publicar o modelo no registro no workspace. Você poderá pular essa 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 seu modelo foi registrado dentro de uma execução?
Se o modelo foi registrado dentro de uma execução, você pode registrá-lo diretamente.
Para registrar o modelo, você precisa saber sua localização 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 do modelo. Essa pasta contém um arquivo chamado MLModel. - Se você usar o método
log_modelpara registrar manualmente seus modelos, passe o caminho do modelo como argumento desse método. Por exemplo, se você usarmlflow.sklearn.log_model(my_model, "classifier")para registrar o modelo em log,classifierserá 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
Implantar um modelo do MLflow em um ponto de extremidade 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 comando a seguir. Primeiro substitua
YOUR_ENDPOINT_NAMEpor um nome exclusivo.export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Para configurar seu endpoint, crie um arquivo YAML chamado create-endpoint.yaml que contenha as seguintes linhas:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: keyCriar o ponto de extremidade:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/ncd/create-endpoint.yamlConfigurar a implantação. Uma implantação é um conjunto de recursos necessários para hospedar o modelo que executa 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
A geração automática do
scoring_scripteenvironmenté suportada apenas para a variante do modeloPyFunc. Para usar um tipo de modelo diferente, consulte Personalizar as implantações de modelo do MLflow.Criar 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 de extremidade tem uma implantação, mas nenhum tráfego é atribuído a ele.
Essa etapa não será necessária na CLI do Azure se você usar o sinalizador
--all-trafficdurante a criação. Se você precisar alterar o tráfego, poderá usar oaz ml online-endpoint update --trafficcomando. Para obter mais informações sobre como atualizar o tráfego, consulte Atualizar progressivamente o tráfego.Atualizar a configuração do ponto de extremidade:
Essa etapa não será necessária na CLI do Azure se você usar o sinalizador
--all-trafficdurante a criação. Se você precisar alterar o tráfego, poderá usar oaz ml online-endpoint update --trafficcomando. Para obter mais informações sobre como atualizar o tráfego, consulte Atualizar progressivamente o tráfego.
Invocar o ponto de extremidade
Quando a implantação estiver pronta, você poderá usá-la para atender às solicitações. Uma maneira de testar a implantação é usando a funcionalidade de invocação interna em seu cliente de implantação. No repositório de exemplos, o arquivo sample-request-sklearn.json contém o código JSON a seguir. 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
Esse arquivo usa a input_data chave em vez de inputs, que o serviço MLflow usa. O Azure Machine Learning requer um formato de entrada diferente para poder gerar automaticamente os contratos Swagger para os endpoints. Para obter mais informações sobre os formatos de entrada esperados, consulte Implantação no servidor interno do 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 implantação sem codificação do MLflow, não há suporte para testes por meio de pontos de extremidade locais no momento.
Personalizar implantações de modelo do MLflow
Você não precisa especificar um script de pontuação na definição de implantação de um modelo do 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 do MLflow nos seguintes casos:
- O modelo não tem uma variante
PyFunc. - Você precisa personalizar a maneira como executa o modelo. Por exemplo, você precisa usar
mlflow.<flavor>.load_model()para usar uma variante específica para carregar o modelo. - Você precisa fazer pré-processamento ou pós-processamento em sua rotina de pontuação, pois 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 do MLflow, também precisará especificar o ambiente em que a implantação é executada.
Implantar um script de pontuação personalizado
Para implantar um modelo de MLflow que usa um script de pontuação personalizado, execute as etapas nas seções a seguir.
Identifique a pasta do modelo
Identifique a pasta que contém seu modelo MLflow seguindo as seguintes etapas:
Acesse o Estúdio do Azure Machine Learning.
Vá para a seção Modelos.
Selecione o modelo que você deseja implantar e acesse a guia Artefatos.
Anote a pasta exibida. Ao registrar um modelo, especifique esta pasta.
Criar um script de pontuação
O script de pontuação a seguir, score.py, fornece um exemplo de como executar a inferência com um modelo de 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 modelanteriormente 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
Consultoria do MLflow 2.0: o script de pontuação de exemplo funciona com o MLflow 1.X e o MLflow 2.X. No entanto, os formatos de entrada e saída esperados nessas versões podem variar. Verifique sua definição de ambiente para ver qual versão do MLflow você usa. O MLflow 2.0 só é compatível com o 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 de MLflow, os requisitos do conda também são especificados no pacote de modelos. Para obter mais informações sobre os arquivos incluídos em um modelo do MLflow, consulte o formato MLmodel. Você cria o ambiente usando as dependências conda presentes 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 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 a implantação
Na pasta endpoints/online/ncd, crie um arquivo de configuração de implantação, deployment.yml, que contém 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
Criar a implantação:
az ml online-deployment create -f endpoints/online/ncd/deployment.yml
Atender solicitações
Quando sua implantação for concluída, ela estará pronta para atender às 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
Consultoria do MLflow 2.0: no MLflow 1.X, a resposta não contém a predictions chave.
Limpar os recursos
Se você não precisar mais do ponto de extremidade, exclua seus recursos associados:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes