Share via


Gerenciar registros de modelos em Azure Machine Learning com o MLflow

O Azure Machine Learning dá suporte ao MLflow para gerenciamento de modelos quando conectado a um workspace. Tal abordagem representa uma forma conveniente de dar suporte a todo o ciclo de vida do modelo para usuários familiarizados com o cliente do MLFlow. O artigo a seguir descreve os diferentes recursos e como ele se compara com outras opções.

Pré-requisitos

  • Instale o pacote mlflow do SDK do MLflow e o plug-in do Azure Machine Learning para MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Dica

    Você pode usar o pacote mlflow-skinny, que é um pacote MLflow leve sem dependências de armazenamento, servidor, interface do usuário ou ciência de dados do SQL. mlflow-skinny é 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.

  • Um Workspace do Azure Machine Learning. Você pode criar um seguindo o tutorial Criar recursos de machine learning.

  • Se você estiver executando o acompanhamento remoto (ou seja, acompanhando experimentos que estão sendo executados fora do Azure Machine Learning), configure o MLflow para apontar para o URI de acompanhamento do workspace do Azure Machine Learning. Para obter mais informações sobre como conectar o MLflow ao seu workspace, consulte Configurar o MLflow para o Azure Machine Learning.

  • Observe que os registros organizacionais não são compatíveis com o gerenciamento de modelos com MLflow.

  • Algumas operações podem ser executadas diretamente usando a API fluente do MLflow (mlflow.<method>). No entanto, outras pessoas podem precisar criar um cliente do MLflow, que permite a comunicação com o Azure Machine Learning no protocolo do MLflow. Você pode criar um objeto MlflowClient da seguinte maneira. Este tutorial usa o objeto client para se referir a esse cliente MLflow.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Registrar novos modelos no registro

O registro de modelos oferece uma forma conveniente e centralizada de gerenciar modelos em um workspace. Cada workspace tem seu próprio registro de modelos independentes. A seção a seguir explica várias maneiras de registrar modelos no registro usando o SDK do MLflow.

Criar modelos de uma execução existente

Se você tiver um modelo MLflow registrado em uma execução e quiser colocá-lo em um registro, use a ID de execução e o caminho em que o modelo foi registrado. Consulte Gerenciar experimentos e execuções com o MLflow para saber como consultar essas informações se você não tiver.

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

Observação

Os modelos só podem ser registrados no registro no mesmo workspace em que a execução foi rastreada. Não há suporte para operações entre workspaces no momento no Azure Machine Learning.

Dica

Recomendamos que você registre os modelos de execuções ou use o método mlflow.<flavor>.log_model dentro da execução, pois ele mantém a linhagem do trabalho que gerou o ativo.

Criar modelos de ativos

Se você tiver uma pasta com um modelo MLFlow do MLModel, poderá registrá-la diretamente. Não é necessário que o modelo esteja sempre no contexto de uma execução. Para fazer isso, você pode usar o esquema file://path/to/model de URI para registrar modelos de MLflow armazenados no sistema de arquivos local. Vamos criar um modelo simples usando Scikit-Learn e salvá-lo 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")

Dica

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

Agora você pode registrar o modelo no caminho local:

import os

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

Consulta de registros de modelo

Você pode usar o SDK do MLflow para consultar e pesquisar modelos registrados no registro. A seção a seguir explica várias maneiras de conseguir isso.

Consultando todos os modelos no registro

Você pode consultar todos os modelos registrados no registro usando o cliente do MLflow. O exemplo a seguir imprime todos os nomes do modelo:

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

Use order_by para ordenar por uma propriedade específica como name, version, creation_timestamp e last_updated_timestamp:

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

Observação

Consultoria do MLflow 2.0: nas versões antigas do MLflow (<2.0), use o método MlflowClient.list_registered_models().

Obtendo versões específicas do modelo

O comando search_registered_models() recupera o objeto de modelo que contém todas as versões de modelo. No entanto, se você quiser obter a última versão do modelo registrado de um determinado modelo, poderá usar get_registered_model:

client.get_registered_model(model_name)

Se você precisar de uma versão específica do modelo, poderá indicar:

client.get_model_version(model_name, version=2)

Carregamento de modelos do registro

É possível carregar modelos diretamente do registro para restaurar os objetos de modelos que foram registrados. Use as funções mlflow.<flavor>.load_model() ou mlflow.pyfunc.load_model() indicando o URI do modelo que você deseja carregar usando a seguinte sintaxe:

  • models:/<model-name>/latest, para carregar a última versão do modelo.
  • models:/<model-name>/<version-number>, para carregar uma versão específica do modelo.
  • models:/<model-name>/<stage-name>, para carregar uma versão específica de um modelo em um determinado estágio. Veja Estágios do modelo para obter detalhes.

Dica

Para saber mais sobre a diferença entre mlflow.<flavor>.load_model() e mlflow.pyfunc.load_model(), confira Fluxos de trabalho para carregar modelos do MLflow.

Fases do modelo

O MLflow dá suporte as fases do modelo para gerenciar o ciclo de vida do modelo. A versão do modelo pode fazer a transição de uma fase para outra. Fases são atribuídas à versão de um modelo (em vez de modelos), o que significa que um determinado modelo pode ter várias versões em diferentes fases.

Importante

Fases só podem ser acessadas usando o SDK do MLflow. Eles não aparecem no portal do Azure ML Studio e não podem ser recuperados usando nem o SDK do Azure ML, a CLI do Azure ML ou a API REST do Azure ML. Não há suporte para a criação da implantação da fase de um determinado modelo no momento.

Fases do modelo de consulta

Você pode usar o cliente MLflow para verificar todas as fases possíveis que um modelo pode ser:

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

Você pode ver qual é a versão do modelo em cada fase obtendo o modelo do registro. O exemplo a seguir obtém a versão do modelo atualmente na fase Staging.

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

Observação

Várias versões podem estar no mesma fase ao mesmo tempo no Mlflow, no entanto, esse método retorna a versão mais recente (versão maior) entre todas elas.

Aviso

Os nomes das fase diferenciam maiúsculas de minúsculas.

Modelos de transição

A transição da versão de um modelo para uma fase específica pode ser feita usando o cliente MLflow.

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

Por padrão, se houver uma versão de modelo existente nessa fase específica, ela permanecerá lá. Portanto, ele não é substituído, já que várias versões de modelo podem estar na mesma fase ao mesmo tempo. Como alternativa, você pode indicar para informar archive_existing_versions=True ao MLflow para mover a versão do modelo existente para a fase Archived.

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

Carregando modelos de fases

Ou pode carregar um modelo em uma fase específica diretamente do Python usando a função load_model e o seguinte formato de URI. Observe que, para que esse método tenha êxito, você precisa ter todas as bibliotecas e dependências já instaladas no ambiente em que você está trabalhando.

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

Editar e excluir modelos

Há suporte para a edição de modelos registrados no Mlflow e no Azure ML. No entanto, há algumas diferenças importantes a serem observadas:

Aviso

Não há suporte para a renomeação de modelos em Azure Machine Learning, pois os objetos de modelo são imutáveis.

Editar modelos

Você pode editar a descrição e as marcas do modelo de um modelo usando o Mlflow:

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

Para editar marcas, você precisa usar o método set_model_version_tag e remove_model_version_tag:

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

Remover uma marcação:

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

Excluir a versão de um modelo

Você pode excluir qualquer versão de modelo no registro usando o cliente MLflow, conforme demonstrado no exemplo a seguir:

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

Observação

O Azure Machine Learning não dá suporte à exclusão de todo o contêiner de modelo. Para obter a mesma coisa, você precisará excluir todas as versões do modelo de um determinado modelo.

Matriz de suporte para gerenciar modelos com o MLflow

O cliente MLflow expõe vários métodos para recuperar e gerenciar modelos. A tabela a seguir mostra quais desses métodos têm suporte no MLflow quando conectados ao Azure ML. Ele também o compara com outros recursos de gerenciamento de modelos no Azure ML.

Recurso MLflow Azure ML com o MLflow CLIv2 do Azure ML Azure ML Studio
Registrando modelos no formato MLflow
Registrando modelos que não estão no formato MLflow
Registrando modelos de saídas/artefatos de execuções 1 2
Registrar modelos de saídas/artefatos de execução em um servidor/workspace de rastreamento diferente 5 5
Pesquisar/listar modelos registrados
Recuperar detalhes das versões do modelo registrado
Editar a descrição de versões do modelo registrado
Editar as marcações 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 fases do modelo do MLflow
Pesquisar modelos registrados por nome 4
Pesquisar modelos registrados usando comparadores de cadeia de caracteres LIKE e ILIKE 4
Pesquisar modelos registrados por marca 4
Suporte registros organizacionais

Observação

  • 1 Usar URIs com formato runs:/<ruin-id>/<path>.
  • 2 Usar URIs com formato azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Modelos registrados são objetos imutáveis no Azure ML.
  • 4 Use a caixa de pesquisa no Azure ML Studio. Correspondência parcial com suporte.
  • 5 Use registros para movimentar modelos entre workspaces diferentes e, ao mesmo tempo, manter a linhagem.

Próximas etapas