Gerenciar registros 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 representa uma maneira conveniente de suportar todo o ciclo de vida do modelo para usuários familiarizados com o cliente MLFlow. O artigo a seguir descreve os diferentes recursos e como ele se compara com outras opções.

Pré-requisitos

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

    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. 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.

  • Uma área de trabalho do Azure Machine Learning. Você pode criar um seguindo o tutorial Criar recursos de aprendizado de máquina.

  • Se você estiver executando o rastreamento remoto (ou seja, rastreando experimentos que estão sendo executados fora do Aprendizado de Máquina do Azure), configure o MLflow para apontar para o URI de rastreamento do seu espaço 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.

  • Observe que os registros organizacionais não são suportados para gerenciamento de modelo com MLflow.

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

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Registar novos modelos no registo

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. A seção a seguir explica várias maneiras de registrar modelos no Registro usando o SDK MLflow.

Criando modelos a partir de uma 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 foi registrado. Consulte Gerenciar experimentos e execuções com o MLflow para saber como consultar essas informações se você não as tiver.

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. As operações entre espaços de trabalho não são suportadas no momento no Azure Machine Learning.

Gorjeta

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

Criação de 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 fazer isso, você pode usar o esquema file://path/to/model URI para registrar modelos 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")

Gorjeta

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

Agora você pode registrar o modelo a partir do caminho local:

import os

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

Consultando registros de modelo

Você pode usar o SDK MLflow para consultar e pesquisar modelos registrados no Registro. A seção a seguir explica várias maneiras de alcançá-lo.

Consultando todos os modelos no registro

Você pode consultar todos os modelos registrados no registro usando o cliente 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 encomendar por uma propriedade específica como name, , , versioncreation_timestampe last_updated_timestamp:

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

Nota

MLflow 2.0 advisory: Em versões mais antigas do Mlflow (<2.0), use o método MlflowClient.list_registered_models() em vez disso.

Obter versões específicas do modelo

O search_registered_models() comando recupera o objeto de modelo, que contém todas as versões do modelo. No entanto, se pretender obter a última versão de modelo registada de um determinado modelo, pode utilizar get_registered_model:

client.get_registered_model(model_name)

Se necessitar de uma versão específica do modelo, pode indicá-lo:

client.get_model_version(model_name, version=2)

Carregando modelos do registro

Você pode 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() indique 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 em um determinado estágio para um modelo. Veja os estágios do modelo para obter detalhes.

Gorjeta

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

Etapas do modelo

O MLflow suporta os estágios do modelo para 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 à versão de um modelo (em vez de modelos), o que significa que um determinado modelo pode ter várias versões em diferentes estágios.

Importante

Os estágios só podem ser acessados 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. A criação de implantação a partir do estágio de um determinado modelo não é suportada no momento.

Consultando estágios do modelo

Você pode usar o cliente MLflow para verificar todos os estágios 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 estágio obtendo o modelo do registro. O exemplo a seguir obtém a versão do modelo atualmente no estágio Staging.

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

Nota

Várias versões podem estar no mesmo estágio 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 dos palcos diferenciam maiúsculas de minúsculas.

Modelos em transição

A transição da versão de um 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")

Por padrão, se houver uma versão de modelo existente nesse estágio específico, ela permanecerá lá. Assim, ele não é substituído, pois várias versões do modelo podem estar no mesmo estágio ao mesmo tempo. Como alternativa, você pode indicar archive_existing_versions=True para dizer ao MLflow para mover a versão do modelo existente para o palco Archived.

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

Carregando modelos a partir de estágios

ou pode carregar um modelo em um estágio específico diretamente do Python usando a load_model função e o seguinte formato URI. Observe que, para que esse método seja bem-sucedido, você precisa ter todas as bibliotecas e dependências já instaladas no ambiente em que está trabalhando.

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

Editar e eliminar modelos

A edição de modelos registrados é suportada no Mlflow e no Azure ML. No entanto, existem algumas diferenças que devem ser notadas:

Aviso

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

Edição de modelos

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

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

Para editar tags, você tem que 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 etiqueta:

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

Eliminar a versão de um modelo

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

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

Nota

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

Matriz de suporte para gerenciamento de modelos com MLflow

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

Caraterística MLflow Azure ML com MLflow Azure ML CLIv2 Azure ML Studio
Registrando modelos no formato MLflow
Registrando modelos que não estão no formato MLflow
Registrando modelos a partir de saídas/artefatos de execução 1 2
Registrando modelos a partir 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
Editando a descrição das versões do modelo registrado
Editando tags de versões de modelos registrados
Renomeando modelos registrados 3 3 3
Excluindo um modelo registrado (contêiner) 3 3 3
Eliminar a versão de um modelo registado
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

Nota

  • 1 Use URIs com formato runs:/<ruin-id>/<path>.
  • 2 Use URIs com formato azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Os modelos registados são objetos imutáveis no Azure ML.
  • 4 Use a caixa de pesquisa no Azure ML Studio. Correspondência parcial suportada.
  • 5 Use registros para mover modelos em diferentes espaços de trabalho, mantendo a linhagem.

Próximos passos