Gerenciar o registro de modelos no Azure Machine Learning com MLflow

O Azure Machine Learning dá suporte ao MLflow para gerenciamento de modelos quando conectado a um espaço de trabalho. Essa abordagem é uma maneira conveniente de oferecer suporte a todo o ciclo de vida do modelo para usuários familiarizados com o cliente MLFlow.

Este artigo descreve os recursos para gerenciar um registro modelo com MLflow e como esse método se compara com outras opções de gerenciamento.

Pré-requisitos

  • Instale o pacote MLflow SDK mlflow e o plug-in do Azure Machine Learning azureml-mlflow para MLflow da seguinte maneira:

    pip install mlflow azureml-mlflow
    

    Gorjeta

    Você pode usar o mlflow-skinny pacote, que é um pacote MLflow leve sem dependências de armazenamento SQL, servidor, interface do usuário ou ciência de dados. Este pacote é recomendado para usuários que precisam principalmente dos recursos de rastreamento e registro em log do MLflow sem importar o conjunto completo de recursos, incluindo implantações.

  • Crie um espaço de trabalho do Azure Machine Learning. Para criar um espaço de trabalho, consulte Criar recursos necessários para começar. Revise as permissões de acesso necessárias para executar suas operações MLflow em seu espaço de trabalho.

  • Para fazer o acompanhamento remoto ou acompanhar experiências em execução fora do Azure Machine Learning, configure o MLflow para apontar para o URI de acompanhamento da sua área de trabalho do Azure Machine Learning. Para obter mais informações sobre como conectar o MLflow ao seu espaço de trabalho, consulte Configurar o MLflow para o Azure Machine Learning.

  • Os procedimentos neste artigo usam um client objeto para se referir ao cliente MLflow.

    Algumas operações podem ser executadas diretamente usando a API fluente MLflow, mlflow.<method>. Outras operações exigem um cliente MLflow para habilitar a comunicação com o Machine Learning no protocolo MLflow. O código a seguir cria um MlflowClient objeto:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Limitações

  • O Azure Machine Learning não dá suporte à renomeação de modelos.

  • O Machine Learning não suporta a exclusão de todo o contêiner do modelo.

  • Não há suporte para registros organizacionais para gerenciamento de modelos com MLflow.

  • A implantação de modelos a partir de um estágio de modelo específico não é suportada atualmente no Machine Learning.

  • Atualmente, as operações entre espaços de trabalho não são suportadas no Machine Learning.

Registar novos modelos

O registro de modelos oferece uma maneira conveniente e centralizada de gerenciar modelos em um espaço de trabalho. Cada espaço de trabalho tem seu próprio registro de modelos independentes. As seções a seguir demonstram duas maneiras de registrar modelos no Registro usando o SDK MLflow.

Criar modelos a partir de execução existente

Se você tiver um modelo MLflow registrado dentro de uma execução e quiser registrá-lo em um registro, use a ID de execução e o caminho onde o modelo é registrado. Você pode consultar essas informações seguindo as instruções em Gerenciar experimentos e execuções com MLflow.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Nota

Os modelos só podem ser registrados no registro no mesmo espaço de trabalho onde a execução foi rastreada. Atualmente, não há suporte para operações entre espaços de trabalho no Aprendizado de Máquina do Azure.

Gorjeta

Registre modelos de execuções ou usando o mlflow.<flavor>.log_model método de dentro da execução. Essa abordagem preserva a linhagem do trabalho que gerou o ativo.

Criar modelos a partir de ativos

Se você tiver uma pasta com um modelo MLModel MLflow, poderá registrá-la diretamente. Não há necessidade de o modelo estar sempre no contexto de uma corrida. Para essa abordagem, você pode usar o esquema file://path/to/model URI para registrar modelos MLflow armazenados no sistema de arquivos local.

O código a seguir cria um modelo simples usando o scikit-learn pacote e salva o modelo no formato MLflow no armazenamento local:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Gorjeta

O save_model() método funciona da mesma forma que o log_model() método. Enquanto o log_model() método salva o modelo dentro de uma execução ativa, o save_model() método usa o sistema de arquivos local para salvar o modelo.

O código a seguir registra o modelo usando o caminho local:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Registros de modelo de consulta

Você pode usar o SDK MLflow para consultar e pesquisar modelos registrados no Registro. As seções a seguir demonstram duas maneiras de consultar um modelo.

Consultar todos os modelos no registo

Você pode consultar todos os modelos registrados no registro usando o cliente MLflow.

O código a seguir imprime os nomes de todos os modelos no registro:

for model in client.search_registered_models():
    print(f"{model.name}")

Use o order_by método para organizar a saída por uma propriedade específica, como name, version, creation_timestamp, ou last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Nota

Para versões MLflow anteriores à 2.0, use o MlflowClient.list_registered_models() método em vez disso.

Obter versões específicas do modelo

O search_registered_models() método recupera o objeto de modelo, que contém todas as versões do modelo. Para obter a última versão do modelo registrado para um determinado modelo, você pode usar o get_registered_model() método:

client.get_registered_model(model_name)

Para obter uma versão específica de um modelo, use o seguinte código:

client.get_model_version(model_name, version=2)

Carregar modelos a partir do registo

Você pode carregar modelos diretamente do registro para restaurar objetos de modelos registrados. Para esta tarefa, use as funções mlflow.<flavor>.load_model() ou mlflow.pyfunc.load_model() e indique o URI do modelo a ser carregado.

Você pode implementar essas funções com a seguinte sintaxe:

  • models:/<model-name>/latest: Carregue a última versão do modelo.
  • models:/<model-name>/<version-number>: Carregue uma versão específica do modelo.
  • models:/<model-name>/<stage-name>: Carregue uma versão específica em um determinado estágio para um modelo. Para obter mais informações, consulte Trabalhar com estágios de modelo.

Para entender as diferenças entre as funções mlflow.<flavor>.load_model() e mlflow.pyfunc.load_model()o , consulte Fluxos de trabalho para carregar modelos MLflow.

Trabalhar com estágios de modelo

O MLflow suporta estágios para um modelo gerenciar o ciclo de vida do modelo. A versão do modelo pode transitar de um estágio para outro. Os estágios são atribuídos a versões específicas para um modelo. Um modelo pode ter várias versões em diferentes estágios.

Importante

Os estágios podem ser acessados somente usando o SDK MLflow. Eles não são visíveis no estúdio do Azure Machine Learning. Os estágios não podem ser recuperados usando o SDK do Azure Machine Learning, a CLI do Azure Machine Learning ou a API REST do Azure Machine Learning. Atualmente, não há suporte para a implantação a partir de um estágio de modelo específico.

Estágios do modelo de consulta

O código a seguir usa o cliente MLflow para verificar todos os estágios possíveis para um modelo:

client.get_model_version_stages(model_name, version="latest")

Você pode ver as versões do modelo para cada estágio do modelo recuperando o modelo do Registro. O código a seguir obtém a versão do modelo que está atualmente no Staging estágio:

client.get_latest_versions(model_name, stages=["Staging"])

Várias versões de modelo podem estar no mesmo estágio ao mesmo tempo no MLflow. No exemplo anterior, o método retorna a versão mais recente (mais recente) entre todas as versões para o estágio.

Importante

No SDK do MLflow, os nomes dos estágios diferenciam maiúsculas de minúsculas.

Versão do modelo de transição

A transição de uma versão do modelo para um estágio específico pode ser feita usando o cliente MLflow:

client.transition_model_version_stage(model_name, version=3, stage="Staging")

Quando você faz a transição de uma versão do modelo para um estágio específico, se o estágio já tiver outras versões do modelo, as versões existentes permanecem inalteradas. Esse comportamento se aplica por padrão.

Outra abordagem é definir o archive_existing_versions=True parâmetro durante a transição. Essa abordagem instrui o MLflow a mover quaisquer versões de modelo existentes para o estágio Archived:

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Carregar modelos a partir de estágios

Você pode carregar um modelo em um estágio específico diretamente do Python usando a load_model função e o seguinte formato URI. Para que esse método seja bem-sucedido, todas as bibliotecas e dependências devem ser instaladas em seu ambiente de trabalho.

Carregue o modelo a partir do Staging palco:

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Editar e excluir modelos

A edição de modelos registrados é suportada no MLflow e no Azure Machine Learning, mas há algumas diferenças importantes. As seções a seguir descrevem algumas opções.

Nota

Não há suporte para renomear modelos no Aprendizado de Máquina do Azure porque os objetos de modelo são immutáveis.

Editar a descrição e as tags do modelo

Você pode editar a descrição e as tags de um modelo usando o SDK do MLflow:

client.update_model_version(model_name, version=1, description="My classifier description")

Para editar tags, use os set_model_version_tag métodos e remove_model_version_tag :

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Para remover uma tag, use o delete_model_version_tag método:

client.delete_model_version_tag(model_name, version="1", key="type")

Eliminar a versão do modelo

Você pode excluir qualquer versão do modelo no Registro usando o cliente MLflow:

client.delete_model_version(model_name, version="2")

Nota

O Machine Learning não suporta a exclusão de todo o contêiner do modelo. Para realizar essa tarefa, exclua todas as versões do modelo para um determinado modelo.

Revise os recursos suportados para gerenciar modelos

O cliente MLflow expõe vários métodos para recuperar e gerenciar modelos. A tabela a seguir lista os métodos atualmente suportados no MLflow quando conectados ao Azure Machine Learning. A tabela também compara o MLflow com outros recursos de gerenciamento de modelos no Azure Machine Learning.


Descrição das funcionalidades
Apenas MLflow Aprendizado de máquina com MLflow CLI de Aprendizado de Máquina v2 Estúdio de Machine Learning
Registrar modelos no formato MLflow
Registrar modelos que não estão no formato MLflow
Registrar modelos de saídas/artefatos de execução ✓ 1 ✓ 2
Registrar modelos de saídas/artefatos de execução em um servidor/espaço de trabalho de rastreamento diferente ✓ 5 ✓ 5
Pesquisar/listar modelos registados
Recuperando detalhes das versões do modelo registrado
Editar descrição das versões do modelo registado
Editar tags de versões do modelo registrado
Renomear modelos registrados 3 3 3
Excluir um modelo registrado (contêiner) 3 3 3
Excluir a versão de um modelo registrado
Gerenciar estágios do modelo MLflow
Pesquisar modelos registados por nome ✓ 4
Pesquisar modelos registrados usando comparadores LIKE de cadeia de caracteres e ILIKE ✓ 4
Pesquisar modelos registados por etiqueta ✓ 4
Apoio a registos organizacionais

Notas de rodapé da tabela:

  • 1 Use URIs (Uniform Resource Identifiers) com o formato runs:/<ruin-id>/<path>.
  • 2 Use URIs com o formato azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Os modelos registados são objetos imutáveis no Azure Machine Learning.
  • 4 Use a caixa de pesquisa no estúdio do Azure Machine Learning. A correspondência parcial é suportada.
  • 5 Use registros para mover modelos em diferentes espaços de trabalho e preservar a linhagem.