Diretrizes para implantar modelos MLflow

APLICA-SE A:Extensão ml da CLI do Azure 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. Saiba também sobre as diferentes ferramentas que você pode usar para gerenciar a implantação.

Implantação de modelos MLflow versus modelos personalizados

Ao contrário da implantação de modelo personalizado no Aprendizado de Máquina do Azure, quando você implanta modelos MLflow no Aprendizado de Máquina do Azure, não precisa 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 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.

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 Python

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 seu tipo de implantação.

O arquivo conda.yaml a seguir mostra um exemplo de dependências conda especificadas em um modelo 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 deteta automaticamente os pacotes ao registrar um modelo e fixa as versões do pacote nas dependências conda do modelo. No entanto, essa deteção automática de pacotes nem sempre reflete suas intenções ou requisitos. Nesses casos, considere registrar modelos com uma definição de dependências conda personalizada.

Implicações do uso de 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 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 o esperado, a invocação do modelo falhará.

Você pode inspecionar a assinatura de um modelo MLflow abrindo o arquivo MLmodel associado ao modelo. Para obter mais informações sobre como as assinaturas funcionam no MLflow, consulte Assinaturas no MLflow.

O arquivo a seguir mostra o arquivo MLmodel associado a um modelo MLflow.

Modelo de ML

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 opcionais, mas altamente recomendadas, pois fornecem uma maneira conveniente de detetar problemas de compatibilidade de dados antecipadamente. Para obter mais informações sobre como registrar modelos com assinaturas, consulte Registrando modelos com uma assinatura, ambiente ou exemplos personalizados.

Modelos implantados no Azure Machine Learning versus modelos implantados no servidor interno MLflow

O MLflow inclui ferramentas de implantação internas que os desenvolvedores de modelos podem usar para testar modelos localmente. Por exemplo, você pode executar uma instância local de um modelo registrado no registro do servidor MLflow, usando ou usando mlflow models serve -m my_model a CLI mlflow models predictMLflow.

Inferência com pontos de extremidade em lote versus online

O Azure Machine Learning 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 são semelhantes ao servidor interno MLflow, pois fornecem uma maneira escalável, síncrona e leve de executar modelos para inferência.

Por outro lado, os pontos de extremidade em lote são capazes de 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 atualmente não possui esse recurso, embora um recurso semelhante possa ser alcançado 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.

As seções a seguir se concentram mais em modelos MLflow implantados em pontos de extremidade online do Azure Machine Learning.

Formatos de entrada

Input type Servidor integrado MLflow Pontos 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 Utilizar o lote1
Formato de entrada tensor como listas serializadas por JSON (tensores) e dicionário de listas (tensores nomeados)
Entrada tensor formatada como na API do TF Serve

1 Considere o uso de inferência em lote para processar arquivos. Para obter mais informações, consulte Implantar modelos MLflow em pontos de extremidade em lote.

Estrutura de entrada

Independentemente do tipo de entrada usado, o Aprendizado de Máquina do Azure exige que você forneça entradas em uma carga JSON dentro da chave input_datade dicionário. Como essa chave não é necessária ao usar o comando mlflow models serve para servir modelos, as cargas úteis não podem ser usadas de forma intercambiável para pontos de extremidade online do Aprendizado de Máquina do Azure e para o servidor interno MLflow.

Importante

Aviso MLflow 2.0: Observe que a estrutura da carga útil mudou no MLflow 2.0.

Esta seção mostra diferentes exemplos de carga útil e as diferenças de um modelo implantado no servidor interno MLflow versus o servidor de inferência do Azure Machine Learning.

Exemplo de carga útil para um DataFrame pandas serializado 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 carga útil para uma 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]
    ]
}

Exemplo de carga útil para uma 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]
        ]
    }
}

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.

Personalizar a inferência ao implantar modelos MLflow

Você pode estar acostumado a criar scripts de pontuação para personalizar como a inferência é executada para seus modelos personalizados. No entanto, ao implantar modelos MLflow no Azure Machine Learning, a decisão sobre como a inferência deve ser executada é feita pelo construtor de modelos (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, se você precisar alterar como a inferência de um modelo MLflow é executada, você pode fazer uma das duas 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 mlflow.autolog ou mlflow.<flavor>.log_model, o sabor usado para o modelo decide como a inferência deve ser executada e quais resultados o modelo retorna. MLflow não impõe nenhum comportamento específico para como a predict() função gera resultados.

Em alguns casos, no entanto, você pode querer fazer algum pré-processamento ou pós-processamento antes e depois que o modelo for executado. Em outras ocasiões, você pode querer 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, ou pyspark.ml.Pipeline são maneiras populares de implementar pipelines e, às vezes, sklearn.pipeline.Pipeline são recomendadas por considerações de desempenho. Outra alternativa é personalizar como seu modelo faz inferência, usando um sabor de modelo personalizado.

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, se necessário. Você pode usar o script de pontuação para personalizar como a inferência é executada para modelos MLflow. Para obter mais informações sobre como personalizar a inferência, consulte Personalizando implantações de modelo MLflow (pontos de extremidade online) e Personalizando implantações de modelo MLflow (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 muitas maneiras de implantar modelos MLflow em pontos de extremidade online e em lote. Você pode 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 recursos diferentes, particularmente em torno de qual tipo de computação eles podem segmentar. A tabela a seguir mostra os diferentes recursos.

Cenário MLflow SDK Azure Machine Learning CLI/SDK Azure Machine Learning Studio
Implantar em endpoints online gerenciados Ver exemplo1 Ver exemplo1 Ver exemplo1
Implantar em pontos de extremidade online gerenciados (com um script de pontuação) Não suportado3 Ver exemplo Ver exemplo
Implantar em pontos de extremidade em lote Não suportado3 Ver exemplo Ver exemplo
Implantar em pontos de extremidade em lote (com um script de pontuação) Não suportado3 Ver exemplo Ver exemplo
Implantar em serviços Web (ACI/AKS) Suporte legado2 Não suportado2 Não suportado2
Implantar em serviços Web (ACI/AKS - com um script de pontuação) Não suportado3 Suporte legado2 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 Em vez disso, recomendamos mudar para endpoints online gerenciados.

3 MLflow (OSS) não tem o conceito de um script de pontuação e não suporta execução em lote atualmente.

Qual ferramenta de implantação usar?

  • Use o SDK MLflow se ambas as condições se aplicarem:

    • Você está familiarizado com o MLflow ou está usando uma plataforma que oferece 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 alguma destas condições se aplicar:

    • Você está mais familiarizado com a CLI v2 do Azure Machine Learning.
    • Você deseja automatizar implantações, usando pipelines de automação.
    • Você deseja manter a configuração de implantação em um repositório git.
  • Use a implantação da interface do usuário do estúdio do Azure Machine Learning se quiser implantar e testar rapidamente modelos treinados com MLflow.