Diretrizes para implantar modelos MLflow
APLICA-SE A: Azure CLI ml extension v2 (atual)
Neste artigo, saiba mais sobre a implantação de modelos MLflow no Azure Machine Learning para inferência em tempo real e em lote, e sobre diferentes ferramentas que você pode usar para gerenciar as implantações.
Implantação sem código
Quando você implanta modelos MLflow no Aprendizado de Máquina do Azure, ao contrário da implantação de modelo personalizado, não é necessário fornecer um script de pontuação ou um ambiente. O Azure Machine Learning gera automaticamente o script de pontuação e o ambiente para você. Essa funcionalidade é chamada de implantação sem código.
Para implantação sem código, Azure Machine Learning:
- Garante que todas as dependências de pacote indicadas no modelo MLflow sejam satisfeitas.
- Fornece uma imagem base MLflow ou ambiente curado que contém os seguintes itens:
- Pacotes necessários para o Azure Machine Learning executar inferência, incluindo
mlflow-skinny
. - Um script de pontuação para realizar inferência.
- Pacotes necessários para o Azure Machine Learning executar inferência, incluindo
Gorjeta
Espaços de trabalho sem acesso à rede pública: antes de implantar modelos MLflow em pontos de extremidade online sem conectividade de saída, você precisa empacotar os modelos (visualização). Usando o empacotamento de modelo, você pode evitar a necessidade de uma conexão com a Internet, que o Aprendizado de Máquina do Azure exigiria para instalar dinamicamente os pacotes Python necessários para os modelos MLflow.
Pacotes e dependências
O Azure Machine Learning gera automaticamente ambientes para executar inferência em modelos MLflow. Para criar os ambientes, o Aprendizado de Máquina do Azure lê as dependências de conda especificadas no modelo MLflow e adiciona todos os pacotes necessários para executar o servidor de inferência. Esses pacotes extras variam dependendo do tipo de implantação.
O arquivo conda.yaml de exemplo a seguir mostra as dependências conda especificadas em um modelo MLflow.
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Importante
O MLflow deteta automaticamente os pacotes quando registra um modelo e fixa as versões do pacote nas dependências conda do modelo. Essa deteção automática de pacotes pode não refletir suas intenções ou requisitos. Como alternativa, você pode registrar modelos com uma assinatura, ambiente ou exemplos personalizados.
Modelos com assinaturas
Os modelos MLflow podem incluir uma assinatura que indica as entradas esperadas e seus tipos. Quando esses modelos são implantados em pontos de extremidade online ou em lote, o Aprendizado de Máquina do Azure garante que o número e os tipos de entradas de dados estejam em conformidade com a assinatura. Se os dados de entrada não puderem ser analisados conforme o esperado, a invocação do modelo falhará.
Você pode inspecionar uma assinatura de modelo MLflow abrindo o arquivo MLmodel. Para obter mais informações sobre como as assinaturas funcionam no MLflow, consulte Assinaturas no MLflow.
O arquivo MLmodel de exemplo a seguir destaca o signature
arquivo .
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Gorjeta
As assinaturas em modelos MLflow são recomendadas porque fornecem uma maneira conveniente de detetar problemas de compatibilidade de dados. Para obter mais informações sobre como registrar modelos com assinaturas, consulte Registrando modelos com uma assinatura, ambiente ou exemplos personalizados.
Implantação no servidor interno MLflow versus implantação no servidor de inferência do Azure Machine Learning
Os desenvolvedores de modelos podem usar ferramentas de implantação integradas do MLflow para testar modelos localmente. Por exemplo, você pode executar uma instância local de um modelo registrado no registro do servidor MLflow usando mlflow models serve
ou a CLI mlflow models predict
MLflow . Para obter mais informações sobre as ferramentas de implantação internas do MLflow, consulte Ferramentas de implantação internas na documentação do MLflow.
O Azure Machine Learning também dá suporte à implantação de modelos em pontos de extremidade online e em lote. Esses pontos de extremidade executam diferentes tecnologias de inferência que podem ter recursos diferentes.
Os pontos de extremidade online do Aprendizado de Máquina do Azure, semelhantes ao servidor interno MLflow, fornecem uma maneira escalável, síncrona e leve de executar modelos para inferência.
Os pontos de extremidade em lote do Aprendizado de Máquina do Azure podem executar inferência assíncrona em processos de inferência de longa execução que podem ser dimensionados para grandes quantidades de dados. O servidor MLflow não possui esse recurso, embora você possa obter um recurso semelhante usando trabalhos do Spark. Para saber mais sobre pontos de extremidade em lote e modelos MLflow, consulte Usar modelos MLflow em implantações em lote.
Formatos de entrada
A tabela a seguir mostra os tipos de entrada suportados pelo servidor interno MLflow versus pontos de extremidade online do Azure Machine Learning.
Input type | Servidor integrado MLflow | Ponto de extremidade online do Azure Machine Learning |
---|---|---|
DataFrames pandas serializados por JSON na orientação dividida | ✓ | ✓ |
DataFrames pandas serializados por JSON na orientação de registros | Preterido | |
DataFrames pandas serializados por CSV | ✓ | Use a inferência em lote. Para obter mais informações, consulte Implantar modelos MLflow em pontos de extremidade em lote. |
Entrada do TensorFlow como listas serializadas por JSON (tensores) e dicionário de listas (tensores nomeados) | ✓ | ✓ |
Entrada do TensorFlow usando a API de serviço do TensorFlow | ✓ |
As seções a seguir se concentram em modelos MLflow implantados em pontos de extremidade online do Azure Machine Learning.
Estrutura de entrada
Independentemente do tipo de entrada, o Aprendizado de Máquina do Azure exige que você forneça entradas em uma carga JSON na chave input_data
do dicionário. Essa chave não é necessária quando você usa o comando mlflow models serve
para servir modelos, portanto, as cargas úteis não podem ser usadas de forma intercambiável para pontos de extremidade online do Azure Machine Learning e o servidor interno MLflow.
Importante
A estrutura de carga útil foi alterada no MLflow 2.0.
Os exemplos de carga útil a seguir mostram diferenças entre um modelo implantado no servidor interno MLflow versus o servidor de inferência do Azure Machine Learning.
DataFrame pandas serializados por JSON na orientação dividida
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Entrada tensor
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Entrada de tensor nomeado
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Personalização de inferência para modelos MLflow
Os scripts de pontuação personalizam como executar a inferência para modelos personalizados. Mas para a implantação do modelo MLflow, a decisão sobre como executar a inferência é tomada pelo construtor de modelos e não pelo engenheiro de implantação. Cada estrutura de modelo pode aplicar automaticamente rotinas de inferência específicas.
Se precisar alterar a forma como a inferência é executada para um modelo MLflow, você pode fazer uma das seguintes coisas:
- Altere a forma como o seu modelo está a ser registado na rotina de treino.
- Personalize a inferência com um script de pontuação no momento da implantação.
Alterar a forma como o modelo é registado durante a formação
Quando você registra um modelo usando um ou mlflow.autolog
mlflow.<flavor>.log_model
, o sabor usado para o modelo determina como executar a inferência e quais resultados retornar. MLflow não impõe nenhum comportamento específico para como a predict()
função gera resultados.
Em alguns casos, você pode querer fazer algum pré-processamento ou pós-processamento antes e depois da execução do modelo. Ou, você pode querer alterar o que é retornado; por exemplo, probabilidades em vez de classes. Uma solução é implementar pipelines de aprendizado de máquina que passam de entradas para saídas diretamente.
Por exemplo, sklearn.pipeline.Pipeline
ou pyspark.ml.Pipeline
são maneiras populares de implementar pipelines e, às vezes, são recomendadas por motivos de desempenho. Você também pode personalizar como seu modelo faz inferência registrando modelos personalizados.
Personalizar a inferência com um script de pontuação
Embora os modelos MLflow não exijam um script de pontuação, você ainda pode fornecer um para personalizar a execução de inferência para modelos MLflow, se necessário. Para obter mais informações sobre como personalizar a inferência, consulte Personalizar implantações de modelo MLflow para pontos de extremidade online ou Personalizar implantação de modelo com script de pontuação para pontos de extremidade em lote.
Importante
Se você optar por especificar um script de pontuação para uma implantação de modelo MLflow, também precisará fornecer um ambiente para a implantação.
Ferramentas de implementação
O Azure Machine Learning oferece as seguintes ferramentas para implantar modelos MLflow em pontos de extremidade online e em lotes:
- MLflow SDK
- CLI do Azure Machine Learning v2
- SDK do Azure Machine Learning para Python
- Azure Machine Learning studio
Cada ferramenta tem capacidades diferentes, particularmente para o tipo de computação que pode segmentar. A tabela a seguir mostra o suporte para diferentes cenários de implantação de MLflow.
Cenário | MLflow SDK | Azure Machine Learning CLI/SDK ou estúdio |
---|---|---|
Implantar em pontosde extremidade online gerenciados 1 | Suportado. Consulte Distribuição progressiva de modelos MLflow para endpoints online | Suportado. Consulte Implantar modelos MLflow em pontos de extremidade online |
Implante em endpoints online gerenciados com um script de pontuação | Não suportado3 | Suportado. Consulte Personalizar implantações de modelo MLflow |
Implantar em pontos de extremidade em lote | Não suportado3 | Suportado. Consulte Usar modelos MLflow em implantações em lote |
Implantar em pontos de extremidade em lote com um script de pontuação | Não suportado3 | Suportado. Consulte Personalizar a implantação do modelo com script de pontuação |
Implantar em serviços Web como Instâncias de Contêiner do Azure ou Serviço Kubernetes do Azure (AKS) | Suporte legado2 | Não suportado2 |
Implante em serviços Web como instâncias de contêiner ou AKS com um script de pontuação | Não suportado3 | Suporte legado2 |
1 A implantação em pontos de extremidade online que estão em espaços de trabalho com link privado habilitado exige que você empacote modelos antes da implantação (visualização).
2 Mude para endpoints online gerenciados, se possível.
3 O MLflow de código aberto não tem o conceito de um script de pontuação e não suporta execução em lote.
Escolha uma ferramenta de implantação
Use o SDK MLflow se:
- Você está familiarizado com o MLflow e deseja continuar usando os mesmos métodos, e
- Você está usando uma plataforma como o Azure Databricks que oferece suporte ao MLflow nativamente.
Use a CLI do Azure Machine Learning v2 ou o SDK para Python se:
- Você está familiarizado com eles, ou
- Você deseja automatizar a implantação com pipelines, ou
- Você deseja manter a configuração de implantação em um repositório Git.
Use a interface do usuário do estúdio do Azure Machine Learning se quiser implantar e testar rapidamente modelos treinados com MLflow.