Gerenciar registro de modelos no Azure Machine Learning com o MLflow
O Azure Machine Learning dá suporte ao MLflow para gerenciamento de modelos quando conectado a um workspace. Essa abordagem é uma maneira conveniente de dar suporte a todo o ciclo de vida do modelo para usuários familiarizados com o cliente do MLflow.
Este artigo descreve as funcionalidades para gerenciar um registro de modelos com o MLflow e como esse método se compara a outras opções de gerenciamento.
Pré-requisitos
Instale o pacote do SDK do MLflow
mlflow
e o pluginazureml-mlflow
do Azure Machine Learning para MLflow:pip install mlflow azureml-mlflow
Dica
Você pode usar o pacote
mlflow-skinny
, que é um pacote MLflow leve sem dependências de servidor, interface do usuário, ciência de dados ou armazenamento do SQL. Omlflow-skinny
é recomendado para usuários que precisam, principalmente, dos recursos de acompanhamento e registro em log do MLflow sem importar o conjunto completo de recursos, incluindo implantações.Um workspace do Azure Machine Learning. Para criar um espaço de trabalho, confira o tutorial Criar recursos de machine learning. Analise quais permissões de acesso você precisa para executar suas operações do MLflow no seu espaço de trabalho.
Se estiver efetuando 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 seu espaço de trabalho 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.
Os procedimentos deste artigo usam um objeto
client
para se referir ao cliente do MLflow.Algumas operações podem ser executadas diretamente usando a API fluent do MLflow,
mlflow.<method>
. Outras operações exigem um cliente do MLflow para habilitar a comunicação com o Machine Learning no protocolo MLflow. O código a seguir cria um objetoMlflowClient
:import mlflow client = mlflow.tracking.MlflowClient()
Limitações
O Azure Machine Learning não dá suporte para renomear modelos.
O Machine Learning não dá suporte para excluir o contêiner inteiro do modelo.
Registros organizacionais não tem suporte no gerenciamento de modelos com o MLflow.
A implantação de modelos de uma preparação específica não tem suporte atualmente no Machine Learning.
Operações entre espaços de trabalho não tem suporte atualmente no Machine Learning.
Registrar novos modelos
O registro de modelos oferece uma maneira conveniente e centralizada de gerenciar modelos em um espaço de trabalho. Cada workspace tem seu próprio registro de modelos independentes. As seções a seguir demonstram duas maneiras de registrar modelos no registro usando o SDK do MLflow.
Criar modelos a partir de uma execução existente
Se você tiver um modelo do MLflow registrado em uma execução e quiser registrá-lo em um registro, use a ID da execução e o caminho no qual o modelo foi registrado. Você pode consultar essas informações seguindo as instruções em Gerenciar experimentos e execuções com o MLflow.
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. Operações entre espaços de trabalho não tem suporte atualmente no Azure Machine Learning.
Dica
Registrar modelos a partir de execuções ou usando o método mlflow.<flavor>.log_model
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 do MLflow, poderá registrá-lo diretamente. Não é necessário que o modelo esteja sempre no contexto de uma execução. Para essa abordagem, você pode usar o esquema URI file://path/to/model
para registrar modelos do MLflow armazenados no sistema de arquivos local.
O código a seguir cria um modelo simples usando o pacote scikit-learn
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")
Dica
O método save_model()
funciona da mesma maneira que o método log_model()
. Enquanto o método log_model()
salva o modelo dentro de uma execução ativa, o método save_model()
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")
Consultar registros de modelos
Você pode usar o SDK do 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 registro
Você pode consultar todos os modelos registrados no registro usando o cliente do 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 método order_by
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"])
Observação
Para versões do MLflow anteriores à 2.0, use o método MlflowClient.list_registered_models()
.
Obter versões específicas de modelos
O método search_registered_models()
recupera o objeto do modelo, que contém todas as versões do modelo. Para obter a última versão registrada de um modelo, você pode usar o método get_registered_model()
:
client.get_registered_model(model_name)
Para obter uma versão específica de um modelo, use o código a seguir:
client.get_model_version(model_name, version=2)
Carregar os modelos do registro
Você pode carregar modelos diretamente do registro para restaurar objetos de modelos registrados. Para essa tarefa, use as funções mlflow.<flavor>.load_model()
ou mlflow.pyfunc.load_model()
e indique o URI do modelo para carregar.
Você pode implementar essas funções com a seguinte sintaxe:
models:/<model-name>/latest
: Carregar a última versão do modelo.models:/<model-name>/<version-number>
: Carregar uma versão específica do modelo.models:/<model-name>/<stage-name>
: Carregar uma versão específica em uma preparação determinado de um modelo. Para mais informações, consulte Trabalhar com preparação de modelos.
Para entender as diferenças entre as funções mlflow.<flavor>.load_model()
e mlflow.pyfunc.load_model()
, consulte Fluxos de trabalho para carregar modelos do MLflow.
Trabalhar com preparações de modelos
O MLflow dá suporte a preparações para um modelo, permitindo gerenciar o ciclo de vida do modelo. A versão do modelo pode transitar de um preparação para outro. Preparações são atribuídos a versões específicas de um modelo. Um modelo pode ter várias versões em preparações diferentes.
Importante
As preparações só podem ser acessadas usando o SDK do MLflow. Eles não estão visíveis no Estúdio do Azure Machine Learning. As preparações não podem ser recuperadas usando o SDK do Azure Machine Learning, a CLI do Azure Machine Learning ou a API REST do Azure Machine Learning. A implantação de uma versão de modelo específica de uma preparação não tem suporte atualmente.
Consultar os preparações de modelos
O código a seguir usa o cliente do MLflow para verificar todas as possíveis preparações de um modelo:
client.get_model_version_stages(model_name, version="latest")
Você pode ver as versões do modelo para cada preparação recuperando o modelo do registro. O código a seguir obtém a versão do modelo que está atualmente na preparação Staging
:
client.get_latest_versions(model_name, stages=["Staging"])
Várias versões de modelo podem estar na mesma preparação ao mesmo tempo no MLflow. No exemplo anterior, o método retorna a versão mais recente entre todas as versões para a preparação.
Importante
No SDK do MLflow, os nomes das preparações diferenciam maiúsculas de minúsculas.
Transição da versão de modelo
A transição de uma versão de modelo para uma preparação específica pode ser feita usando o cliente do MLflow:
client.transition_model_version_stage(model_name, version=3, stage="Staging")
Quando você faz a transição de uma versão de modelo para uma preparação específica, se a preparação já tiver outras versões de modelo, as versões existentes permanecerão inalteradas. Esse comportamento se aplica por padrão.
Outra abordagem é definir o parâmetro archive_existing_versions=True
durante a transição. Essa abordagem instrui o MLflow a mover quaisquer versões de modelo existentes para a preparação Archived
:
client.transition_model_version_stage(
model_name, version=3, stage="Staging", archive_existing_versions=True
)
Carregar modelos de preparações
Você pode carregar um modelo em uma preparação específica diretamente do Python usando a função load_model
e o seguinte formato de URI. Para que esse método seja bem-sucedido, todas as bibliotecas e dependências devem estar instaladas no seu ambiente de trabalho.
Carregar o modelo a partir da preparação Staging
:
model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")
Editar e excluir modelos
A edição de modelos registrados tem suporte tanto com o MLflow quanto com o Azure Machine Learning, mas há algumas diferenças importantes. As seções a seguir descrevem algumas opções.
Observação
Renomear modelos não tem suporte no Azure Machine Learning, pois os objetos de modelos são imutáveis.
Editar a descrição e marcas de modelos
Você pode editar a descrição e as marcas de um modelo usando o SDK do MLflow:
client.update_model_version(model_name, version=1, description="My classifier description")
Para editar marcas, use os métodos set_model_version_tag
e remove_model_version_tag
:
client.set_model_version_tag(model_name, version="1", key="type", value="classification")
Para remover uma marca, use o método delete_model_version_tag
:
client.delete_model_version_tag(model_name, version="1", key="type")
Excluir versão do modelo
Você pode excluir qualquer versão de modelo no registro usando o cliente do MLflow:
client.delete_model_version(model_name, version="2")
Observação
O Machine Learning não dá suporte para excluir o contêiner inteiro do modelo. Para realizar essa tarefa, exclua todas as versões do modelo para um determinado modelo.
Revisar as funcionalidades com suporte para o gerenciamento de modelos
O cliente MLflow expõe vários métodos para recuperar e gerenciar modelos. A tabela a seguir lista os métodos atualmente com suporte no MLflow quando conectado ao Azure Machine Learning. A tabela também compara o MLflow com outras funcionalidades de gerenciamento de modelos no Azure Machine Learning.
Descrição do recurso |
Somente MLflow | Machine Learning com o MLflow | CLI do Machine Learning v2 | Estúdio de Machine Learning |
---|---|---|---|---|
Registrar modelos no formato MLflow | ✓ | ✓ | ✓ | ✓ |
Registrar modelos que não estão no formato MLflow | ✓ | ✓ | ||
Registrar modelos a partir de saídas/artefatos de execução | ✓ | ✓ 1 | ✓ 2 | ✓ |
Registrar modelos a partir de saídas/artefatos de execução em um servidor de acompanhamento/espaço de trabalho diferente | ✓ | ✓ 5 | ✓ 5 | |
Pesquisar/listar modelos registrados | ✓ | ✓ | ✓ | ✓ |
Recuperar detalhes das versões do modelo registrado | ✓ | ✓ | ✓ | ✓ |
Editar as descrição das versões dos modelos registrados | ✓ | ✓ | ✓ | ✓ |
Editar marcas de versões de modelos registrados | ✓ | ✓ | ✓ | ✓ |
Renomear os modelos registrados | ✓ | 3 | 3 | 3 |
Excluir um modelo registrado (contêiner) | ✓ | 3 | 3 | 3 |
Excluir uma versão registrada do modelo | ✓ | ✓ | ✓ | ✓ |
Gerenciar fases do modelo do MLflow | ✓ | ✓ | ||
Pesquisar modelos registrados por nome | ✓ | ✓ | ✓ | ✓ 4 |
Pesquisar modelos registrados usando comparadores de cadeias de caracteres LIKE e ILIKE |
✓ | ✓ 4 | ||
Pesquisar modelos registrados por marca | ✓ 4 | |||
Suporte registros organizacionais | ✓ | ✓ |
Notas de rodapé da tabela:
- 1 Usar Identificadores de Recursos Uniformes (URIs) com o formato
runs:/<ruin-id>/<path>
. - 2 Usar URIs com o formato
azureml://jobs/<job-id>/outputs/artifacts/<path>
. - 3 Os modelos registrados são objetos imutáveis no Azure Machine Learning.
- 4 Usar a caixa de pesquisa no Estúdio do Azure Machine Learning. É permitida a correspondência parcial.
- 5 Usar registros para mover modelos entre diferentes espaços de trabalho e preservar a linhagem.