Diretrizes para implantar modelos do MLflow
APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)
Neste artigo, saiba mais sobre a implantação de modelos do MLflow no Azure Machine Learning para inferência em tempo real e em lote. Saiba também sobre as diferentes ferramentas que podem ser usadas para gerenciar a implantação.
Implantação de modelos do MLflow versus modelos personalizados
Ao contrário da implantação de modelo personalizado no Azure Machine Learning, ao implantar modelos do MLflow no Azure Machine Learning, não é necessário fornecer um script de pontuação ou um ambiente para implantação. Em vez disso, 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 de Python
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 a seguir mostra um exemplo de dependências do Conda especificadas em um modelo de MLflow.
conda.yaml
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
Aviso
O MLflow detecta automaticamente pacotes ao registrar um modelo e fixa as versões do pacote nas dependências do Conda do modelo. No entanto, essa detecção automática de pacotes pode nem sempre refletir suas intenções ou requisitos. Nesses casos, considere registrar modelos com uma definição personalizada de dependências do Conda.
Implicações do uso de 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 lotes, o Azure Machine Learning impõe 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 esperado, a invocação do modelo falhará.
Inspecione a assinatura de um modelo do MLflow abrindo o arquivo MLmodel associado ao modelo. Para obter mais detalhes sobre como as assinaturas funcionam no MLflow, consulte Assinaturas no MLflow.
O arquivo a seguir mostra o arquivo MLmodel associado a um modelo do MLflow.
MLmodel
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
As assinaturas em modelos MLflow são opcionais, mas altamente recomendadas, pois fornecem uma maneira conveniente de detectar antecipadamente 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.
Modelos implantados no Azure Machine Learning versus modelos implantados no servidor interno do MLflow
O MLflow inclui ferramentas de implantação internas que desenvolvedores de modelo podem usar para testar modelos localmente. Por exemplo, execute uma instância local de um modelo registrado no registro do servidor do MLflow usando o mlflow models serve -m my_model
ou usando a mlflow models predict
CLI do MLflow.
Inferência em lote versus pontos de extremidade online
O Azure Machine Learning dá suporte à implantação de modelos em pontos de extremidade online e de lote. Esses pontos de extremidade executam diferentes tecnologias de inferência que podem ter recursos distintos.
Os pontos de extremidade online são semelhantes ao servidor integrado do MLflow, pois fornecem uma maneira escalonável, síncrona e leve de executar modelos para inferência.
Por outro lado, os pontos de extremidade em lote podem executar inferência assíncrona em processos de inferência de execução prolongada, que podem escalar para grandes quantidades de dados. Atualmente, o servidor MLflow não tem essa funcionalidade, embora uma funcionalidade semelhante possa ser obtida usando trabalhos do Spark. Para saber mais sobre pontos de extremidade em lote e modelos do MLflow, consulte Usar modelos do MLflow em implantações em lote.
As seções que seguem se concentram mais nos modelos do MLflow implantados nos pontos de extremidade online do Azure Machine Learning.
Formatos de entrada
Tipo de entrada | Servidor interno do MLflow | Pontos 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 | ✓ | Usar o lote1 |
Formato de entrada tensor como listas serializadas por JSON (tensores) e dicionário de listas (tensores nomeados) | ✓ | ✓ |
Entrada de tensor formatada como na API do TF Serving | ✓ |
1 Considere usar a inferência em lote para processar arquivos. Para obter mais informações, confira Implantar modelos do MLflow em pontos de extremidade em lote.
Estrutura de entrada
Independentemente do tipo de entrada usado, o Azure Machine Learning requer que você forneça entradas em um conteúdo JSON, dentro da chave do dicionário input_data
. Como essa chave não é necessária ao usar o comando mlflow models serve
para atender modelos, os conteúdos não podem ser usados de forma intercambiável para pontos de extremidade online do Azure Machine Learning e para o servidor interno do MLflow.
Importante
Aviso do MLflow 2.0: observe que a estrutura do conteúdo mudou no MLflow 2.0.
Esta seção mostra exemplos de conteúdo diferentes e as diferenças para um modelo implantado no servidor interno do MLflow em comparação com o servidor de inferência do Azure Machine Learning.
Exemplo de conteúdo para um DataFrame de 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]
]
}
}
Exemplo de conteúdo para uma entrada de 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]
]
}
Exemplo de conteúdo para uma entrada nomeada de tensor
{
"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]
]
}
}
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.
Personalizar a inferência ao implantar modelos do MLflow
Você talvez esteja acostumado a criar scripts de criação para personalizar como a inferência é executada para seus modelos personalizados. No entanto, ao implantar modelos do MLflow no Azure Machine Learning, a decisão sobre como a inferência deve ser executada é feita pelo construtor do modelo (a pessoa que criou o modelo) e não pelo engenheiro de DevOps (a pessoa que está tentando implantá-lo). Cada estrutura de modelo pode aplicar automaticamente rotinas de inferência específicas.
A qualquer momento, caso precise alterar a forma como a inferência de um modelo do MLflow é executada, faça uma dessas duas 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
Ao registrar um modelo usando mlflow.autolog
ou mlflow.<flavor>.log_model
, a variante usada para o modelo decide como a inferência deve ser executada e o que é retornado pelo modelo. O MLflow não impõe um comportamento específico para a forma como a função predict()
gera resultados.
Em alguns casos, no entanto, talvez você queira fazer algum pré-processamento ou pós-processamento antes e depois de seu modelo ser executado. Em outras ocasiões, talvez você queira alterar o que é retornado (por exemplo, probabilidades versus 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 para considerações de desempenho. Outra alternativa é personalizar como seu modelo faz a inferência, usando uma variante de modelo personalizada.
Personalizar a inferência com um script de pontuação
Embora os modelos do MLflow não exijam um script de pontuação, você ainda pode fornecer um, se necessário. Use o script de pontuação para personalizar como a inferência é executada para modelos do MLflow. Para obter mais informações sobre como personalizar a inferência, consulte Personalizar as implantações de modelo do MLflow (pontos de extremidade online) e Personalizar as implantações de modelo do MLflow (pontos 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 várias maneiras de implantar modelos do MLflow em pontos de extremidade online e de lote. É possível implantar modelos usando as seguintes ferramentas:
- MLflow SDK
- CLI do Azure Machine Learning
- SDK do Azure Machine Learning para Python
- Azure Machine Learning Studio
Cada fluxo de trabalho tem funcionalidades diferentes, especialmente com relação a qual tipo de computação elas podem direcionar. A tabela a seguir mostra os diferentes recursos.
Cenário | MLflow SDK | CLI/SDK do Azure Machine Learning | Azure Machine Learning Studio |
---|---|---|---|
Implantar em pontos de extremidade gerenciados | Confira o exemplo1 | Confira o exemplo1 | Confira o exemplo1 |
Implantar em pontos de extremidade online gerenciados (com um script de pontuação) | Sem suporte3 | Confira o exemplo | Confira o exemplo |
Implantar em pontos de extremidade de lote | Sem suporte3 | Confira o exemplo | Confira o exemplo |
Implantar em pontos de extremidade de lote (com um script de pontuação) | Sem suporte3 | Confira o exemplo | Confira o exemplo |
Implantar em serviços Web (ACI/AKS) | Suporte herdado2 | Sem suporte2 | Sem suporte2 |
Implantar em serviços Web (ACI/AKS – com um script de pontuação) | Sem suporte3 | Suporte herdado2 | 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 Em vez disso, recomendamos mudar para nossos pontos de extremidade online gerenciados.
3 O MLflow (OSS) não tem o conceito de um script de pontuação e não tem suporte para execução em lote no momento.
Qual ferramenta de implantação usar?
Use o SDK do MLflow se ambas as condições se aplicarem:
- Você está familiarizado com o MLflow ou está usando uma plataforma que dá suporte ao MLflow nativamente (como o Azure Databricks).
- Você deseja continuar usando o mesmo conjunto de métodos do MLflow.
Use a CLI do Azure Machine Learning v2, se qualquer uma dessas condições se aplicar:
- Você está mais familiarizado com a CLI do Azure Machine Learning v2.
- Você deseja automatizar implantações usando pipelines de automação.
- Você deseja manter a configuração de implantação em um repositório do Git.
Use a implementação da interface do usuário do Estúdio do Azure Machine Learning, se quiser implementar e testar rapidamente modelos treinados com o MLflow.