Diretrizes para implantar modelos do MLflow
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Nesse 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
Ao implantar modelos do MLflow no Azure Machine Learning, diferentemente da implantação de modelos personalizados, você não precisa 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 a implantação sem código, o Azure Machine Learning:
- Garante que todas as dependências de pacote indicadas no modelo do MLflow sejam atendidas.
- Fornece uma imagem base do MLflow ou do ambiente coletado que contém os seguintes itens:
- Pacotes necessários para que o Azure Machine Learning execute inferência, incluindo
mlflow-skinny
. - Um script de pontuação para executar a inferência.
- Pacotes necessários para que o Azure Machine Learning execute inferência, incluindo
Dica
Workspaces sem acesso à rede pública: antes de implantar modelos do MLflow em pontos de extremidade online sem conectividade de saída, você precisa empacotar os modelos (versão prévia). Usando o empacotamento de modelo, você pode evitar a necessidade de uma conexão com a Internet, o que, de outro modo, o Azure Machine Learning exigirá para instalar dinamicamente os pacotes do Python necessários para os modelos do MLflow.
Pacotes e dependências
O Azure Machine Learning gera automaticamente ambientes para executar a inferência de modelos no MLflow. Para criar os ambientes, o Azure Machine Learning faz a leitura das dependências do Conda especificadas no modelo do 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 do 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 detecta pacotes automaticamente quando registra um modelo e fixa as versões dos pacotes nas dependências conda do modelo. Essa detecção automática de pacotes pode não refletir suas intenções ou necessidades. Você pode alternativamente registrar modelos com uma assinatura personalizada, ambiente ou amostras.
Modelos com assinaturas
Os modelos do 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 Azure Machine Learning 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 detalhes sobre como as assinaturas funcionam no MLflow, consulte Assinaturas no MLflow.
O exemplo a seguir arquivo MLmodel destaca o signature
.
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"}]'
Dica
Assinaturas em modelos MLflow são recomendadas porque fornecem uma maneira conveniente de detectar problemas de compatibilidade de dados. Para obter mais informações sobre como registrar modelos com assinaturas, consulte Como registrar modelos com uma assinatura, ambiente ou amostras personalizados.
Implantação no servidor interno do MLflow vs. implantação no servidor de inferência do Azure Machine Learning
Os desenvolvedores de modelos podem usar as 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 o MLflow CLI mlflow models predict
. Para obter mais informações sobre as ferramentas de implantação internas do MLflow, consulte as Ferramentas de implantação internas na documentação do MLflow.
O Azure Machine Learning também oferece 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 distintos.
Os pontos de extremidade online do Azure Machine Learning, semelhantes ao servidor integrado do MLflow, fornecem uma maneira escalável, síncrona e leve de executar modelos para inferência.
Os pontos de extremidade em lote do Azure Machine Learning podem executar inferência assíncrona em processos de inferência de longa duraçã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 Spark jobs. Para saber mais sobre pontos de extremidade em lote e modelos do MLflow, consulte Usar modelos do MLflow em implantações em lote.
Formatos de entrada
A tabela a seguir mostra os tipos de entrada suportados pelo servidor interno do MLflow em comparação aos pontos de extremidade online do Azure Machine Learning.
Tipo de entrada | Servidor interno do MLflow | Ponto de extremidade online do Azure Machine Learning |
---|---|---|
DataFrames de pandas serializados por JSON na orientação dividida | ✓ | ✓ |
DataFrames de pandas serializados por JSON na orientação de registros | Preterido | |
DataFrames de pandas serializados em CSV | ✓ | Use inferência em lote. Para obter mais informações, confira Implantar modelos do MLflow em pontos de extremidade em lote. |
Entrada do TensorFlow como listas serializadas em 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 nos modelos MLflow implantados nos pontos de extremidade online do Azure Machine Learning.
Estrutura de entrada
Independentemente do tipo de entrada, o Azure Machine Learning exige que você forneça entradas em uma carga JSON na chave do dicionário input_data
. Essa chave não é necessária quando você usa o comando mlflow models serve
para servir modelos, portanto, as cargas não podem ser usadas de forma intercambiável para pontos de extremidade online do Azure Machine Learning e o servidor interno do MLflow.
Importante
A estrutura da carga útil mudou no MLflow 2.0.
Os exemplos de carga útil a seguir mostram diferenças entre um modelo implantado no servidor interno do MLflow em comparação ao servidor de inferência do Azure Machine Learning.
DataFrame pandas serializado em 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 do 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 inferências para modelos personalizados. Mas para a implantação do modelo MLflow, a decisão sobre como executar a inferência é tomada pelo criador do modelo 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 seu modelo está sendo registrado na rotina de treinamento.
- Personalize a inferência com um script de pontuação no momento da implantação.
Alterar como o modelo é registrado durante o treinamento
Quando você registra um modelo usando mlflow.autolog
ou mlflow.<flavor>.log_model
, o tipo usado para o modelo determina como executar a inferência e quais resultados retornar. O MLflow não impõe um comportamento específico para a forma como a função predict()
gera resultados.
Em alguns casos, talvez você queira fazer algum pré-processamento ou pós-processamento antes e depois da execução do seu 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 formas populares de implementar pipelines e, às vezes, são recomendadas por motivos de desempenho. Você também pode personalizar como seu modelo faz inferências 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, veja Personalizar implantações do modelo MLflow para ponto de extremidade online ou Personalizar implantação do modelo com script de pontuação para ponto de extremidade em lote.
Importante
Se optar por especificar um script de pontuação para uma implantação de modelo do MLflow, você também precisará fornecer um ambiente para a implantação.
Ferramentas de implantação
O Azure Machine Learning oferece as seguintes ferramentas para implantar modelos MLflow em pontos de extremidade online e em lote:
- MLflow SDK
- CLI do Azure Machine Learning v2
- SDK do Azure Machine Learning para Python
- Azure Machine Learning Studio
Cada ferramenta tem capacidades diferentes, especialmente para o tipo de computação que ela pode atingir. A tabela a seguir mostra o suporte para diferentes cenários de implantação do MLflow.
Cenário | MLflow SDK | CLI/SDK ou estúdio do Azure Machine Learning |
---|---|---|
Implantar em pontos de extremidade online gerenciados1 | Com suporte. Veja Implementação progressiva de modelos MLflow para pontos de extremidade online | Com suporte. Veja Implantar modelos MLflow em pontos de extremidade online |
Implantar em pontos de extremidade online gerenciados com um script de pontuação | Sem suporte3 | Com suporte. Veja Personalize implantações do modelo MLflow |
Implantar em pontos de extremidade de lote | Sem suporte3 | Com suporte. Veja Use modelos MLflow em implantações em lote |
Implantar em pontos de extremidade em lote com um script de pontuação | Sem suporte3 | Com suporte. Veja Personalize a implantação do modelo com script de pontuação |
Implantar em serviços da Web como Instâncias de Contêiner do Azure ou Azure Kubernetes Service (AKS) | Suporte herdado2 | Sem suporte2 |
Implante em serviços da Web como instâncias de contêiner ou AKS com um script de pontuação | Sem suporte3 | Suporte herdado2 |
1 A implantação em pontos de extremidade online que estão em workspaces com link privado habilitado requer que você empacote modelos antes da implantação (versão prévia).
2 Alternar para pontos de extremidade online gerenciados se possível.
3 O MLflow de código aberto não tem o conceito de script de pontuação e não oferece suporte à execução em lote.
Escolha uma ferramenta de implantação
Use o MLflow SDK 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 nativo ao MLflow.
Use o Azure Machine Learning CLI 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 de usuário do Estúdio do Azure Machine Learning se quiser implantar e testar rapidamente modelos treinados com o MLflow.